[{"data":1,"prerenderedAt":174606},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-python-jiao-cheng\u002Fch4-xun-huan-yu-ju":3,"wiki-doc-nav":1933},{"id":4,"title":5,"body":6,"description":1926,"extension":1927,"meta":1928,"navigation":108,"path":1929,"seo":1930,"stem":1931,"__hash__":1932},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":8,"toc":1906},"minimark",[9,13,18,27,30,49,53,56,84,87,147,150,168,172,175,248,251,271,275,469,479,483,488,493,547,550,558,562,568,616,618,624,628,633,671,674,728,732,738,802,808,839,845,849,905,908,984,987,1046,1050,1053,1133,1136,1140,1254,1257,1283,1287,1300,1370,1373,1466,1470,1473,1484,1487,1621,1625,1839,1847,1851,1881,1885,1902],[10,11,5],"h1",{"id":12},"_4-循环语句",[14,15,17],"h2",{"id":16},"_41-为什么需要循环","4.1 为什么需要循环",[19,20,21,22,26],"p",{},"如果要输出 1 到 100，不应该写 100 行 ",[23,24,25],"code",{},"print()","，而应该用循环。",[19,28,29],{},"循环适合处理重复任务：",[31,32,33,37,40,43,46],"ol",{},[34,35,36],"li",{},"重复输出。",[34,38,39],{},"重复输入。",[34,41,42],{},"遍历数据。",[34,44,45],{},"持续执行菜单。",[34,47,48],{},"批量处理文件或数据。",[14,50,52],{"id":51},"_42-while循环","4.2 while循环",[19,54,55],{},"语法：",[57,58,63],"pre",{"className":59,"code":60,"language":61,"meta":62,"style":62},"language-python shiki shiki-themes github-light github-dark","while 条件:\n    循环体\n","python","",[23,64,65,78],{"__ignoreMap":62},[66,67,70,74],"span",{"class":68,"line":69},"line",1,[66,71,73],{"class":72},"szBVR","while",[66,75,77],{"class":76},"sVt8B"," 条件:\n",[66,79,81],{"class":68,"line":80},2,[66,82,83],{"class":76},"    循环体\n",[19,85,86],{},"示例：",[57,88,90],{"className":59,"code":89,"language":61,"meta":62,"style":62},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[23,91,92,104,110,127,136],{"__ignoreMap":62},[66,93,94,97,100],{"class":68,"line":69},[66,95,96],{"class":76},"i ",[66,98,99],{"class":72},"=",[66,101,103],{"class":102},"sj4cs"," 1\n",[66,105,106],{"class":68,"line":80},[66,107,109],{"emptyLinePlaceholder":108},true,"\n",[66,111,113,115,118,121,124],{"class":68,"line":112},3,[66,114,73],{"class":72},[66,116,117],{"class":76}," i ",[66,119,120],{"class":72},"\u003C=",[66,122,123],{"class":102}," 5",[66,125,126],{"class":76},":\n",[66,128,130,133],{"class":68,"line":129},4,[66,131,132],{"class":102},"    print",[66,134,135],{"class":76},"(i)\n",[66,137,139,142,145],{"class":68,"line":138},5,[66,140,141],{"class":76},"    i ",[66,143,144],{"class":72},"+=",[66,146,103],{"class":102},[19,148,149],{},"执行过程：",[31,151,152,159,162,165],{},[34,153,154,155,158],{},"判断条件 ",[23,156,157],{},"i \u003C= 5","。",[34,160,161],{},"条件成立，执行循环体。",[34,163,164],{},"执行完后回到条件判断。",[34,166,167],{},"条件不成立，退出循环。",[14,169,171],{"id":170},"_43-while累加","4.3 while累加",[19,173,174],{},"计算 1 到 100 的和：",[57,176,178],{"className":59,"code":177,"language":61,"meta":62,"style":62},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[23,179,180,188,198,202,215,225,234,239],{"__ignoreMap":62},[66,181,182,184,186],{"class":68,"line":69},[66,183,96],{"class":76},[66,185,99],{"class":72},[66,187,103],{"class":102},[66,189,190,193,195],{"class":68,"line":80},[66,191,192],{"class":76},"total ",[66,194,99],{"class":72},[66,196,197],{"class":102}," 0\n",[66,199,200],{"class":68,"line":112},[66,201,109],{"emptyLinePlaceholder":108},[66,203,204,206,208,210,213],{"class":68,"line":129},[66,205,73],{"class":72},[66,207,117],{"class":76},[66,209,120],{"class":72},[66,211,212],{"class":102}," 100",[66,214,126],{"class":76},[66,216,217,220,222],{"class":68,"line":138},[66,218,219],{"class":76},"    total ",[66,221,144],{"class":72},[66,223,224],{"class":76}," i\n",[66,226,228,230,232],{"class":68,"line":227},6,[66,229,141],{"class":76},[66,231,144],{"class":72},[66,233,103],{"class":102},[66,235,237],{"class":68,"line":236},7,[66,238,109],{"emptyLinePlaceholder":108},[66,240,242,245],{"class":68,"line":241},8,[66,243,244],{"class":102},"print",[66,246,247],{"class":76},"(total)\n",[19,249,250],{},"核心思想：",[31,252,253,259,265],{},[34,254,255,258],{},[23,256,257],{},"i"," 控制循环次数。",[34,260,261,264],{},[23,262,263],{},"total"," 保存累加结果。",[34,266,267,268,270],{},"每轮循环都要更新 ",[23,269,257],{},"，否则可能死循环。",[14,272,274],{"id":273},"_44-while猜数字","4.4 while猜数字",[57,276,278],{"className":59,"code":277,"language":61,"meta":62,"style":62},"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",[23,279,280,288,292,314,323,327,336,361,370,375,390,403,416,428,436,463],{"__ignoreMap":62},[66,281,282,285],{"class":68,"line":69},[66,283,284],{"class":72},"import",[66,286,287],{"class":76}," random\n",[66,289,290],{"class":68,"line":80},[66,291,109],{"emptyLinePlaceholder":108},[66,293,294,297,299,302,305,308,311],{"class":68,"line":112},[66,295,296],{"class":76},"answer ",[66,298,99],{"class":72},[66,300,301],{"class":76}," random.randint(",[66,303,304],{"class":102},"1",[66,306,307],{"class":76},", ",[66,309,310],{"class":102},"100",[66,312,313],{"class":76},")\n",[66,315,316,319,321],{"class":68,"line":129},[66,317,318],{"class":76},"count ",[66,320,99],{"class":72},[66,322,197],{"class":102},[66,324,325],{"class":68,"line":138},[66,326,109],{"emptyLinePlaceholder":108},[66,328,329,331,334],{"class":68,"line":227},[66,330,73],{"class":72},[66,332,333],{"class":102}," True",[66,335,126],{"class":76},[66,337,338,341,343,346,349,352,354,358],{"class":68,"line":236},[66,339,340],{"class":76},"    guess ",[66,342,99],{"class":72},[66,344,345],{"class":102}," int",[66,347,348],{"class":76},"(",[66,350,351],{"class":102},"input",[66,353,348],{"class":76},[66,355,357],{"class":356},"sZZnC","\"请输入1到100之间的数字:\"",[66,359,360],{"class":76},"))\n",[66,362,363,366,368],{"class":68,"line":241},[66,364,365],{"class":76},"    count ",[66,367,144],{"class":72},[66,369,103],{"class":102},[66,371,373],{"class":68,"line":372},9,[66,374,109],{"emptyLinePlaceholder":108},[66,376,378,381,384,387],{"class":68,"line":377},10,[66,379,380],{"class":72},"    if",[66,382,383],{"class":76}," guess ",[66,385,386],{"class":72},">",[66,388,389],{"class":76}," answer:\n",[66,391,393,396,398,401],{"class":68,"line":392},11,[66,394,395],{"class":102},"        print",[66,397,348],{"class":76},[66,399,400],{"class":356},"\"猜大了\"",[66,402,313],{"class":76},[66,404,406,409,411,414],{"class":68,"line":405},12,[66,407,408],{"class":72},"    elif",[66,410,383],{"class":76},[66,412,413],{"class":72},"\u003C",[66,415,389],{"class":76},[66,417,419,421,423,426],{"class":68,"line":418},13,[66,420,395],{"class":102},[66,422,348],{"class":76},[66,424,425],{"class":356},"\"猜小了\"",[66,427,313],{"class":76},[66,429,431,434],{"class":68,"line":430},14,[66,432,433],{"class":72},"    else",[66,435,126],{"class":76},[66,437,439,441,443,446,449,452,455,458,461],{"class":68,"line":438},15,[66,440,395],{"class":102},[66,442,348],{"class":76},[66,444,445],{"class":72},"f",[66,447,448],{"class":356},"\"猜对了，一共猜了",[66,450,451],{"class":102},"{",[66,453,454],{"class":76},"count",[66,456,457],{"class":102},"}",[66,459,460],{"class":356},"次\"",[66,462,313],{"class":76},[66,464,466],{"class":68,"line":465},16,[66,467,468],{"class":72},"        break\n",[19,470,471,474,475,478],{},[23,472,473],{},"while True"," 表示无限循环，通常配合 ",[23,476,477],{},"break"," 使用。",[14,480,482],{"id":481},"_45-break和continue","4.5 break和continue",[484,485,487],"h3",{"id":486},"_451-break","4.5.1 break",[19,489,490,492],{},[23,491,477],{}," 直接结束整个循环。",[57,494,496],{"className":59,"code":495,"language":61,"meta":62,"style":62},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[23,497,498,523,537,541],{"__ignoreMap":62},[66,499,500,503,505,508,511,513,515,517,520],{"class":68,"line":69},[66,501,502],{"class":72},"for",[66,504,117],{"class":76},[66,506,507],{"class":72},"in",[66,509,510],{"class":102}," range",[66,512,348],{"class":76},[66,514,304],{"class":102},[66,516,307],{"class":76},[66,518,519],{"class":102},"6",[66,521,522],{"class":76},"):\n",[66,524,525,527,529,532,535],{"class":68,"line":80},[66,526,380],{"class":72},[66,528,117],{"class":76},[66,530,531],{"class":72},"==",[66,533,534],{"class":102}," 3",[66,536,126],{"class":76},[66,538,539],{"class":68,"line":112},[66,540,468],{"class":72},[66,542,543,545],{"class":68,"line":129},[66,544,132],{"class":102},[66,546,135],{"class":76},[19,548,549],{},"输出：",[57,551,556],{"className":552,"code":554,"language":555,"meta":62},[553],"language-text","1\n2\n","text",[23,557,554],{"__ignoreMap":62},[484,559,561],{"id":560},"_452-continue","4.5.2 continue",[19,563,564,567],{},[23,565,566],{},"continue"," 跳过本轮剩余代码，进入下一轮循环。",[57,569,571],{"className":59,"code":570,"language":61,"meta":62,"style":62},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[23,572,573,593,605,610],{"__ignoreMap":62},[66,574,575,577,579,581,583,585,587,589,591],{"class":68,"line":69},[66,576,502],{"class":72},[66,578,117],{"class":76},[66,580,507],{"class":72},[66,582,510],{"class":102},[66,584,348],{"class":76},[66,586,304],{"class":102},[66,588,307],{"class":76},[66,590,519],{"class":102},[66,592,522],{"class":76},[66,594,595,597,599,601,603],{"class":68,"line":80},[66,596,380],{"class":72},[66,598,117],{"class":76},[66,600,531],{"class":72},[66,602,534],{"class":102},[66,604,126],{"class":76},[66,606,607],{"class":68,"line":112},[66,608,609],{"class":72},"        continue\n",[66,611,612,614],{"class":68,"line":129},[66,613,132],{"class":102},[66,615,135],{"class":76},[19,617,549],{},[57,619,622],{"className":620,"code":621,"language":555,"meta":62},[553],"1\n2\n4\n5\n",[23,623,621],{"__ignoreMap":62},[14,625,627],{"id":626},"_46-for循环","4.6 for循环",[19,629,630,632],{},[23,631,502],{}," 常用于遍历序列。",[57,634,636],{"className":59,"code":635,"language":61,"meta":62,"style":62},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[23,637,638,648,652,664],{"__ignoreMap":62},[66,639,640,643,645],{"class":68,"line":69},[66,641,642],{"class":76},"name ",[66,644,99],{"class":72},[66,646,647],{"class":356}," \"python\"\n",[66,649,650],{"class":68,"line":80},[66,651,109],{"emptyLinePlaceholder":108},[66,653,654,656,659,661],{"class":68,"line":112},[66,655,502],{"class":72},[66,657,658],{"class":76}," ch ",[66,660,507],{"class":72},[66,662,663],{"class":76}," name:\n",[66,665,666,668],{"class":68,"line":129},[66,667,132],{"class":102},[66,669,670],{"class":76},"(ch)\n",[19,672,673],{},"遍历列表：",[57,675,677],{"className":59,"code":676,"language":61,"meta":62,"style":62},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[23,678,679,705,709,721],{"__ignoreMap":62},[66,680,681,684,686,689,692,694,697,699,702],{"class":68,"line":69},[66,682,683],{"class":76},"students ",[66,685,99],{"class":72},[66,687,688],{"class":76}," [",[66,690,691],{"class":356},"\"小明\"",[66,693,307],{"class":76},[66,695,696],{"class":356},"\"小红\"",[66,698,307],{"class":76},[66,700,701],{"class":356},"\"小刚\"",[66,703,704],{"class":76},"]\n",[66,706,707],{"class":68,"line":80},[66,708,109],{"emptyLinePlaceholder":108},[66,710,711,713,716,718],{"class":68,"line":112},[66,712,502],{"class":72},[66,714,715],{"class":76}," student ",[66,717,507],{"class":72},[66,719,720],{"class":76}," students:\n",[66,722,723,725],{"class":68,"line":129},[66,724,132],{"class":102},[66,726,727],{"class":76},"(student)\n",[14,729,731],{"id":730},"_47-range函数","4.7 range函数",[19,733,734,737],{},[23,735,736],{},"range()"," 用于生成整数序列。",[57,739,741],{"className":59,"code":740,"language":61,"meta":62,"style":62},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[23,742,743,760,778],{"__ignoreMap":62},[66,744,745,748,750,753,756],{"class":68,"line":69},[66,746,747],{"class":102},"range",[66,749,348],{"class":76},[66,751,752],{"class":102},"5",[66,754,755],{"class":76},")          ",[66,757,759],{"class":758},"sJ8bj","# 0,1,2,3,4\n",[66,761,762,764,766,768,770,772,775],{"class":68,"line":80},[66,763,747],{"class":102},[66,765,348],{"class":76},[66,767,304],{"class":102},[66,769,307],{"class":76},[66,771,752],{"class":102},[66,773,774],{"class":76},")       ",[66,776,777],{"class":758},"# 1,2,3,4\n",[66,779,780,782,784,786,788,791,793,796,799],{"class":68,"line":112},[66,781,747],{"class":102},[66,783,348],{"class":76},[66,785,304],{"class":102},[66,787,307],{"class":76},[66,789,790],{"class":102},"10",[66,792,307],{"class":76},[66,794,795],{"class":102},"2",[66,797,798],{"class":76},")   ",[66,800,801],{"class":758},"# 1,3,5,7,9\n",[19,803,804,805,807],{},"配合 ",[23,806,502],{},"：",[57,809,811],{"className":59,"code":810,"language":61,"meta":62,"style":62},"for i in range(1, 6):\n    print(i)\n",[23,812,813,833],{"__ignoreMap":62},[66,814,815,817,819,821,823,825,827,829,831],{"class":68,"line":69},[66,816,502],{"class":72},[66,818,117],{"class":76},[66,820,507],{"class":72},[66,822,510],{"class":102},[66,824,348],{"class":76},[66,826,304],{"class":102},[66,828,307],{"class":76},[66,830,519],{"class":102},[66,832,522],{"class":76},[66,834,835,837],{"class":68,"line":80},[66,836,132],{"class":102},[66,838,135],{"class":76},[19,840,841,842,844],{},"注意：",[23,843,747],{}," 的结束值不包含在内。",[14,846,848],{"id":847},"_48-for循环求和","4.8 for循环求和",[57,850,852],{"className":59,"code":851,"language":61,"meta":62,"style":62},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[23,853,854,862,866,887,895,899],{"__ignoreMap":62},[66,855,856,858,860],{"class":68,"line":69},[66,857,192],{"class":76},[66,859,99],{"class":72},[66,861,197],{"class":102},[66,863,864],{"class":68,"line":80},[66,865,109],{"emptyLinePlaceholder":108},[66,867,868,870,872,874,876,878,880,882,885],{"class":68,"line":112},[66,869,502],{"class":72},[66,871,117],{"class":76},[66,873,507],{"class":72},[66,875,510],{"class":102},[66,877,348],{"class":76},[66,879,304],{"class":102},[66,881,307],{"class":76},[66,883,884],{"class":102},"101",[66,886,522],{"class":76},[66,888,889,891,893],{"class":68,"line":129},[66,890,219],{"class":76},[66,892,144],{"class":72},[66,894,224],{"class":76},[66,896,897],{"class":68,"line":138},[66,898,109],{"emptyLinePlaceholder":108},[66,900,901,903],{"class":68,"line":227},[66,902,244],{"class":102},[66,904,247],{"class":76},[19,906,907],{},"求偶数和：",[57,909,911],{"className":59,"code":910,"language":61,"meta":62,"style":62},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[23,912,913,921,925,945,965,974,978],{"__ignoreMap":62},[66,914,915,917,919],{"class":68,"line":69},[66,916,192],{"class":76},[66,918,99],{"class":72},[66,920,197],{"class":102},[66,922,923],{"class":68,"line":80},[66,924,109],{"emptyLinePlaceholder":108},[66,926,927,929,931,933,935,937,939,941,943],{"class":68,"line":112},[66,928,502],{"class":72},[66,930,117],{"class":76},[66,932,507],{"class":72},[66,934,510],{"class":102},[66,936,348],{"class":76},[66,938,304],{"class":102},[66,940,307],{"class":76},[66,942,884],{"class":102},[66,944,522],{"class":76},[66,946,947,949,951,954,957,960,963],{"class":68,"line":129},[66,948,380],{"class":72},[66,950,117],{"class":76},[66,952,953],{"class":72},"%",[66,955,956],{"class":102}," 2",[66,958,959],{"class":72}," ==",[66,961,962],{"class":102}," 0",[66,964,126],{"class":76},[66,966,967,970,972],{"class":68,"line":138},[66,968,969],{"class":76},"        total ",[66,971,144],{"class":72},[66,973,224],{"class":76},[66,975,976],{"class":68,"line":227},[66,977,109],{"emptyLinePlaceholder":108},[66,979,980,982],{"class":68,"line":236},[66,981,244],{"class":102},[66,983,247],{"class":76},[19,985,986],{},"也可以：",[57,988,990],{"className":59,"code":989,"language":61,"meta":62,"style":62},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[23,991,992,1000,1004,1028,1036,1040],{"__ignoreMap":62},[66,993,994,996,998],{"class":68,"line":69},[66,995,192],{"class":76},[66,997,99],{"class":72},[66,999,197],{"class":102},[66,1001,1002],{"class":68,"line":80},[66,1003,109],{"emptyLinePlaceholder":108},[66,1005,1006,1008,1010,1012,1014,1016,1018,1020,1022,1024,1026],{"class":68,"line":112},[66,1007,502],{"class":72},[66,1009,117],{"class":76},[66,1011,507],{"class":72},[66,1013,510],{"class":102},[66,1015,348],{"class":76},[66,1017,795],{"class":102},[66,1019,307],{"class":76},[66,1021,884],{"class":102},[66,1023,307],{"class":76},[66,1025,795],{"class":102},[66,1027,522],{"class":76},[66,1029,1030,1032,1034],{"class":68,"line":129},[66,1031,219],{"class":76},[66,1033,144],{"class":72},[66,1035,224],{"class":76},[66,1037,1038],{"class":68,"line":138},[66,1039,109],{"emptyLinePlaceholder":108},[66,1041,1042,1044],{"class":68,"line":227},[66,1043,244],{"class":102},[66,1045,247],{"class":76},[14,1047,1049],{"id":1048},"_49-循环嵌套","4.9 循环嵌套",[19,1051,1052],{},"嵌套循环就是循环里面再写循环。",[57,1054,1056],{"className":59,"code":1055,"language":61,"meta":62,"style":62},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[23,1057,1058,1079,1101],{"__ignoreMap":62},[66,1059,1060,1062,1064,1066,1068,1070,1072,1074,1077],{"class":68,"line":69},[66,1061,502],{"class":72},[66,1063,117],{"class":76},[66,1065,507],{"class":72},[66,1067,510],{"class":102},[66,1069,348],{"class":76},[66,1071,304],{"class":102},[66,1073,307],{"class":76},[66,1075,1076],{"class":102},"4",[66,1078,522],{"class":76},[66,1080,1081,1084,1087,1089,1091,1093,1095,1097,1099],{"class":68,"line":80},[66,1082,1083],{"class":72},"    for",[66,1085,1086],{"class":76}," j ",[66,1088,507],{"class":72},[66,1090,510],{"class":102},[66,1092,348],{"class":76},[66,1094,304],{"class":102},[66,1096,307],{"class":76},[66,1098,1076],{"class":102},[66,1100,522],{"class":76},[66,1102,1103,1105,1107,1109,1112,1114,1116,1118,1121,1123,1126,1128,1131],{"class":68,"line":112},[66,1104,395],{"class":102},[66,1106,348],{"class":76},[66,1108,445],{"class":72},[66,1110,1111],{"class":356},"\"i=",[66,1113,451],{"class":102},[66,1115,257],{"class":76},[66,1117,457],{"class":102},[66,1119,1120],{"class":356},", j=",[66,1122,451],{"class":102},[66,1124,1125],{"class":76},"j",[66,1127,457],{"class":102},[66,1129,1130],{"class":356},"\"",[66,1132,313],{"class":76},[19,1134,1135],{},"外层循环执行一次，内层循环执行完整一轮。",[14,1137,1139],{"id":1138},"_410-九九乘法表","4.10 九九乘法表",[57,1141,1143],{"className":59,"code":1142,"language":61,"meta":62,"style":62},"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",[23,1144,1145,1165,1190,1247],{"__ignoreMap":62},[66,1146,1147,1149,1151,1153,1155,1157,1159,1161,1163],{"class":68,"line":69},[66,1148,502],{"class":72},[66,1150,117],{"class":76},[66,1152,507],{"class":72},[66,1154,510],{"class":102},[66,1156,348],{"class":76},[66,1158,304],{"class":102},[66,1160,307],{"class":76},[66,1162,790],{"class":102},[66,1164,522],{"class":76},[66,1166,1167,1169,1171,1173,1175,1177,1179,1182,1185,1188],{"class":68,"line":80},[66,1168,1083],{"class":72},[66,1170,1086],{"class":76},[66,1172,507],{"class":72},[66,1174,510],{"class":102},[66,1176,348],{"class":76},[66,1178,304],{"class":102},[66,1180,1181],{"class":76},", i ",[66,1183,1184],{"class":72},"+",[66,1186,1187],{"class":102}," 1",[66,1189,522],{"class":76},[66,1191,1192,1194,1196,1198,1200,1202,1204,1206,1209,1211,1213,1215,1217,1219,1221,1223,1226,1228,1230,1232,1236,1238,1240,1243,1245],{"class":68,"line":112},[66,1193,395],{"class":102},[66,1195,348],{"class":76},[66,1197,445],{"class":72},[66,1199,1130],{"class":356},[66,1201,451],{"class":102},[66,1203,1125],{"class":76},[66,1205,457],{"class":102},[66,1207,1208],{"class":356},"*",[66,1210,451],{"class":102},[66,1212,257],{"class":76},[66,1214,457],{"class":102},[66,1216,99],{"class":356},[66,1218,451],{"class":102},[66,1220,96],{"class":76},[66,1222,1208],{"class":72},[66,1224,1225],{"class":76}," j",[66,1227,457],{"class":102},[66,1229,1130],{"class":356},[66,1231,307],{"class":76},[66,1233,1235],{"class":1234},"s4XuR","end",[66,1237,99],{"class":72},[66,1239,1130],{"class":356},[66,1241,1242],{"class":102},"\\t",[66,1244,1130],{"class":356},[66,1246,313],{"class":76},[66,1248,1249,1251],{"class":68,"line":129},[66,1250,132],{"class":102},[66,1252,1253],{"class":76},"()\n",[19,1255,1256],{},"关键点：",[31,1258,1259,1265,1271,1277],{},[34,1260,1261,1262,1264],{},"外层 ",[23,1263,257],{}," 控制行。",[34,1266,1267,1268,1270],{},"内层 ",[23,1269,1125],{}," 控制列。",[34,1272,1273,1274,1276],{},"每行结束后用 ",[23,1275,25],{}," 换行。",[34,1278,1279,1282],{},[23,1280,1281],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,1284,1286],{"id":1285},"_411-循环else","4.11 循环else",[19,1288,1289,1290,1293,1294,1296,1297,1299],{},"Python 的循环可以带 ",[23,1291,1292],{},"else","。当循环正常结束时执行 ",[23,1295,1292],{},"，如果被 ",[23,1298,477],{}," 打断，则不执行。",[57,1301,1303],{"className":59,"code":1302,"language":61,"meta":62,"style":62},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[23,1304,1305,1325,1338,1349,1353,1359],{"__ignoreMap":62},[66,1306,1307,1309,1311,1313,1315,1317,1319,1321,1323],{"class":68,"line":69},[66,1308,502],{"class":72},[66,1310,117],{"class":76},[66,1312,507],{"class":72},[66,1314,510],{"class":102},[66,1316,348],{"class":76},[66,1318,304],{"class":102},[66,1320,307],{"class":76},[66,1322,519],{"class":102},[66,1324,522],{"class":76},[66,1326,1327,1329,1331,1333,1336],{"class":68,"line":80},[66,1328,380],{"class":72},[66,1330,117],{"class":76},[66,1332,531],{"class":72},[66,1334,1335],{"class":102}," 10",[66,1337,126],{"class":76},[66,1339,1340,1342,1344,1347],{"class":68,"line":112},[66,1341,395],{"class":102},[66,1343,348],{"class":76},[66,1345,1346],{"class":356},"\"找到了\"",[66,1348,313],{"class":76},[66,1350,1351],{"class":68,"line":129},[66,1352,468],{"class":72},[66,1354,1355,1357],{"class":68,"line":138},[66,1356,1292],{"class":72},[66,1358,126],{"class":76},[66,1360,1361,1363,1365,1368],{"class":68,"line":227},[66,1362,132],{"class":102},[66,1364,348],{"class":76},[66,1366,1367],{"class":356},"\"没找到\"",[66,1369,313],{"class":76},[19,1371,1372],{},"常用于搜索。",[57,1374,1376],{"className":59,"code":1375,"language":61,"meta":62,"style":62},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[23,1377,1378,1399,1409,1413,1425,1436,1446,1450,1456],{"__ignoreMap":62},[66,1379,1380,1383,1385,1387,1389,1391,1393,1395,1397],{"class":68,"line":69},[66,1381,1382],{"class":76},"names ",[66,1384,99],{"class":72},[66,1386,688],{"class":76},[66,1388,691],{"class":356},[66,1390,307],{"class":76},[66,1392,696],{"class":356},[66,1394,307],{"class":76},[66,1396,701],{"class":356},[66,1398,704],{"class":76},[66,1400,1401,1404,1406],{"class":68,"line":80},[66,1402,1403],{"class":76},"target ",[66,1405,99],{"class":72},[66,1407,1408],{"class":356}," \"小李\"\n",[66,1410,1411],{"class":68,"line":112},[66,1412,109],{"emptyLinePlaceholder":108},[66,1414,1415,1417,1420,1422],{"class":68,"line":129},[66,1416,502],{"class":72},[66,1418,1419],{"class":76}," name ",[66,1421,507],{"class":72},[66,1423,1424],{"class":76}," names:\n",[66,1426,1427,1429,1431,1433],{"class":68,"line":138},[66,1428,380],{"class":72},[66,1430,1419],{"class":76},[66,1432,531],{"class":72},[66,1434,1435],{"class":76}," target:\n",[66,1437,1438,1440,1442,1444],{"class":68,"line":227},[66,1439,395],{"class":102},[66,1441,348],{"class":76},[66,1443,1346],{"class":356},[66,1445,313],{"class":76},[66,1447,1448],{"class":68,"line":236},[66,1449,468],{"class":72},[66,1451,1452,1454],{"class":68,"line":241},[66,1453,1292],{"class":72},[66,1455,126],{"class":76},[66,1457,1458,1460,1462,1464],{"class":68,"line":372},[66,1459,132],{"class":102},[66,1461,348],{"class":76},[66,1463,1367],{"class":356},[66,1465,313],{"class":76},[14,1467,1469],{"id":1468},"_412-小案例登录重试","4.12 小案例：登录重试",[19,1471,1472],{},"需求：",[31,1474,1475,1478,1481],{},[34,1476,1477],{},"用户最多输入 3 次密码。",[34,1479,1480],{},"密码正确则登录成功。",[34,1482,1483],{},"3 次都错误则锁定账号。",[19,1485,1486],{},"代码：",[57,1488,1490],{"className":59,"code":1489,"language":61,"meta":62,"style":62},"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",[23,1491,1492,1502,1506,1523,1540,1544,1556,1567,1571,1577,1604,1610],{"__ignoreMap":62},[66,1493,1494,1497,1499],{"class":68,"line":69},[66,1495,1496],{"class":76},"password ",[66,1498,99],{"class":72},[66,1500,1501],{"class":356}," \"123456\"\n",[66,1503,1504],{"class":68,"line":80},[66,1505,109],{"emptyLinePlaceholder":108},[66,1507,1508,1510,1512,1514,1516,1518,1521],{"class":68,"line":112},[66,1509,502],{"class":72},[66,1511,117],{"class":76},[66,1513,507],{"class":72},[66,1515,510],{"class":102},[66,1517,348],{"class":76},[66,1519,1520],{"class":102},"3",[66,1522,522],{"class":76},[66,1524,1525,1528,1530,1533,1535,1538],{"class":68,"line":129},[66,1526,1527],{"class":76},"    user_password ",[66,1529,99],{"class":72},[66,1531,1532],{"class":102}," input",[66,1534,348],{"class":76},[66,1536,1537],{"class":356},"\"请输入密码:\"",[66,1539,313],{"class":76},[66,1541,1542],{"class":68,"line":138},[66,1543,109],{"emptyLinePlaceholder":108},[66,1545,1546,1548,1551,1553],{"class":68,"line":227},[66,1547,380],{"class":72},[66,1549,1550],{"class":76}," user_password ",[66,1552,531],{"class":72},[66,1554,1555],{"class":76}," password:\n",[66,1557,1558,1560,1562,1565],{"class":68,"line":236},[66,1559,395],{"class":102},[66,1561,348],{"class":76},[66,1563,1564],{"class":356},"\"登录成功\"",[66,1566,313],{"class":76},[66,1568,1569],{"class":68,"line":241},[66,1570,468],{"class":72},[66,1572,1573,1575],{"class":68,"line":372},[66,1574,433],{"class":72},[66,1576,126],{"class":76},[66,1578,1579,1581,1583,1585,1588,1591,1594,1597,1599,1602],{"class":68,"line":377},[66,1580,395],{"class":102},[66,1582,348],{"class":76},[66,1584,445],{"class":72},[66,1586,1587],{"class":356},"\"密码错误，还剩",[66,1589,1590],{"class":102},"{2",[66,1592,1593],{"class":72}," -",[66,1595,1596],{"class":76}," i",[66,1598,457],{"class":102},[66,1600,1601],{"class":356},"次机会\"",[66,1603,313],{"class":76},[66,1605,1606,1608],{"class":68,"line":392},[66,1607,1292],{"class":72},[66,1609,126],{"class":76},[66,1611,1612,1614,1616,1619],{"class":68,"line":405},[66,1613,132],{"class":102},[66,1615,348],{"class":76},[66,1617,1618],{"class":356},"\"账号已锁定\"",[66,1620,313],{"class":76},[14,1622,1624],{"id":1623},"_413-小案例菜单程序","4.13 小案例：菜单程序",[57,1626,1628],{"className":59,"code":1627,"language":61,"meta":62,"style":62},"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",[23,1629,1630,1638,1649,1660,1671,1682,1693,1697,1713,1717,1731,1742,1755,1766,1779,1790,1803,1815,1820,1827],{"__ignoreMap":62},[66,1631,1632,1634,1636],{"class":68,"line":69},[66,1633,73],{"class":72},[66,1635,333],{"class":102},[66,1637,126],{"class":76},[66,1639,1640,1642,1644,1647],{"class":68,"line":80},[66,1641,132],{"class":102},[66,1643,348],{"class":76},[66,1645,1646],{"class":356},"\"====== 菜单 ======\"",[66,1648,313],{"class":76},[66,1650,1651,1653,1655,1658],{"class":68,"line":112},[66,1652,132],{"class":102},[66,1654,348],{"class":76},[66,1656,1657],{"class":356},"\"1. 查询余额\"",[66,1659,313],{"class":76},[66,1661,1662,1664,1666,1669],{"class":68,"line":129},[66,1663,132],{"class":102},[66,1665,348],{"class":76},[66,1667,1668],{"class":356},"\"2. 存款\"",[66,1670,313],{"class":76},[66,1672,1673,1675,1677,1680],{"class":68,"line":138},[66,1674,132],{"class":102},[66,1676,348],{"class":76},[66,1678,1679],{"class":356},"\"3. 取款\"",[66,1681,313],{"class":76},[66,1683,1684,1686,1688,1691],{"class":68,"line":227},[66,1685,132],{"class":102},[66,1687,348],{"class":76},[66,1689,1690],{"class":356},"\"0. 退出\"",[66,1692,313],{"class":76},[66,1694,1695],{"class":68,"line":236},[66,1696,109],{"emptyLinePlaceholder":108},[66,1698,1699,1702,1704,1706,1708,1711],{"class":68,"line":241},[66,1700,1701],{"class":76},"    choice ",[66,1703,99],{"class":72},[66,1705,1532],{"class":102},[66,1707,348],{"class":76},[66,1709,1710],{"class":356},"\"请输入操作:\"",[66,1712,313],{"class":76},[66,1714,1715],{"class":68,"line":372},[66,1716,109],{"emptyLinePlaceholder":108},[66,1718,1719,1721,1724,1726,1729],{"class":68,"line":377},[66,1720,380],{"class":72},[66,1722,1723],{"class":76}," choice ",[66,1725,531],{"class":72},[66,1727,1728],{"class":356}," \"1\"",[66,1730,126],{"class":76},[66,1732,1733,1735,1737,1740],{"class":68,"line":392},[66,1734,395],{"class":102},[66,1736,348],{"class":76},[66,1738,1739],{"class":356},"\"余额为1000元\"",[66,1741,313],{"class":76},[66,1743,1744,1746,1748,1750,1753],{"class":68,"line":405},[66,1745,408],{"class":72},[66,1747,1723],{"class":76},[66,1749,531],{"class":72},[66,1751,1752],{"class":356}," \"2\"",[66,1754,126],{"class":76},[66,1756,1757,1759,1761,1764],{"class":68,"line":418},[66,1758,395],{"class":102},[66,1760,348],{"class":76},[66,1762,1763],{"class":356},"\"存款功能\"",[66,1765,313],{"class":76},[66,1767,1768,1770,1772,1774,1777],{"class":68,"line":430},[66,1769,408],{"class":72},[66,1771,1723],{"class":76},[66,1773,531],{"class":72},[66,1775,1776],{"class":356}," \"3\"",[66,1778,126],{"class":76},[66,1780,1781,1783,1785,1788],{"class":68,"line":438},[66,1782,395],{"class":102},[66,1784,348],{"class":76},[66,1786,1787],{"class":356},"\"取款功能\"",[66,1789,313],{"class":76},[66,1791,1792,1794,1796,1798,1801],{"class":68,"line":465},[66,1793,408],{"class":72},[66,1795,1723],{"class":76},[66,1797,531],{"class":72},[66,1799,1800],{"class":356}," \"0\"",[66,1802,126],{"class":76},[66,1804,1806,1808,1810,1813],{"class":68,"line":1805},17,[66,1807,395],{"class":102},[66,1809,348],{"class":76},[66,1811,1812],{"class":356},"\"退出系统\"",[66,1814,313],{"class":76},[66,1816,1818],{"class":68,"line":1817},18,[66,1819,468],{"class":72},[66,1821,1823,1825],{"class":68,"line":1822},19,[66,1824,433],{"class":72},[66,1826,126],{"class":76},[66,1828,1830,1832,1834,1837],{"class":68,"line":1829},20,[66,1831,395],{"class":102},[66,1833,348],{"class":76},[66,1835,1836],{"class":356},"\"输入错误\"",[66,1838,313],{"class":76},[19,1840,1841,1842,1844,1845,158],{},"菜单类程序通常使用 ",[23,1843,473],{},"，用户选择退出时 ",[23,1846,477],{},[14,1848,1850],{"id":1849},"_414-易错点","4.14 易错点",[31,1852,1853,1858,1864,1872,1878],{},[34,1854,1855,1857],{},[23,1856,73],{}," 循环必须更新控制变量。",[34,1859,1860,1863],{},[23,1861,1862],{},"range(1, 10)"," 不包含 10。",[34,1865,1866,1868,1869,1871],{},[23,1867,477],{}," 结束整个循环，",[23,1870,566],{}," 只跳过本轮。",[34,1873,1874,1875,1877],{},"嵌套循环中，",[23,1876,477],{}," 只跳出当前所在的一层循环。",[34,1879,1880],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,1882,1884],{"id":1883},"_415-本章练习","4.15 本章练习",[31,1886,1887,1890,1893,1896,1899],{},[34,1888,1889],{},"输出 1 到 100。",[34,1891,1892],{},"计算 1 到 100 的偶数和。",[34,1894,1895],{},"输出 100 以内能被 3 和 5 同时整除的数。",[34,1897,1898],{},"编写猜数字游戏，限制最多猜 7 次。",[34,1900,1901],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[1903,1904,1905],"style",{},"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":62,"searchDepth":80,"depth":80,"links":1907},[1908,1909,1910,1911,1912,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925],{"id":16,"depth":80,"text":17},{"id":51,"depth":80,"text":52},{"id":170,"depth":80,"text":171},{"id":273,"depth":80,"text":274},{"id":481,"depth":80,"text":482,"children":1913},[1914,1915],{"id":486,"depth":112,"text":487},{"id":560,"depth":112,"text":561},{"id":626,"depth":80,"text":627},{"id":730,"depth":80,"text":731},{"id":847,"depth":80,"text":848},{"id":1048,"depth":80,"text":1049},{"id":1138,"depth":80,"text":1139},{"id":1285,"depth":80,"text":1286},{"id":1468,"depth":80,"text":1469},{"id":1623,"depth":80,"text":1624},{"id":1849,"depth":80,"text":1850},{"id":1883,"depth":80,"text":1884},null,"md",{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":5,"description":1926},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",[1934,6978,8081,9501,12485,13836,15324,16413,25174,25186,25785,25811,25935,26176,26241,26259,26272,26319,26442,26611,26810,26989,27194,27330,27425,27462,27475,27785,28525,29233,29254,30273,31904,32055,32068,32080,32376,52177,52192,52209,52242,55112,78457,94599,94620,94733,94854,95624,96287,96648,96686,96792,96892,96935,96961,97022,98675,98776,98801,99292,99792,100872,101155,101897,102398,102410,104425,106089,107592,109290,111206,113125,115146,118616,119048,119511,120260,123204,123552,123574,123930,127236,127248,127651,127674,127821,127988,128193,128494,129051,129708,131639,133237,133886,135380,136811,138046,139740,141492,143902,144018,144953,145164,146049,147284,147512,147525,148676,151087,153452,156762,159236,160877,162468,164481,167533,169713,172240,174434],{"id":1935,"title":1936,"body":1937,"description":62,"extension":1927,"meta":6973,"navigation":108,"path":6974,"seo":6975,"stem":6976,"__hash__":6977},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":1938,"toc":6945},[1939,1942,1946,1949,1953,1964,1968,1972,1975,1978,1981,1984,1987,2013,2017,2020,2023,2026,2029,2076,2080,2098,2100,2114,2117,2125,2128,2974,2981,2998,3002,3087,3091,3097,3183,3187,3225,3229,3293,3297,3301,3308,3319,3323,3328,3332,3337,3341,3346,3350,3354,3359,3617,3622,3760,3765,4018,4021,4029,4033,4038,4141,4144,4448,4457,4558,4561,4564,4567,4570,4829,4834,4971,4974,5152,5155,5282,5285,5437,5441,5446,5449,5460,5468,5471,5577,5581,5585,5590,5640,5645,5650,5674,5679,5732,5735,5740,5916,5921,6206,6211,6608,6612,6617,6674,6679,6687,6690,6830,6833,6942],[10,1940,1936],{"id":1941},"_1基础入门",[14,1943,1945],{"id":1944},"_11注释","1.1注释",[19,1947,1948],{},"\u002F\u002F或者\u002F* *\u002F",[14,1950,1952],{"id":1951},"_12命名","1.2命名",[31,1954,1955,1958,1961],{},[34,1956,1957],{},"字母数字下划线",[34,1959,1960],{},"开头必须是字母或_",[34,1962,1963],{},"不能使用关键词",[14,1965,1967],{"id":1966},"_13数据类型","1.3数据类型",[484,1969,1971],{"id":1970},"_131整形","1.3.1整形",[19,1973,1974],{},"short 短整形 2",[19,1976,1977],{},"int 整形 4",[19,1979,1980],{},"long 长整形 win4 linux32位4 linux64位8",[19,1982,1983],{},"long long 长长整形 8",[19,1985,1986],{},"利用sizeof可以求数据类型占用的内存空间大小",[57,1988,1992],{"className":1989,"code":1990,"language":1991,"meta":62,"style":62},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[23,1993,1994,2006],{"__ignoreMap":62},[66,1995,1996,1999,2001,2004],{"class":68,"line":69},[66,1997,1998],{"class":72},"sizeof",[66,2000,348],{"class":76},[66,2002,2003],{"class":72},"int",[66,2005,313],{"class":76},[66,2007,2008,2010],{"class":68,"line":80},[66,2009,1998],{"class":72},[66,2011,2012],{"class":76},"(num)\n",[484,2014,2016],{"id":2015},"_132浮点型","1.3.2浮点型",[19,2018,2019],{},"float 单精度 4节 7位有效数字",[19,2021,2022],{},"double 双精度 8节 15-16有效数字",[19,2024,2025],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,2027,2028],{},"注意点：",[57,2030,2032],{"className":1989,"code":2031,"language":1991,"meta":62,"style":62},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[23,2033,2034,2055],{"__ignoreMap":62},[66,2035,2036,2039,2042,2044,2047,2049,2052],{"class":68,"line":69},[66,2037,2038],{"class":72},"float",[66,2040,2041],{"class":76}," f1",[66,2043,99],{"class":72},[66,2045,2046],{"class":102},"3.14",[66,2048,445],{"class":72},[66,2050,2051],{"class":76},";",[66,2053,2054],{"class":758}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[66,2056,2057,2059,2062,2064,2066,2069,2071,2073],{"class":68,"line":80},[66,2058,2038],{"class":72},[66,2060,2061],{"class":76}," f2",[66,2063,99],{"class":72},[66,2065,1520],{"class":102},[66,2067,2068],{"class":72},"e",[66,2070,795],{"class":102},[66,2072,2051],{"class":76},[66,2074,2075],{"class":758}," \u002F\u002F科学记数法\n",[484,2077,2079],{"id":2078},"_133字符型","1.3.3字符型",[57,2081,2083],{"className":1989,"code":2082,"language":1991,"meta":62,"style":62},"char ch='a'\n",[23,2084,2085],{"__ignoreMap":62},[66,2086,2087,2090,2093,2095],{"class":68,"line":69},[66,2088,2089],{"class":72},"char",[66,2091,2092],{"class":76}," ch",[66,2094,99],{"class":72},[66,2096,2097],{"class":356},"'a'\n",[19,2099,2028],{},[31,2101,2102,2105,2108,2111],{},[34,2103,2104],{},"在显示字符型变量时，只能单引号，双引号x",[34,2106,2107],{},"单引号内只能一个字符，不能字符串",[34,2109,2110],{},"c和c++字符型变量只占用一个字符",[34,2112,2113],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,2115,2116],{},"ASCII码大致由以下两部分组成：",[31,2118,2119,2122],{},[34,2120,2121],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[34,2123,2124],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,2126,2127],{},"ASCII码表格：",[2129,2130,2131,2175],"table",{},[2132,2133,2134],"thead",{},[2135,2136,2137,2145,2150,2154,2159,2163,2167,2171],"tr",{},[2138,2139,2140,2144],"th",{},[2141,2142,2143],"strong",{},"ASCII","值",[2138,2146,2147],{},[2141,2148,2149],{},"控制字符",[2138,2151,2152,2144],{},[2141,2153,2143],{},[2138,2155,2156],{},[2141,2157,2158],{},"字符",[2138,2160,2161,2144],{},[2141,2162,2143],{},[2138,2164,2165],{},[2141,2166,2158],{},[2138,2168,2169,2144],{},[2141,2170,2143],{},[2138,2172,2173],{},[2141,2174,2158],{},[2176,2177,2178,2205,2230,2254,2279,2303,2325,2349,2375,2400,2425,2448,2473,2498,2524,2550,2576,2600,2625,2650,2675,2700,2725,2750,2775,2800,2825,2851,2875,2899,2923,2948],"tbody",{},[2135,2179,2180,2184,2187,2190,2193,2196,2199,2202],{},[2181,2182,2183],"td",{},"0",[2181,2185,2186],{},"NUT",[2181,2188,2189],{},"32",[2181,2191,2192],{},"(space)",[2181,2194,2195],{},"64",[2181,2197,2198],{},"@",[2181,2200,2201],{},"96",[2181,2203,2204],{},"、",[2135,2206,2207,2209,2212,2215,2218,2221,2224,2227],{},[2181,2208,304],{},[2181,2210,2211],{},"SOH",[2181,2213,2214],{},"33",[2181,2216,2217],{},"!",[2181,2219,2220],{},"65",[2181,2222,2223],{},"A",[2181,2225,2226],{},"97",[2181,2228,2229],{},"a",[2135,2231,2232,2234,2237,2240,2242,2245,2248,2251],{},[2181,2233,795],{},[2181,2235,2236],{},"STX",[2181,2238,2239],{},"34",[2181,2241,1130],{},[2181,2243,2244],{},"66",[2181,2246,2247],{},"B",[2181,2249,2250],{},"98",[2181,2252,2253],{},"b",[2135,2255,2256,2258,2261,2264,2267,2270,2273,2276],{},[2181,2257,1520],{},[2181,2259,2260],{},"ETX",[2181,2262,2263],{},"35",[2181,2265,2266],{},"#",[2181,2268,2269],{},"67",[2181,2271,2272],{},"C",[2181,2274,2275],{},"99",[2181,2277,2278],{},"c",[2135,2280,2281,2283,2286,2289,2292,2295,2298,2300],{},[2181,2282,1076],{},[2181,2284,2285],{},"EOT",[2181,2287,2288],{},"36",[2181,2290,2291],{},"$",[2181,2293,2294],{},"68",[2181,2296,2297],{},"D",[2181,2299,310],{},[2181,2301,2302],{},"d",[2135,2304,2305,2307,2310,2313,2315,2318,2321,2323],{},[2181,2306,752],{},[2181,2308,2309],{},"ENQ",[2181,2311,2312],{},"37",[2181,2314,953],{},[2181,2316,2317],{},"69",[2181,2319,2320],{},"E",[2181,2322,884],{},[2181,2324,2068],{},[2135,2326,2327,2329,2332,2335,2338,2341,2344,2347],{},[2181,2328,519],{},[2181,2330,2331],{},"ACK",[2181,2333,2334],{},"38",[2181,2336,2337],{},"&",[2181,2339,2340],{},"70",[2181,2342,2343],{},"F",[2181,2345,2346],{},"102",[2181,2348,445],{},[2135,2350,2351,2354,2357,2360,2363,2366,2369,2372],{},[2181,2352,2353],{},"7",[2181,2355,2356],{},"BEL",[2181,2358,2359],{},"39",[2181,2361,2362],{},",",[2181,2364,2365],{},"71",[2181,2367,2368],{},"G",[2181,2370,2371],{},"103",[2181,2373,2374],{},"g",[2135,2376,2377,2380,2383,2386,2388,2391,2394,2397],{},[2181,2378,2379],{},"8",[2181,2381,2382],{},"BS",[2181,2384,2385],{},"40",[2181,2387,348],{},[2181,2389,2390],{},"72",[2181,2392,2393],{},"H",[2181,2395,2396],{},"104",[2181,2398,2399],{},"h",[2135,2401,2402,2405,2408,2411,2414,2417,2420,2423],{},[2181,2403,2404],{},"9",[2181,2406,2407],{},"HT",[2181,2409,2410],{},"41",[2181,2412,2413],{},")",[2181,2415,2416],{},"73",[2181,2418,2419],{},"I",[2181,2421,2422],{},"105",[2181,2424,257],{},[2135,2426,2427,2429,2432,2435,2437,2440,2443,2446],{},[2181,2428,790],{},[2181,2430,2431],{},"LF",[2181,2433,2434],{},"42",[2181,2436,1208],{},[2181,2438,2439],{},"74",[2181,2441,2442],{},"J",[2181,2444,2445],{},"106",[2181,2447,1125],{},[2135,2449,2450,2453,2456,2459,2461,2464,2467,2470],{},[2181,2451,2452],{},"11",[2181,2454,2455],{},"VT",[2181,2457,2458],{},"43",[2181,2460,1184],{},[2181,2462,2463],{},"75",[2181,2465,2466],{},"K",[2181,2468,2469],{},"107",[2181,2471,2472],{},"k",[2135,2474,2475,2478,2481,2484,2486,2489,2492,2495],{},[2181,2476,2477],{},"12",[2181,2479,2480],{},"FF",[2181,2482,2483],{},"44",[2181,2485,2362],{},[2181,2487,2488],{},"76",[2181,2490,2491],{},"L",[2181,2493,2494],{},"108",[2181,2496,2497],{},"l",[2135,2499,2500,2503,2506,2509,2512,2515,2518,2521],{},[2181,2501,2502],{},"13",[2181,2504,2505],{},"CR",[2181,2507,2508],{},"45",[2181,2510,2511],{},"-",[2181,2513,2514],{},"77",[2181,2516,2517],{},"M",[2181,2519,2520],{},"109",[2181,2522,2523],{},"m",[2135,2525,2526,2529,2532,2535,2538,2541,2544,2547],{},[2181,2527,2528],{},"14",[2181,2530,2531],{},"SO",[2181,2533,2534],{},"46",[2181,2536,2537],{},".",[2181,2539,2540],{},"78",[2181,2542,2543],{},"N",[2181,2545,2546],{},"110",[2181,2548,2549],{},"n",[2135,2551,2552,2555,2558,2561,2564,2567,2570,2573],{},[2181,2553,2554],{},"15",[2181,2556,2557],{},"SI",[2181,2559,2560],{},"47",[2181,2562,2563],{},"\u002F",[2181,2565,2566],{},"79",[2181,2568,2569],{},"O",[2181,2571,2572],{},"111",[2181,2574,2575],{},"o",[2135,2577,2578,2581,2584,2587,2589,2592,2595,2598],{},[2181,2579,2580],{},"16",[2181,2582,2583],{},"DLE",[2181,2585,2586],{},"48",[2181,2588,2183],{},[2181,2590,2591],{},"80",[2181,2593,2594],{},"P",[2181,2596,2597],{},"112",[2181,2599,19],{},[2135,2601,2602,2605,2608,2611,2613,2616,2619,2622],{},[2181,2603,2604],{},"17",[2181,2606,2607],{},"DCI",[2181,2609,2610],{},"49",[2181,2612,304],{},[2181,2614,2615],{},"81",[2181,2617,2618],{},"Q",[2181,2620,2621],{},"113",[2181,2623,2624],{},"q",[2135,2626,2627,2630,2633,2636,2638,2641,2644,2647],{},[2181,2628,2629],{},"18",[2181,2631,2632],{},"DC2",[2181,2634,2635],{},"50",[2181,2637,795],{},[2181,2639,2640],{},"82",[2181,2642,2643],{},"R",[2181,2645,2646],{},"114",[2181,2648,2649],{},"r",[2135,2651,2652,2655,2658,2661,2663,2666,2669,2672],{},[2181,2653,2654],{},"19",[2181,2656,2657],{},"DC3",[2181,2659,2660],{},"51",[2181,2662,1520],{},[2181,2664,2665],{},"83",[2181,2667,2668],{},"S",[2181,2670,2671],{},"115",[2181,2673,2674],{},"s",[2135,2676,2677,2680,2683,2686,2688,2691,2694,2697],{},[2181,2678,2679],{},"20",[2181,2681,2682],{},"DC4",[2181,2684,2685],{},"52",[2181,2687,1076],{},[2181,2689,2690],{},"84",[2181,2692,2693],{},"T",[2181,2695,2696],{},"116",[2181,2698,2699],{},"t",[2135,2701,2702,2705,2708,2711,2713,2716,2719,2722],{},[2181,2703,2704],{},"21",[2181,2706,2707],{},"NAK",[2181,2709,2710],{},"53",[2181,2712,752],{},[2181,2714,2715],{},"85",[2181,2717,2718],{},"U",[2181,2720,2721],{},"117",[2181,2723,2724],{},"u",[2135,2726,2727,2730,2733,2736,2738,2741,2744,2747],{},[2181,2728,2729],{},"22",[2181,2731,2732],{},"SYN",[2181,2734,2735],{},"54",[2181,2737,519],{},[2181,2739,2740],{},"86",[2181,2742,2743],{},"V",[2181,2745,2746],{},"118",[2181,2748,2749],{},"v",[2135,2751,2752,2755,2758,2761,2763,2766,2769,2772],{},[2181,2753,2754],{},"23",[2181,2756,2757],{},"TB",[2181,2759,2760],{},"55",[2181,2762,2353],{},[2181,2764,2765],{},"87",[2181,2767,2768],{},"W",[2181,2770,2771],{},"119",[2181,2773,2774],{},"w",[2135,2776,2777,2780,2783,2786,2788,2791,2794,2797],{},[2181,2778,2779],{},"24",[2181,2781,2782],{},"CAN",[2181,2784,2785],{},"56",[2181,2787,2379],{},[2181,2789,2790],{},"88",[2181,2792,2793],{},"X",[2181,2795,2796],{},"120",[2181,2798,2799],{},"x",[2135,2801,2802,2805,2808,2811,2813,2816,2819,2822],{},[2181,2803,2804],{},"25",[2181,2806,2807],{},"EM",[2181,2809,2810],{},"57",[2181,2812,2404],{},[2181,2814,2815],{},"89",[2181,2817,2818],{},"Y",[2181,2820,2821],{},"121",[2181,2823,2824],{},"y",[2135,2826,2827,2830,2833,2836,2839,2842,2845,2848],{},[2181,2828,2829],{},"26",[2181,2831,2832],{},"SUB",[2181,2834,2835],{},"58",[2181,2837,2838],{},":",[2181,2840,2841],{},"90",[2181,2843,2844],{},"Z",[2181,2846,2847],{},"122",[2181,2849,2850],{},"z",[2135,2852,2853,2856,2859,2862,2864,2867,2870,2873],{},[2181,2854,2855],{},"27",[2181,2857,2858],{},"ESC",[2181,2860,2861],{},"59",[2181,2863,2051],{},[2181,2865,2866],{},"91",[2181,2868,2869],{},"[",[2181,2871,2872],{},"123",[2181,2874,451],{},[2135,2876,2877,2880,2883,2886,2888,2891,2893,2896],{},[2181,2878,2879],{},"28",[2181,2881,2882],{},"FS",[2181,2884,2885],{},"60",[2181,2887,413],{},[2181,2889,2890],{},"92",[2181,2892,2563],{},[2181,2894,2895],{},"124",[2181,2897,2898],{},"|",[2135,2900,2901,2904,2907,2910,2912,2915,2918,2921],{},[2181,2902,2903],{},"29",[2181,2905,2906],{},"GS",[2181,2908,2909],{},"61",[2181,2911,99],{},[2181,2913,2914],{},"93",[2181,2916,2917],{},"]",[2181,2919,2920],{},"125",[2181,2922,457],{},[2135,2924,2925,2928,2931,2934,2936,2939,2942,2945],{},[2181,2926,2927],{},"30",[2181,2929,2930],{},"RS",[2181,2932,2933],{},"62",[2181,2935,386],{},[2181,2937,2938],{},"94",[2181,2940,2941],{},"^",[2181,2943,2944],{},"126",[2181,2946,2947],{},"`",[2135,2949,2950,2953,2956,2959,2962,2965,2968,2971],{},[2181,2951,2952],{},"31",[2181,2954,2955],{},"US",[2181,2957,2958],{},"63",[2181,2960,2961],{},"?",[2181,2963,2964],{},"95",[2181,2966,2967],{},"_",[2181,2969,2970],{},"127",[2181,2972,2973],{},"DEL",[19,2975,2976,2977,2980],{},"ASCII 码大致由以下",[2141,2978,2979],{},"两部分组","成：",[2982,2983,2984,2991],"ul",{},[34,2985,2986,2987,2990],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[2141,2988,2989],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[34,2992,2993,2994,2997],{},"ASCII 打印字符：数字 ",[2141,2995,2996],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[484,2999,3001],{"id":3000},"_134转义字符","1.3.4转义字符",[57,3003,3005],{"className":1989,"code":3004,"language":1991,"meta":62,"style":62},"\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",[23,3006,3007,3012,3028,3042,3047,3060,3065],{"__ignoreMap":62},[66,3008,3009],{"class":68,"line":69},[66,3010,3011],{"class":758},"\u002F\u002F换行符\n",[66,3013,3014,3017,3020,3023,3025],{"class":68,"line":80},[66,3015,3016],{"class":76},"cout ",[66,3018,3019],{"class":72},"\u003C\u003C",[66,3021,3022],{"class":356},"\"hello world\u002Fn\"",[66,3024,2051],{"class":76},[66,3026,3027],{"class":758}," \u002F\u002F就等同于如下：\n",[66,3029,3030,3032,3034,3037,3039],{"class":68,"line":112},[66,3031,3016],{"class":76},[66,3033,3019],{"class":72},[66,3035,3036],{"class":356},"\"hello world\"",[66,3038,3019],{"class":72},[66,3040,3041],{"class":76},"endl;\n",[66,3043,3044],{"class":68,"line":129},[66,3045,3046],{"class":758},"\u002F\u002F反斜杠\n",[66,3048,3049,3051,3053,3056,3058],{"class":68,"line":138},[66,3050,3016],{"class":76},[66,3052,3019],{"class":72},[66,3054,3055],{"class":356},"\"\u002F\u002F\"",[66,3057,3019],{"class":72},[66,3059,3041],{"class":76},[66,3061,3062],{"class":68,"line":227},[66,3063,3064],{"class":758},"\u002F\u002F水平制表符\n",[66,3066,3067,3069,3071,3074,3076,3079,3081,3084],{"class":68,"line":236},[66,3068,3016],{"class":76},[66,3070,3019],{"class":72},[66,3072,3073],{"class":356},"\"aaaa",[66,3075,1242],{"class":102},[66,3077,3078],{"class":356},"helloworld\"",[66,3080,3019],{"class":72},[66,3082,3083],{"class":76},"endl;",[66,3085,3086],{"class":758}," \u002F\u002F输出窗口时有对齐效果\n",[484,3088,3090],{"id":3089},"_135字符串型","1.3.5字符串型",[19,3092,3093,3094,3096],{},"char 变量名",[66,3095],{},"=\"字符串值\"",[57,3098,3100],{"className":1989,"code":3099,"language":1991,"meta":62,"style":62},"\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",[23,3101,3102,3107,3112,3117,3122,3136,3149,3154,3159,3170],{"__ignoreMap":62},[66,3103,3104],{"class":68,"line":69},[66,3105,3106],{"class":758},"\u002F\u002Fc风格字符串\n",[66,3108,3109],{"class":68,"line":80},[66,3110,3111],{"class":758},"\u002F\u002F注意事项：\n",[66,3113,3114],{"class":68,"line":112},[66,3115,3116],{"class":758},"\u002F\u002F1.char字符串名[]\n",[66,3118,3119],{"class":68,"line":129},[66,3120,3121],{"class":758},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[66,3123,3124,3126,3129,3131,3133],{"class":68,"line":138},[66,3125,2089],{"class":72},[66,3127,3128],{"class":76}," str[]",[66,3130,99],{"class":72},[66,3132,3036],{"class":356},[66,3134,3135],{"class":76},";\n",[66,3137,3138,3140,3142,3145,3147],{"class":68,"line":227},[66,3139,3016],{"class":76},[66,3141,3019],{"class":72},[66,3143,3144],{"class":76},"str",[66,3146,3019],{"class":72},[66,3148,3041],{"class":76},[66,3150,3151],{"class":68,"line":236},[66,3152,3153],{"class":758},"\u002F\u002Fc++风格字符串\n",[66,3155,3156],{"class":68,"line":241},[66,3157,3158],{"class":758},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[66,3160,3161,3164,3166,3168],{"class":68,"line":372},[66,3162,3163],{"class":76},"string str2",[66,3165,99],{"class":72},[66,3167,3036],{"class":356},[66,3169,3135],{"class":76},[66,3171,3172,3174,3176,3179,3181],{"class":68,"line":377},[66,3173,3016],{"class":76},[66,3175,3019],{"class":72},[66,3177,3178],{"class":76},"str2",[66,3180,3019],{"class":72},[66,3182,3041],{"class":76},[484,3184,3186],{"id":3185},"_136布尔类型bool","1.3.6布尔类型bool",[57,3188,3190],{"className":1989,"code":3189,"language":1991,"meta":62,"style":62},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[23,3191,3192,3207],{"__ignoreMap":62},[66,3193,3194,3197,3200,3202,3205],{"class":68,"line":69},[66,3195,3196],{"class":72},"bool",[66,3198,3199],{"class":76}," flag",[66,3201,99],{"class":72},[66,3203,3204],{"class":102},"true",[66,3206,3135],{"class":76},[66,3208,3209,3212,3215,3218,3220,3222],{"class":68,"line":80},[66,3210,3211],{"class":76},"cout",[66,3213,3214],{"class":72},"\u003C\u003Csizeof",[66,3216,3217],{"class":76},"(flag)",[66,3219,3019],{"class":72},[66,3221,3083],{"class":76},[66,3223,3224],{"class":758}," \u002F\u002F查看布尔占内存空间\n",[14,3226,3228],{"id":3227},"_14键盘输入cin","1.4键盘输入cin",[57,3230,3232],{"className":1989,"code":3231,"language":1991,"meta":62,"style":62},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[23,3233,3234,3247,3264,3275],{"__ignoreMap":62},[66,3235,3236,3238,3241,3243,3245],{"class":68,"line":69},[66,3237,2003],{"class":72},[66,3239,3240],{"class":76}," a",[66,3242,99],{"class":72},[66,3244,2183],{"class":102},[66,3246,3135],{"class":76},[66,3248,3249,3251,3253,3256,3258,3260,3262],{"class":68,"line":80},[66,3250,3211],{"class":76},[66,3252,3019],{"class":72},[66,3254,3255],{"class":356},"\"请给整型变量a赋值\"",[66,3257,3019],{"class":72},[66,3259,2229],{"class":76},[66,3261,3019],{"class":72},[66,3263,3041],{"class":76},[66,3265,3266,3269,3272],{"class":68,"line":112},[66,3267,3268],{"class":76},"cin ",[66,3270,3271],{"class":72},">>",[66,3273,3274],{"class":76}," a;\n",[66,3276,3277,3279,3281,3284,3287,3289,3291],{"class":68,"line":129},[66,3278,3016],{"class":76},[66,3280,3019],{"class":72},[66,3282,3283],{"class":356}," \"整型变量a=\"",[66,3285,3286],{"class":72}," \u003C\u003C",[66,3288,2229],{"class":76},[66,3290,3019],{"class":72},[66,3292,3041],{"class":76},[14,3294,3296],{"id":3295},"_15运算符","1.5运算符",[484,3298,3300],{"id":3299},"_151算术运算符","1.5.1算术运算符",[19,3302,3303,3307],{},[3304,3305],"img",{"alt":62,"src":3306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[31,3309,3310,3313,3316],{},[34,3311,3312],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[34,3314,3315],{},"两个小数不可以做取模运算",[34,3317,3318],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[484,3320,3322],{"id":3321},"_152赋值运算符","1.5.2赋值运算符",[19,3324,3325],{},[3304,3326],{"alt":62,"src":3327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[484,3329,3331],{"id":3330},"_153比较运算符","1.5.3比较运算符",[19,3333,3334],{},[3304,3335],{"alt":62,"src":3336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[484,3338,3340],{"id":3339},"_154逻辑运算符","1.5.4逻辑运算符",[19,3342,3343],{},[3304,3344],{"alt":62,"src":3345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,3347,3349],{"id":3348},"_16程序流程结构","1.6程序流程结构",[484,3351,3353],{"id":3352},"_161选择结构","1.6.1选择结构",[31,3355,3356],{},[34,3357,3358],{},"if语句\n单行、多行、多条件if语句",[57,3360,3362],{"className":1989,"code":3361,"language":1991,"meta":62,"style":62},"\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",[23,3363,3364,3369,3384,3389,3403,3408,3413,3422,3434,3438,3451,3455,3460,3464,3477,3481,3486,3506,3510,3523,3527,3555,3560,3577,3582,3587,3592,3606,3611],{"__ignoreMap":62},[66,3365,3366],{"class":68,"line":69},[66,3367,3368],{"class":758},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[66,3370,3371,3374,3377,3379,3382],{"class":68,"line":80},[66,3372,3373],{"class":72},"if",[66,3375,3376],{"class":76},"(score",[66,3378,386],{"class":72},[66,3380,3381],{"class":102},"600",[66,3383,313],{"class":76},[66,3385,3386],{"class":68,"line":112},[66,3387,3388],{"class":76},"{\n",[66,3390,3391,3394,3396,3399,3401],{"class":68,"line":129},[66,3392,3393],{"class":76},"    cout",[66,3395,3019],{"class":72},[66,3397,3398],{"class":356},"'这是单行if语句'",[66,3400,3019],{"class":72},[66,3402,3041],{"class":76},[66,3404,3405],{"class":68,"line":138},[66,3406,3407],{"class":76},"}\n",[66,3409,3410],{"class":68,"line":227},[66,3411,3412],{"class":758},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[66,3414,3415,3417,3419],{"class":68,"line":236},[66,3416,3268],{"class":76},[66,3418,3271],{"class":72},[66,3420,3421],{"class":76}," score\n",[66,3423,3424,3426,3428,3430,3432],{"class":68,"line":241},[66,3425,3373],{"class":72},[66,3427,3376],{"class":76},[66,3429,120],{"class":72},[66,3431,3381],{"class":102},[66,3433,313],{"class":76},[66,3435,3436],{"class":68,"line":372},[66,3437,3388],{"class":76},[66,3439,3440,3442,3444,3447,3449],{"class":68,"line":377},[66,3441,3393],{"class":76},[66,3443,3271],{"class":72},[66,3445,3446],{"class":356},"\"小于等于600\"",[66,3448,3019],{"class":72},[66,3450,3041],{"class":76},[66,3452,3453],{"class":68,"line":392},[66,3454,3407],{"class":76},[66,3456,3457],{"class":68,"line":405},[66,3458,3459],{"class":72},"else\n",[66,3461,3462],{"class":68,"line":418},[66,3463,3388],{"class":76},[66,3465,3466,3468,3470,3473,3475],{"class":68,"line":430},[66,3467,3393],{"class":76},[66,3469,3271],{"class":72},[66,3471,3472],{"class":356},"\"大于600\"",[66,3474,3271],{"class":72},[66,3476,3041],{"class":76},[66,3478,3479],{"class":68,"line":438},[66,3480,3407],{"class":76},[66,3482,3483],{"class":68,"line":465},[66,3484,3485],{"class":758},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[66,3487,3488,3490,3493,3495,3497,3500,3502,3504],{"class":68,"line":1805},[66,3489,3373],{"class":72},[66,3491,3492],{"class":76}," (",[66,3494,2183],{"class":102},[66,3496,413],{"class":72},[66,3498,3499],{"class":76},"num",[66,3501,413],{"class":72},[66,3503,310],{"class":102},[66,3505,313],{"class":76},[66,3507,3508],{"class":68,"line":1817},[66,3509,3388],{"class":76},[66,3511,3512,3514,3516,3519,3521],{"class":68,"line":1822},[66,3513,3393],{"class":76},[66,3515,3019],{"class":72},[66,3517,3518],{"class":356},"\"小于100\"",[66,3520,3019],{"class":72},[66,3522,3041],{"class":76},[66,3524,3525],{"class":68,"line":1829},[66,3526,3407],{"class":76},[66,3528,3530,3532,3535,3538,3541,3543,3546,3548,3550,3553],{"class":68,"line":3529},21,[66,3531,1292],{"class":72},[66,3533,3534],{"class":72}," if",[66,3536,3537],{"class":76}," (nmu",[66,3539,3540],{"class":72},">=",[66,3542,310],{"class":102},[66,3544,3545],{"class":72},"&&",[66,3547,3499],{"class":76},[66,3549,413],{"class":72},[66,3551,3552],{"class":102},"200",[66,3554,313],{"class":76},[66,3556,3558],{"class":68,"line":3557},22,[66,3559,3388],{"class":76},[66,3561,3563,3565,3567,3570,3572,3574],{"class":68,"line":3562},23,[66,3564,3393],{"class":76},[66,3566,3019],{"class":72},[66,3568,3569],{"class":356},"\"不小于100且小于200\"",[66,3571,3019],{"class":72},[66,3573,3083],{"class":76},[66,3575,3576],{"class":758}," \u002F\u002F可以无限else if,python中是elif：\n",[66,3578,3580],{"class":68,"line":3579},24,[66,3581,3407],{"class":76},[66,3583,3585],{"class":68,"line":3584},25,[66,3586,3459],{"class":72},[66,3588,3590],{"class":68,"line":3589},26,[66,3591,3388],{"class":76},[66,3593,3595,3597,3599,3602,3604],{"class":68,"line":3594},27,[66,3596,3393],{"class":76},[66,3598,3019],{"class":72},[66,3600,3601],{"class":356},"\"不小于200\"",[66,3603,3019],{"class":72},[66,3605,3041],{"class":76},[66,3607,3609],{"class":68,"line":3608},28,[66,3610,3407],{"class":76},[66,3612,3614],{"class":68,"line":3613},29,[66,3615,3616],{"class":758},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[31,3618,3619],{"start":80},[34,3620,3621],{},"三目运算符",[57,3623,3625],{"className":1989,"code":3624,"language":1991,"meta":62,"style":62},"\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",[23,3626,3627,3632,3637,3663,3685,3702,3707,3730,3745],{"__ignoreMap":62},[66,3628,3629],{"class":68,"line":69},[66,3630,3631],{"class":758},"\u002F\u002F创建三个变量a,b,c\n",[66,3633,3634],{"class":68,"line":80},[66,3635,3636],{"class":758},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[66,3638,3639,3641,3643,3645,3647,3650,3652,3654,3657,3659,3661],{"class":68,"line":112},[66,3640,2003],{"class":72},[66,3642,3240],{"class":76},[66,3644,99],{"class":72},[66,3646,2679],{"class":102},[66,3648,3649],{"class":76},",b",[66,3651,99],{"class":72},[66,3653,790],{"class":102},[66,3655,3656],{"class":76},",c",[66,3658,99],{"class":72},[66,3660,2183],{"class":102},[66,3662,3135],{"class":76},[66,3664,3665,3667,3669,3672,3674,3676,3678,3680,3682],{"class":68,"line":129},[66,3666,2278],{"class":76},[66,3668,99],{"class":72},[66,3670,3671],{"class":76},"(a",[66,3673,386],{"class":72},[66,3675,2253],{"class":76},[66,3677,2961],{"class":72},[66,3679,2229],{"class":76},[66,3681,2838],{"class":72},[66,3683,3684],{"class":76},"b)\n",[66,3686,3687,3689,3691,3694,3696,3698,3700],{"class":68,"line":138},[66,3688,3211],{"class":76},[66,3690,3019],{"class":72},[66,3692,3693],{"class":356},"\"c=\"",[66,3695,3019],{"class":72},[66,3697,2278],{"class":76},[66,3699,3019],{"class":72},[66,3701,3041],{"class":76},[66,3703,3704],{"class":68,"line":227},[66,3705,3706],{"class":758},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[66,3708,3709,3711,3713,3715,3717,3719,3721,3724,3726,3728],{"class":68,"line":236},[66,3710,3671],{"class":76},[66,3712,386],{"class":72},[66,3714,2253],{"class":76},[66,3716,2961],{"class":72},[66,3718,2229],{"class":76},[66,3720,2838],{"class":72},[66,3722,3723],{"class":76},"b)",[66,3725,99],{"class":72},[66,3727,310],{"class":102},[66,3729,3135],{"class":76},[66,3731,3732,3734,3736,3738,3740,3742],{"class":68,"line":241},[66,3733,3211],{"class":76},[66,3735,3019],{"class":72},[66,3737,2229],{"class":76},[66,3739,3019],{"class":72},[66,3741,3083],{"class":76},[66,3743,3744],{"class":758}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[66,3746,3747,3749,3751,3753,3755,3757],{"class":68,"line":372},[66,3748,3211],{"class":76},[66,3750,3019],{"class":72},[66,3752,2253],{"class":76},[66,3754,3019],{"class":72},[66,3756,3083],{"class":76},[66,3758,3759],{"class":758}," \u002F\u002F10   a>b,b还是原值\n",[31,3761,3762],{"start":112},[34,3763,3764],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[57,3766,3768],{"className":1989,"code":3767,"language":1991,"meta":62,"style":62},"\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",[23,3769,3770,3775,3783,3797,3806,3810,3824,3837,3847,3855,3860,3883,3904,3926,3947,3969,3989,4009,4014],{"__ignoreMap":62},[66,3771,3772],{"class":68,"line":69},[66,3773,3774],{"class":758},"\u002F\u002F案例-电影打分\n",[66,3776,3777,3780],{"class":68,"line":80},[66,3778,3779],{"class":72},"#include",[66,3781,3782],{"class":356},"\u003Ciostream>\n",[66,3784,3785,3788,3791,3795],{"class":68,"line":112},[66,3786,3787],{"class":72},"using",[66,3789,3790],{"class":72}," namespace",[66,3792,3794],{"class":3793},"sScJk"," std",[66,3796,3135],{"class":76},[66,3798,3799,3801,3804],{"class":68,"line":129},[66,3800,2003],{"class":72},[66,3802,3803],{"class":3793}," main",[66,3805,1253],{"class":76},[66,3807,3808],{"class":68,"line":138},[66,3809,3388],{"class":76},[66,3811,3812,3815,3818,3820,3822],{"class":68,"line":227},[66,3813,3814],{"class":72},"    int",[66,3816,3817],{"class":76}," score",[66,3819,99],{"class":72},[66,3821,2183],{"class":102},[66,3823,3135],{"class":76},[66,3825,3826,3828,3830,3833,3835],{"class":68,"line":236},[66,3827,3393],{"class":76},[66,3829,3019],{"class":72},[66,3831,3832],{"class":356},"\"电影打分：\"",[66,3834,3019],{"class":72},[66,3836,3041],{"class":76},[66,3838,3839,3842,3844],{"class":68,"line":241},[66,3840,3841],{"class":76},"    cin",[66,3843,3271],{"class":72},[66,3845,3846],{"class":76},"score;\n",[66,3848,3849,3852],{"class":68,"line":372},[66,3850,3851],{"class":72},"    switch",[66,3853,3854],{"class":76},"(score)\n",[66,3856,3857],{"class":68,"line":377},[66,3858,3859],{"class":76},"    {\n",[66,3861,3862,3865,3867,3870,3872,3875,3877,3879,3881],{"class":68,"line":392},[66,3863,3864],{"class":72},"        case",[66,3866,1335],{"class":102},[66,3868,3869],{"class":76},":cout",[66,3871,3019],{"class":72},[66,3873,3874],{"class":356},"\"经典\"",[66,3876,3019],{"class":72},[66,3878,3083],{"class":76},[66,3880,477],{"class":72},[66,3882,3135],{"class":76},[66,3884,3885,3887,3890,3892,3894,3896,3898,3900,3902],{"class":68,"line":405},[66,3886,3864],{"class":72},[66,3888,3889],{"class":102}," 9",[66,3891,3869],{"class":76},[66,3893,3019],{"class":72},[66,3895,3874],{"class":356},[66,3897,3019],{"class":72},[66,3899,3083],{"class":76},[66,3901,477],{"class":72},[66,3903,3135],{"class":76},[66,3905,3906,3908,3911,3913,3915,3918,3920,3922,3924],{"class":68,"line":418},[66,3907,3864],{"class":72},[66,3909,3910],{"class":102}," 8",[66,3912,3869],{"class":76},[66,3914,3019],{"class":72},[66,3916,3917],{"class":356},"\"非常好\"",[66,3919,3019],{"class":72},[66,3921,3083],{"class":76},[66,3923,477],{"class":72},[66,3925,3135],{"class":76},[66,3927,3928,3930,3933,3935,3937,3939,3941,3943,3945],{"class":68,"line":430},[66,3929,3864],{"class":72},[66,3931,3932],{"class":102}," 7",[66,3934,3869],{"class":76},[66,3936,3019],{"class":72},[66,3938,3917],{"class":356},[66,3940,3019],{"class":72},[66,3942,3083],{"class":76},[66,3944,477],{"class":72},[66,3946,3135],{"class":76},[66,3948,3949,3951,3954,3956,3958,3961,3963,3965,3967],{"class":68,"line":438},[66,3950,3864],{"class":72},[66,3952,3953],{"class":102}," 6",[66,3955,3869],{"class":76},[66,3957,3019],{"class":72},[66,3959,3960],{"class":356},"\"一般\"",[66,3962,3019],{"class":72},[66,3964,3083],{"class":76},[66,3966,477],{"class":72},[66,3968,3135],{"class":76},[66,3970,3971,3973,3975,3977,3979,3981,3983,3985,3987],{"class":68,"line":465},[66,3972,3864],{"class":72},[66,3974,123],{"class":102},[66,3976,3869],{"class":76},[66,3978,3019],{"class":72},[66,3980,3960],{"class":356},[66,3982,3019],{"class":72},[66,3984,3083],{"class":76},[66,3986,477],{"class":72},[66,3988,3135],{"class":76},[66,3990,3991,3994,3996,3998,4001,4003,4005,4007],{"class":68,"line":1805},[66,3992,3993],{"class":72},"        default",[66,3995,3869],{"class":76},[66,3997,3019],{"class":72},[66,3999,4000],{"class":356},"\"烂片\"",[66,4002,3019],{"class":72},[66,4004,3083],{"class":76},[66,4006,477],{"class":72},[66,4008,3135],{"class":76},[66,4010,4011],{"class":68,"line":1817},[66,4012,4013],{"class":76},"    }\n",[66,4015,4016],{"class":68,"line":1822},[66,4017,3407],{"class":76},[19,4019,4020],{},"if和switch区别：",[2982,4022,4023,4026],{},[34,4024,4025],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[34,4027,4028],{},"switch优点：结构清晰，执行效率高",[484,4030,4032],{"id":4031},"_162循环结构","1.6.2循环结构",[31,4034,4035],{},[34,4036,4037],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[57,4039,4041],{"className":1989,"code":4040,"language":1991,"meta":62,"style":62},"\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",[23,4042,4043,4048,4056,4060,4073,4087,4091,4111,4121,4125,4137],{"__ignoreMap":62},[66,4044,4045],{"class":68,"line":69},[66,4046,4047],{"class":758},"\u002F\u002F打印0-9数字\n",[66,4049,4050,4052,4054],{"class":68,"line":80},[66,4051,2003],{"class":72},[66,4053,3803],{"class":3793},[66,4055,1253],{"class":76},[66,4057,4058],{"class":68,"line":112},[66,4059,3388],{"class":76},[66,4061,4062,4064,4067,4069,4071],{"class":68,"line":129},[66,4063,3814],{"class":72},[66,4065,4066],{"class":76}," num",[66,4068,99],{"class":72},[66,4070,2183],{"class":102},[66,4072,3135],{"class":76},[66,4074,4075,4078,4081,4083,4085],{"class":68,"line":138},[66,4076,4077],{"class":72},"    while",[66,4079,4080],{"class":76},"(num",[66,4082,413],{"class":72},[66,4084,790],{"class":102},[66,4086,313],{"class":76},[66,4088,4089],{"class":68,"line":227},[66,4090,3859],{"class":76},[66,4092,4093,4096,4099,4101,4103,4105,4108],{"class":68,"line":236},[66,4094,4095],{"class":3793},"       std",[66,4097,4098],{"class":76},"::cout",[66,4100,3019],{"class":72},[66,4102,3499],{"class":76},[66,4104,3019],{"class":72},[66,4106,4107],{"class":3793},"std",[66,4109,4110],{"class":76},"::endl;\n",[66,4112,4113,4116,4119],{"class":68,"line":241},[66,4114,4115],{"class":76},"        num",[66,4117,4118],{"class":72},"++",[66,4120,3135],{"class":76},[66,4122,4123],{"class":68,"line":372},[66,4124,4013],{"class":76},[66,4126,4127,4130,4132,4135],{"class":68,"line":377},[66,4128,4129],{"class":3793},"    system",[66,4131,348],{"class":76},[66,4133,4134],{"class":356},"\"pause\"",[66,4136,313],{"class":76},[66,4138,4139],{"class":68,"line":392},[66,4140,3407],{"class":76},[19,4142,4143],{},"注意：写好循环条件，避免死循环情况",[57,4145,4147],{"className":1989,"code":4146,"language":1991,"meta":62,"style":62},"\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",[23,4148,4149,4154,4161,4168,4178,4186,4190,4195,4221,4225,4230,4238,4265,4270,4275,4288,4298,4302,4312,4317,4330,4335,4349,4354,4369,4373,4386,4390,4395,4399,4413,4421,4426,4432,4438,4443],{"__ignoreMap":62},[66,4150,4151],{"class":68,"line":69},[66,4152,4153],{"class":758},"\u002F\u002F循环结构-猜数字\n",[66,4155,4156,4158],{"class":68,"line":80},[66,4157,3779],{"class":72},[66,4159,4160],{"class":356}," \u003Ciostream>\n",[66,4162,4163,4165],{"class":68,"line":112},[66,4164,3779],{"class":72},[66,4166,4167],{"class":356}," \u003Cctime>\n",[66,4169,4170,4172,4174,4176],{"class":68,"line":129},[66,4171,3787],{"class":72},[66,4173,3790],{"class":72},[66,4175,3794],{"class":3793},[66,4177,3135],{"class":76},[66,4179,4180,4182,4184],{"class":68,"line":138},[66,4181,2003],{"class":72},[66,4183,3803],{"class":3793},[66,4185,1253],{"class":76},[66,4187,4188],{"class":68,"line":227},[66,4189,3388],{"class":76},[66,4191,4192],{"class":68,"line":236},[66,4193,4194],{"class":758},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[66,4196,4197,4200,4203,4206,4208,4210,4213,4215,4218],{"class":68,"line":241},[66,4198,4199],{"class":3793},"    srand",[66,4201,4202],{"class":76},"((",[66,4204,4205],{"class":72},"unsigned",[66,4207,345],{"class":72},[66,4209,2413],{"class":76},[66,4211,4212],{"class":3793},"time",[66,4214,348],{"class":76},[66,4216,4217],{"class":102},"NULL",[66,4219,4220],{"class":76},"));\n",[66,4222,4223],{"class":68,"line":372},[66,4224,109],{"emptyLinePlaceholder":108},[66,4226,4227],{"class":68,"line":377},[66,4228,4229],{"class":758},"    \u002F\u002F1.系统生成随机数\n",[66,4231,4232,4235],{"class":68,"line":392},[66,4233,4234],{"class":758},"    \u002F\u002Frand()%100",[66,4236,4237],{"class":758}," \u002F\u002F生成0-99的随机数\n",[66,4239,4240,4242,4244,4246,4249,4252,4254,4256,4258,4260,4262],{"class":68,"line":405},[66,4241,3814],{"class":72},[66,4243,4066],{"class":76},[66,4245,99],{"class":72},[66,4247,4248],{"class":3793},"rand",[66,4250,4251],{"class":76},"()",[66,4253,953],{"class":72},[66,4255,310],{"class":102},[66,4257,1184],{"class":72},[66,4259,304],{"class":102},[66,4261,2051],{"class":76},[66,4263,4264],{"class":758}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[66,4266,4267],{"class":68,"line":418},[66,4268,4269],{"class":758},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[66,4271,4272],{"class":68,"line":430},[66,4273,4274],{"class":758},"    \u002F\u002F2.玩家猜测\n",[66,4276,4277,4279,4282,4284,4286],{"class":68,"line":438},[66,4278,3814],{"class":72},[66,4280,4281],{"class":76}," val",[66,4283,99],{"class":72},[66,4285,2183],{"class":102},[66,4287,3135],{"class":76},[66,4289,4290,4292,4294,4296],{"class":68,"line":465},[66,4291,4077],{"class":72},[66,4293,3492],{"class":76},[66,4295,304],{"class":102},[66,4297,313],{"class":76},[66,4299,4300],{"class":68,"line":1805},[66,4301,3859],{"class":76},[66,4303,4304,4307,4309],{"class":68,"line":1817},[66,4305,4306],{"class":76},"        cin",[66,4308,3271],{"class":72},[66,4310,4311],{"class":76},"val;\n",[66,4313,4314],{"class":68,"line":1822},[66,4315,4316],{"class":758},"        \u002F\u002F3.判断玩家猜测\n",[66,4318,4319,4322,4325,4327],{"class":68,"line":1829},[66,4320,4321],{"class":72},"        if",[66,4323,4324],{"class":76},"(val",[66,4326,413],{"class":72},[66,4328,4329],{"class":76},"num) \n",[66,4331,4332],{"class":68,"line":3529},[66,4333,4334],{"class":76},"        {\n",[66,4336,4337,4340,4342,4345,4347],{"class":68,"line":3557},[66,4338,4339],{"class":76},"            cout",[66,4341,3019],{"class":72},[66,4343,4344],{"class":356},"\"猜小了！\"",[66,4346,3019],{"class":72},[66,4348,3041],{"class":76},[66,4350,4351],{"class":68,"line":3562},[66,4352,4353],{"class":76},"        }\n",[66,4355,4356,4359,4361,4364,4366],{"class":68,"line":3579},[66,4357,4358],{"class":72},"        else",[66,4360,3534],{"class":72},[66,4362,4363],{"class":76}," (val",[66,4365,386],{"class":72},[66,4367,4368],{"class":76},"num)\n",[66,4370,4371],{"class":68,"line":3584},[66,4372,4334],{"class":76},[66,4374,4375,4377,4379,4382,4384],{"class":68,"line":3589},[66,4376,4339],{"class":76},[66,4378,3019],{"class":72},[66,4380,4381],{"class":356},"\"猜大了！\"",[66,4383,3019],{"class":72},[66,4385,3041],{"class":76},[66,4387,4388],{"class":68,"line":3594},[66,4389,4353],{"class":76},[66,4391,4392],{"class":68,"line":3608},[66,4393,4394],{"class":72},"        else\n",[66,4396,4397],{"class":68,"line":3613},[66,4398,4334],{"class":76},[66,4400,4402,4404,4406,4409,4411],{"class":68,"line":4401},30,[66,4403,4339],{"class":76},[66,4405,3019],{"class":72},[66,4407,4408],{"class":356},"\"猜对了！\"",[66,4410,3019],{"class":72},[66,4412,3041],{"class":76},[66,4414,4416,4419],{"class":68,"line":4415},31,[66,4417,4418],{"class":72},"            break",[66,4420,3135],{"class":76},[66,4422,4424],{"class":68,"line":4423},32,[66,4425,4353],{"class":76},[66,4427,4429],{"class":68,"line":4428},33,[66,4430,4431],{"class":758},"        \u002F\u002F猜对 退出游戏\n",[66,4433,4435],{"class":68,"line":4434},34,[66,4436,4437],{"class":758},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[66,4439,4441],{"class":68,"line":4440},35,[66,4442,4013],{"class":76},[66,4444,4446],{"class":68,"line":4445},36,[66,4447,3407],{"class":76},[31,4449,4450],{"start":80},[34,4451,4452,4453,4456],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[2141,4454,4455],{},"do...while会先执行一次循环语句","，在判断循环语句",[57,4458,4460],{"className":1989,"code":4459,"language":1991,"meta":62,"style":62},"\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",[23,4461,4462,4467,4475,4479,4491,4499,4503,4520,4527,4531,4544,4554],{"__ignoreMap":62},[66,4463,4464],{"class":68,"line":69},[66,4465,4466],{"class":758},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[66,4468,4469,4471,4473],{"class":68,"line":80},[66,4470,2003],{"class":72},[66,4472,3803],{"class":3793},[66,4474,1253],{"class":76},[66,4476,4477],{"class":68,"line":112},[66,4478,3388],{"class":76},[66,4480,4481,4483,4485,4487,4489],{"class":68,"line":129},[66,4482,3814],{"class":72},[66,4484,4066],{"class":76},[66,4486,99],{"class":72},[66,4488,2183],{"class":102},[66,4490,3135],{"class":76},[66,4492,4493,4496],{"class":68,"line":138},[66,4494,4495],{"class":72},"    do",[66,4497,4498],{"class":76}," \n",[66,4500,4501],{"class":68,"line":227},[66,4502,3859],{"class":76},[66,4504,4505,4508,4510,4512,4514,4516,4518],{"class":68,"line":236},[66,4506,4507],{"class":3793},"        std",[66,4509,4098],{"class":76},[66,4511,3019],{"class":72},[66,4513,3499],{"class":76},[66,4515,3019],{"class":72},[66,4517,4107],{"class":3793},[66,4519,4110],{"class":76},[66,4521,4522,4524],{"class":68,"line":241},[66,4523,4115],{"class":76},[66,4525,4526],{"class":72},"++\n",[66,4528,4529],{"class":68,"line":372},[66,4530,4013],{"class":76},[66,4532,4533,4535,4537,4539,4541],{"class":68,"line":377},[66,4534,4077],{"class":72},[66,4536,4080],{"class":76},[66,4538,413],{"class":72},[66,4540,790],{"class":102},[66,4542,4543],{"class":76},");\n",[66,4545,4546,4548,4550,4552],{"class":68,"line":392},[66,4547,4129],{"class":3793},[66,4549,348],{"class":76},[66,4551,4134],{"class":356},[66,4553,4543],{"class":76},[66,4555,4556],{"class":68,"line":405},[66,4557,3407],{"class":76},[19,4559,4560],{},"案例-水仙花数",[19,4562,4563],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,4565,4566],{},"例如：1^3+5^3+3^3=153",[19,4568,4569],{},"请用do...while语句，求出所有3位数的水仙花数",[57,4571,4573],{"className":1989,"code":4572,"language":1991,"meta":62,"style":62},"#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",[23,4574,4575,4581,4591,4599,4603,4608,4620,4626,4630,4635,4651,4667,4683,4698,4717,4732,4779,4783,4795,4799,4807,4811,4825],{"__ignoreMap":62},[66,4576,4577,4579],{"class":68,"line":69},[66,4578,3779],{"class":72},[66,4580,4160],{"class":356},[66,4582,4583,4585,4587,4589],{"class":68,"line":80},[66,4584,3787],{"class":72},[66,4586,3790],{"class":72},[66,4588,3794],{"class":3793},[66,4590,3135],{"class":76},[66,4592,4593,4595,4597],{"class":68,"line":112},[66,4594,2003],{"class":72},[66,4596,3803],{"class":3793},[66,4598,1253],{"class":76},[66,4600,4601],{"class":68,"line":129},[66,4602,3388],{"class":76},[66,4604,4605],{"class":68,"line":138},[66,4606,4607],{"class":758},"    \u002F\u002F1.先打印所有三位数字\n",[66,4609,4610,4612,4614,4616,4618],{"class":68,"line":227},[66,4611,3814],{"class":72},[66,4613,4066],{"class":76},[66,4615,99],{"class":72},[66,4617,310],{"class":102},[66,4619,3135],{"class":76},[66,4621,4622,4624],{"class":68,"line":236},[66,4623,4495],{"class":72},[66,4625,4498],{"class":76},[66,4627,4628],{"class":68,"line":241},[66,4629,3859],{"class":76},[66,4631,4632],{"class":68,"line":372},[66,4633,4634],{"class":758},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[66,4636,4637,4640,4642,4644,4646,4648],{"class":68,"line":377},[66,4638,4639],{"class":72},"        int",[66,4641,3240],{"class":76},[66,4643,99],{"class":72},[66,4645,2183],{"class":102},[66,4647,2051],{"class":76},[66,4649,4650],{"class":758}," \u002F\u002F个位\n",[66,4652,4653,4655,4658,4660,4662,4664],{"class":68,"line":392},[66,4654,4639],{"class":72},[66,4656,4657],{"class":76}," b",[66,4659,99],{"class":72},[66,4661,2183],{"class":102},[66,4663,2051],{"class":76},[66,4665,4666],{"class":758}," \u002F\u002F十位\n",[66,4668,4669,4671,4674,4676,4678,4680],{"class":68,"line":405},[66,4670,4639],{"class":72},[66,4672,4673],{"class":76}," c",[66,4675,99],{"class":72},[66,4677,2183],{"class":102},[66,4679,2051],{"class":76},[66,4681,4682],{"class":758}," \u002F\u002F百位\n",[66,4684,4685,4688,4690,4692,4694,4696],{"class":68,"line":418},[66,4686,4687],{"class":76},"        a",[66,4689,99],{"class":72},[66,4691,3499],{"class":76},[66,4693,953],{"class":72},[66,4695,790],{"class":102},[66,4697,3135],{"class":76},[66,4699,4700,4703,4705,4707,4709,4711,4713,4715],{"class":68,"line":430},[66,4701,4702],{"class":76},"        b",[66,4704,99],{"class":72},[66,4706,3499],{"class":76},[66,4708,2563],{"class":72},[66,4710,790],{"class":102},[66,4712,953],{"class":72},[66,4714,790],{"class":102},[66,4716,3135],{"class":76},[66,4718,4719,4722,4724,4726,4728,4730],{"class":68,"line":438},[66,4720,4721],{"class":76},"        c",[66,4723,99],{"class":72},[66,4725,3499],{"class":76},[66,4727,2563],{"class":72},[66,4729,310],{"class":102},[66,4731,3135],{"class":76},[66,4733,4734,4736,4738,4740,4742,4744,4746,4748,4750,4752,4754,4756,4758,4760,4762,4764,4766,4768,4771,4773,4776],{"class":68,"line":465},[66,4735,4321],{"class":72},[66,4737,3671],{"class":76},[66,4739,1208],{"class":72},[66,4741,2229],{"class":76},[66,4743,1208],{"class":72},[66,4745,2229],{"class":76},[66,4747,1184],{"class":72},[66,4749,2253],{"class":76},[66,4751,1208],{"class":72},[66,4753,2253],{"class":76},[66,4755,1208],{"class":72},[66,4757,2253],{"class":76},[66,4759,1184],{"class":72},[66,4761,2278],{"class":76},[66,4763,1208],{"class":72},[66,4765,2278],{"class":76},[66,4767,1208],{"class":72},[66,4769,4770],{"class":76},"c ",[66,4772,531],{"class":72},[66,4774,4775],{"class":76}," num)",[66,4777,4778],{"class":758}," \u002F\u002F如果是水仙花数，才打印\n",[66,4780,4781],{"class":68,"line":1805},[66,4782,4334],{"class":76},[66,4784,4785,4787,4789,4791,4793],{"class":68,"line":1817},[66,4786,4339],{"class":76},[66,4788,3019],{"class":72},[66,4790,3499],{"class":76},[66,4792,3019],{"class":72},[66,4794,3041],{"class":76},[66,4796,4797],{"class":68,"line":1822},[66,4798,4353],{"class":76},[66,4800,4801,4803,4805],{"class":68,"line":1829},[66,4802,4115],{"class":76},[66,4804,4118],{"class":72},[66,4806,3135],{"class":76},[66,4808,4809],{"class":68,"line":3529},[66,4810,4013],{"class":76},[66,4812,4813,4815,4818,4820,4823],{"class":68,"line":3557},[66,4814,4077],{"class":72},[66,4816,4817],{"class":76}," (num ",[66,4819,413],{"class":72},[66,4821,4822],{"class":102}," 1000",[66,4824,4543],{"class":76},[66,4826,4827],{"class":68,"line":3562},[66,4828,3407],{"class":76},[31,4830,4831],{"start":112},[34,4832,4833],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[57,4835,4837],{"className":1989,"code":4836,"language":1991,"meta":62,"style":62},"\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",[23,4838,4839,4844,4871,4875,4887,4891,4896,4907,4914,4918,4931,4935,4942,4946,4958,4967],{"__ignoreMap":62},[66,4840,4841],{"class":68,"line":69},[66,4842,4843],{"class":758},"\u002F\u002F从数字0-9打印\n",[66,4845,4846,4848,4850,4852,4854,4856,4858,4861,4863,4865,4867,4869],{"class":68,"line":80},[66,4847,502],{"class":72},[66,4849,348],{"class":76},[66,4851,2003],{"class":72},[66,4853,1596],{"class":76},[66,4855,99],{"class":72},[66,4857,2183],{"class":102},[66,4859,4860],{"class":76},";i",[66,4862,413],{"class":72},[66,4864,790],{"class":102},[66,4866,4860],{"class":76},[66,4868,4118],{"class":72},[66,4870,313],{"class":76},[66,4872,4873],{"class":68,"line":112},[66,4874,3388],{"class":76},[66,4876,4877,4879,4881,4883,4885],{"class":68,"line":129},[66,4878,3393],{"class":76},[66,4880,3019],{"class":72},[66,4882,257],{"class":76},[66,4884,3019],{"class":72},[66,4886,3041],{"class":76},[66,4888,4889],{"class":68,"line":138},[66,4890,3407],{"class":76},[66,4892,4893],{"class":68,"line":227},[66,4894,4895],{"class":758},"\u002F\u002F上式可以进行拆分\n",[66,4897,4898,4900,4902,4904],{"class":68,"line":236},[66,4899,2003],{"class":72},[66,4901,1596],{"class":76},[66,4903,99],{"class":72},[66,4905,4906],{"class":102},"0\n",[66,4908,4909,4911],{"class":68,"line":241},[66,4910,502],{"class":72},[66,4912,4913],{"class":76},"(;;;)\n",[66,4915,4916],{"class":68,"line":372},[66,4917,3388],{"class":76},[66,4919,4920,4922,4925,4927,4929],{"class":68,"line":377},[66,4921,380],{"class":72},[66,4923,4924],{"class":76},"(i",[66,4926,3540],{"class":72},[66,4928,790],{"class":102},[66,4930,313],{"class":76},[66,4932,4933],{"class":68,"line":392},[66,4934,3859],{"class":76},[66,4936,4937,4940],{"class":68,"line":405},[66,4938,4939],{"class":72},"        break",[66,4941,3135],{"class":76},[66,4943,4944],{"class":68,"line":418},[66,4945,4013],{"class":76},[66,4947,4948,4950,4952,4954,4956],{"class":68,"line":430},[66,4949,3393],{"class":76},[66,4951,3019],{"class":72},[66,4953,257],{"class":76},[66,4955,3019],{"class":72},[66,4957,3041],{"class":76},[66,4959,4960,4963,4965],{"class":68,"line":438},[66,4961,4962],{"class":76},"    i",[66,4964,4118],{"class":72},[66,4966,3135],{"class":76},[66,4968,4969],{"class":68,"line":465},[66,4970,3407],{"class":76},[19,4972,4973],{},"小练习",[57,4975,4977],{"className":1989,"code":4976,"language":1991,"meta":62,"style":62},"#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",[23,4978,4979,4985,4995,5003,5007,5012,5017,5044,5048,5053,5058,5099,5103,5116,5120,5124,5128,5140,5144,5148],{"__ignoreMap":62},[66,4980,4981,4983],{"class":68,"line":69},[66,4982,3779],{"class":72},[66,4984,3782],{"class":356},[66,4986,4987,4989,4991,4993],{"class":68,"line":80},[66,4988,3787],{"class":72},[66,4990,3790],{"class":72},[66,4992,3794],{"class":3793},[66,4994,3135],{"class":76},[66,4996,4997,4999,5001],{"class":68,"line":112},[66,4998,2003],{"class":72},[66,5000,3803],{"class":3793},[66,5002,1253],{"class":76},[66,5004,5005],{"class":68,"line":129},[66,5006,3388],{"class":76},[66,5008,5009],{"class":68,"line":138},[66,5010,5011],{"class":758},"    \u002F\u002F敲桌子案例\n",[66,5013,5014],{"class":68,"line":227},[66,5015,5016],{"class":758},"    \u002F\u002F1.先输出1-100的数字\n",[66,5018,5019,5021,5023,5025,5027,5029,5031,5034,5036,5038,5040,5042],{"class":68,"line":236},[66,5020,1083],{"class":72},[66,5022,348],{"class":76},[66,5024,2003],{"class":72},[66,5026,1596],{"class":76},[66,5028,99],{"class":72},[66,5030,304],{"class":102},[66,5032,5033],{"class":76},"; i",[66,5035,120],{"class":72},[66,5037,310],{"class":102},[66,5039,5033],{"class":76},[66,5041,4118],{"class":72},[66,5043,313],{"class":76},[66,5045,5046],{"class":68,"line":241},[66,5047,3859],{"class":76},[66,5049,5050],{"class":68,"line":372},[66,5051,5052],{"class":758},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[66,5054,5055],{"class":68,"line":377},[66,5056,5057],{"class":758},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[66,5059,5060,5062,5064,5066,5068,5070,5072,5075,5077,5079,5081,5083,5085,5087,5089,5091,5093,5095,5097],{"class":68,"line":392},[66,5061,4321],{"class":72},[66,5063,4924],{"class":76},[66,5065,953],{"class":72},[66,5067,2353],{"class":102},[66,5069,531],{"class":72},[66,5071,2183],{"class":102},[66,5073,5074],{"class":72}," ||",[66,5076,1596],{"class":76},[66,5078,953],{"class":72},[66,5080,790],{"class":102},[66,5082,531],{"class":72},[66,5084,2353],{"class":102},[66,5086,5074],{"class":72},[66,5088,1596],{"class":76},[66,5090,2563],{"class":72},[66,5092,790],{"class":102},[66,5094,531],{"class":72},[66,5096,2353],{"class":102},[66,5098,313],{"class":76},[66,5100,5101],{"class":68,"line":405},[66,5102,4334],{"class":76},[66,5104,5105,5107,5109,5112,5114],{"class":68,"line":418},[66,5106,4339],{"class":76},[66,5108,3019],{"class":72},[66,5110,5111],{"class":356},"\"敲桌子\"",[66,5113,3019],{"class":72},[66,5115,3041],{"class":76},[66,5117,5118],{"class":68,"line":430},[66,5119,4353],{"class":76},[66,5121,5122],{"class":68,"line":438},[66,5123,4394],{"class":72},[66,5125,5126],{"class":68,"line":465},[66,5127,4334],{"class":76},[66,5129,5130,5132,5134,5136,5138],{"class":68,"line":1805},[66,5131,4339],{"class":76},[66,5133,3019],{"class":72},[66,5135,257],{"class":76},[66,5137,3019],{"class":72},[66,5139,3041],{"class":76},[66,5141,5142],{"class":68,"line":1817},[66,5143,4353],{"class":76},[66,5145,5146],{"class":68,"line":1822},[66,5147,4013],{"class":76},[66,5149,5150],{"class":68,"line":1829},[66,5151,3407],{"class":76},[19,5153,5154],{},"嵌套实现星图",[57,5156,5158],{"className":1989,"code":5157,"language":1991,"meta":62,"style":62},"#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",[23,5159,5160,5166,5176,5184,5188,5214,5218,5246,5250,5261,5265,5274,5278],{"__ignoreMap":62},[66,5161,5162,5164],{"class":68,"line":69},[66,5163,3779],{"class":72},[66,5165,3782],{"class":356},[66,5167,5168,5170,5172,5174],{"class":68,"line":80},[66,5169,3787],{"class":72},[66,5171,3790],{"class":72},[66,5173,3794],{"class":3793},[66,5175,3135],{"class":76},[66,5177,5178,5180,5182],{"class":68,"line":112},[66,5179,2003],{"class":72},[66,5181,3803],{"class":3793},[66,5183,1253],{"class":76},[66,5185,5186],{"class":68,"line":129},[66,5187,3388],{"class":76},[66,5189,5190,5192,5194,5196,5198,5200,5202,5204,5206,5208,5210,5212],{"class":68,"line":138},[66,5191,1083],{"class":72},[66,5193,3492],{"class":76},[66,5195,2003],{"class":72},[66,5197,1596],{"class":76},[66,5199,99],{"class":72},[66,5201,2183],{"class":102},[66,5203,4860],{"class":76},[66,5205,413],{"class":72},[66,5207,790],{"class":102},[66,5209,4860],{"class":76},[66,5211,4118],{"class":72},[66,5213,313],{"class":76},[66,5215,5216],{"class":68,"line":227},[66,5217,3859],{"class":76},[66,5219,5220,5223,5225,5227,5229,5231,5233,5236,5238,5240,5242,5244],{"class":68,"line":236},[66,5221,5222],{"class":72},"        for",[66,5224,3492],{"class":76},[66,5226,2003],{"class":72},[66,5228,1225],{"class":76},[66,5230,99],{"class":72},[66,5232,2183],{"class":102},[66,5234,5235],{"class":76},";j",[66,5237,413],{"class":72},[66,5239,790],{"class":102},[66,5241,5235],{"class":76},[66,5243,4118],{"class":72},[66,5245,313],{"class":76},[66,5247,5248],{"class":68,"line":241},[66,5249,4334],{"class":76},[66,5251,5252,5254,5256,5259],{"class":68,"line":372},[66,5253,4339],{"class":76},[66,5255,3019],{"class":72},[66,5257,5258],{"class":356},"\"*\"",[66,5260,3135],{"class":76},[66,5262,5263],{"class":68,"line":377},[66,5264,4353],{"class":76},[66,5266,5267,5270,5272],{"class":68,"line":392},[66,5268,5269],{"class":76},"        cout",[66,5271,3019],{"class":72},[66,5273,3041],{"class":76},[66,5275,5276],{"class":68,"line":405},[66,5277,4013],{"class":76},[66,5279,5280],{"class":68,"line":418},[66,5281,3407],{"class":76},[19,5283,5284],{},"乘法口诀表",[57,5286,5288],{"className":1989,"code":5287,"language":1991,"meta":62,"style":62},"#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",[23,5289,5290,5296,5306,5314,5318,5344,5348,5373,5377,5417,5421,5429,5433],{"__ignoreMap":62},[66,5291,5292,5294],{"class":68,"line":69},[66,5293,3779],{"class":72},[66,5295,4160],{"class":356},[66,5297,5298,5300,5302,5304],{"class":68,"line":80},[66,5299,3787],{"class":72},[66,5301,3790],{"class":72},[66,5303,3794],{"class":3793},[66,5305,3135],{"class":76},[66,5307,5308,5310,5312],{"class":68,"line":112},[66,5309,2003],{"class":72},[66,5311,3803],{"class":3793},[66,5313,1253],{"class":76},[66,5315,5316],{"class":68,"line":129},[66,5317,3388],{"class":76},[66,5319,5320,5322,5324,5326,5328,5330,5332,5334,5336,5338,5340,5342],{"class":68,"line":138},[66,5321,1083],{"class":72},[66,5323,348],{"class":76},[66,5325,2003],{"class":72},[66,5327,1596],{"class":76},[66,5329,99],{"class":72},[66,5331,304],{"class":102},[66,5333,4860],{"class":76},[66,5335,413],{"class":72},[66,5337,790],{"class":102},[66,5339,4860],{"class":76},[66,5341,4118],{"class":72},[66,5343,313],{"class":76},[66,5345,5346],{"class":68,"line":227},[66,5347,3859],{"class":76},[66,5349,5350,5352,5354,5356,5358,5360,5362,5364,5366,5369,5371],{"class":68,"line":236},[66,5351,5222],{"class":72},[66,5353,348],{"class":76},[66,5355,2003],{"class":72},[66,5357,1225],{"class":76},[66,5359,99],{"class":72},[66,5361,304],{"class":102},[66,5363,5235],{"class":76},[66,5365,120],{"class":72},[66,5367,5368],{"class":76},"i;j",[66,5370,4118],{"class":72},[66,5372,313],{"class":76},[66,5374,5375],{"class":68,"line":241},[66,5376,4334],{"class":76},[66,5378,5379,5381,5383,5385,5387,5389,5391,5393,5395,5398,5400,5402,5404,5406,5408,5411,5413,5415],{"class":68,"line":372},[66,5380,4339],{"class":76},[66,5382,3019],{"class":72},[66,5384,1125],{"class":76},[66,5386,3019],{"class":72},[66,5388,5258],{"class":356},[66,5390,3019],{"class":72},[66,5392,257],{"class":76},[66,5394,3019],{"class":72},[66,5396,5397],{"class":356},"\"=\"",[66,5399,3019],{"class":72},[66,5401,257],{"class":76},[66,5403,1208],{"class":72},[66,5405,1125],{"class":76},[66,5407,3019],{"class":72},[66,5409,5410],{"class":356},"'",[66,5412,1242],{"class":102},[66,5414,5410],{"class":356},[66,5416,3135],{"class":76},[66,5418,5419],{"class":68,"line":377},[66,5420,4353],{"class":76},[66,5422,5423,5425,5427],{"class":68,"line":392},[66,5424,5269],{"class":76},[66,5426,3019],{"class":72},[66,5428,3041],{"class":76},[66,5430,5431],{"class":68,"line":405},[66,5432,4013],{"class":76},[66,5434,5435],{"class":68,"line":418},[66,5436,3407],{"class":76},[484,5438,5440],{"id":5439},"_163跳出语句","1.6.3跳出语句",[31,5442,5443],{},[34,5444,5445],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,5447,5448],{},"break使用时机：",[2982,5450,5451,5454,5457],{},[34,5452,5453],{},"出现在switch条件语句中，作用是终止case并跳出switch",[34,5455,5456],{},"出现在循环结构中，作用是跳出当前的循环结构",[34,5458,5459],{},"出现在嵌套循环中，跳出最近的内层循环语句",[31,5461,5462,5465],{"start":80},[34,5463,5464],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[34,5466,5467],{},"goto语句\n语法：goto 标记;",[19,5469,5470],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[57,5472,5474],{"className":1989,"code":5473,"language":1991,"meta":62,"style":62},"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",[23,5475,5476,5484,5488,5501,5511,5524,5537,5550,5557,5573],{"__ignoreMap":62},[66,5477,5478,5480,5482],{"class":68,"line":69},[66,5479,2003],{"class":72},[66,5481,3803],{"class":3793},[66,5483,1253],{"class":76},[66,5485,5486],{"class":68,"line":80},[66,5487,3388],{"class":76},[66,5489,5490,5492,5494,5497,5499],{"class":68,"line":112},[66,5491,3393],{"class":76},[66,5493,3019],{"class":72},[66,5495,5496],{"class":356},"\"1\"",[66,5498,3019],{"class":72},[66,5500,3041],{"class":76},[66,5502,5503,5506,5509],{"class":68,"line":129},[66,5504,5505],{"class":72},"    goto",[66,5507,5508],{"class":3793}," FLAG",[66,5510,3135],{"class":76},[66,5512,5513,5515,5517,5520,5522],{"class":68,"line":138},[66,5514,3393],{"class":76},[66,5516,3019],{"class":72},[66,5518,5519],{"class":356},"\"2\"",[66,5521,3019],{"class":72},[66,5523,3041],{"class":76},[66,5525,5526,5528,5530,5533,5535],{"class":68,"line":227},[66,5527,3393],{"class":76},[66,5529,3019],{"class":72},[66,5531,5532],{"class":356},"\"3\"",[66,5534,3019],{"class":72},[66,5536,3041],{"class":76},[66,5538,5539,5541,5543,5546,5548],{"class":68,"line":236},[66,5540,3393],{"class":76},[66,5542,3019],{"class":72},[66,5544,5545],{"class":356},"\"4\"",[66,5547,3019],{"class":72},[66,5549,3041],{"class":76},[66,5551,5552,5555],{"class":68,"line":241},[66,5553,5554],{"class":3793},"    FLAG",[66,5556,126],{"class":76},[66,5558,5559,5561,5563,5566,5568,5570],{"class":68,"line":372},[66,5560,3393],{"class":76},[66,5562,3019],{"class":72},[66,5564,5565],{"class":356},"\"5\"",[66,5567,3019],{"class":72},[66,5569,3083],{"class":76},[66,5571,5572],{"class":758},"\u002F\u002F跳过了2,3,4,直接到5\n",[66,5574,5575],{"class":68,"line":377},[66,5576,3407],{"class":76},[14,5578,5580],{"id":5579},"_17数组","1.7数组",[484,5582,5584],{"id":5583},"_171一维数组","1.7.1一维数组",[31,5586,5587],{},[34,5588,5589],{},"一维数组定义方式",[2129,5591,5592,5602],{},[2132,5593,5594],{},[2135,5595,5596,5599],{},[2138,5597,5598],{},"方式",[2138,5600,5601],{},"注意事项",[2176,5603,5604,5618,5628],{},[2135,5605,5606,5612],{},[2181,5607,5608,5609,2051],{},"数据类型 数组名",[66,5610,5611],{},"数组长度",[2181,5613,5614,5615,5617],{},"这种方式是先定义再arr",[66,5616,257],{},"赋值",[2135,5619,5620,5625],{},[2181,5621,5608,5622,5624],{},[66,5623,5611],{},"={值1,值2....};",[2181,5626,5627],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[2135,5629,5630,5634],{},[2181,5631,5608,5632,5624],{},[66,5633],{},[2181,5635,5636,5637,5639],{},"int arr",[66,5638],{},";这是不正确的，按照这样的方式定义必须有初始长度",[31,5641,5642],{"start":80},[34,5643,5644],{},"一维数组数组名\n用途：",[2982,5646,5647],{},[34,5648,5649],{},"1.可以统计整个数组在内存中的长度：",[57,5651,5653],{"className":1989,"code":5652,"language":1991,"meta":62,"style":62},"sizeof(arr);\nsizeof(arr[0]);\n",[23,5654,5655,5662],{"__ignoreMap":62},[66,5656,5657,5659],{"class":68,"line":69},[66,5658,1998],{"class":72},[66,5660,5661],{"class":76},"(arr);\n",[66,5663,5664,5666,5669,5671],{"class":68,"line":80},[66,5665,1998],{"class":72},[66,5667,5668],{"class":76},"(arr[",[66,5670,2183],{"class":102},[66,5672,5673],{"class":76},"]);\n",[2982,5675,5676],{},[34,5677,5678],{},"2.可以获取数组在内存中的首地址:",[57,5680,5682],{"className":1989,"code":5681,"language":1991,"meta":62,"style":62},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[23,5683,5684,5689,5702,5707],{"__ignoreMap":62},[66,5685,5686],{"class":68,"line":69},[66,5687,5688],{"class":758},"\u002F\u002F查看16进制的首地址\n",[66,5690,5691,5693,5695,5698,5700],{"class":68,"line":80},[66,5692,3211],{"class":76},[66,5694,3019],{"class":72},[66,5696,5697],{"class":76},"arr",[66,5699,3019],{"class":72},[66,5701,3041],{"class":76},[66,5703,5704],{"class":68,"line":112},[66,5705,5706],{"class":758},"\u002F\u002F看10进制数\n",[66,5708,5709,5711,5713,5715,5717,5719,5721,5724,5726,5728,5730],{"class":68,"line":129},[66,5710,3211],{"class":76},[66,5712,3019],{"class":72},[66,5714,348],{"class":76},[66,5716,2003],{"class":72},[66,5718,2413],{"class":76},[66,5720,2337],{"class":72},[66,5722,5723],{"class":76},"arr[",[66,5725,2183],{"class":102},[66,5727,2917],{"class":76},[66,5729,3019],{"class":72},[66,5731,3041],{"class":76},[19,5733,5734],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[2982,5736,5737],{},[34,5738,5739],{},"1️⃣五只小猪称体重",[57,5741,5743],{"className":1989,"code":5742,"language":1991,"meta":62,"style":62},"#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",[23,5744,5745,5751,5761,5769,5773,5813,5826,5852,5856,5868,5872,5882,5886,5890,5903,5912],{"__ignoreMap":62},[66,5746,5747,5749],{"class":68,"line":69},[66,5748,3779],{"class":72},[66,5750,3782],{"class":356},[66,5752,5753,5755,5757,5759],{"class":68,"line":80},[66,5754,3787],{"class":72},[66,5756,3790],{"class":72},[66,5758,3794],{"class":3793},[66,5760,3135],{"class":76},[66,5762,5763,5765,5767],{"class":68,"line":112},[66,5764,2003],{"class":72},[66,5766,3803],{"class":3793},[66,5768,1253],{"class":76},[66,5770,5771],{"class":68,"line":129},[66,5772,3388],{"class":76},[66,5774,5775,5777,5780,5782,5784,5786,5788,5791,5793,5796,5798,5800,5802,5805,5807,5810],{"class":68,"line":138},[66,5776,3814],{"class":72},[66,5778,5779],{"class":76}," arr[",[66,5781,752],{"class":102},[66,5783,2917],{"class":76},[66,5785,99],{"class":72},[66,5787,451],{"class":76},[66,5789,5790],{"class":102},"300",[66,5792,2362],{"class":76},[66,5794,5795],{"class":102},"350",[66,5797,2362],{"class":76},[66,5799,3552],{"class":102},[66,5801,2362],{"class":76},[66,5803,5804],{"class":102},"400",[66,5806,2362],{"class":76},[66,5808,5809],{"class":102},"250",[66,5811,5812],{"class":76},"};\n",[66,5814,5815,5817,5820,5822,5824],{"class":68,"line":227},[66,5816,3814],{"class":72},[66,5818,5819],{"class":76}," tmp",[66,5821,99],{"class":72},[66,5823,2183],{"class":102},[66,5825,3135],{"class":76},[66,5827,5828,5830,5832,5834,5836,5838,5840,5842,5844,5846,5848,5850],{"class":68,"line":236},[66,5829,1083],{"class":72},[66,5831,3492],{"class":76},[66,5833,2003],{"class":72},[66,5835,1596],{"class":76},[66,5837,99],{"class":72},[66,5839,2183],{"class":102},[66,5841,4860],{"class":76},[66,5843,413],{"class":72},[66,5845,752],{"class":102},[66,5847,4860],{"class":76},[66,5849,4118],{"class":72},[66,5851,313],{"class":76},[66,5853,5854],{"class":68,"line":241},[66,5855,3859],{"class":76},[66,5857,5858,5860,5863,5865],{"class":68,"line":372},[66,5859,4321],{"class":72},[66,5861,5862],{"class":76},"(tmp",[66,5864,413],{"class":72},[66,5866,5867],{"class":76},"arr[i])\n",[66,5869,5870],{"class":68,"line":377},[66,5871,4334],{"class":76},[66,5873,5874,5877,5879],{"class":68,"line":392},[66,5875,5876],{"class":76},"            tmp",[66,5878,99],{"class":72},[66,5880,5881],{"class":76},"arr[i];\n",[66,5883,5884],{"class":68,"line":405},[66,5885,4353],{"class":76},[66,5887,5888],{"class":68,"line":418},[66,5889,4013],{"class":76},[66,5891,5892,5894,5896,5899,5901],{"class":68,"line":430},[66,5893,3393],{"class":76},[66,5895,3019],{"class":72},[66,5897,5898],{"class":76},"tmp",[66,5900,3019],{"class":72},[66,5902,3041],{"class":76},[66,5904,5905,5908,5910],{"class":68,"line":438},[66,5906,5907],{"class":72},"    return",[66,5909,962],{"class":102},[66,5911,3135],{"class":76},[66,5913,5914],{"class":68,"line":465},[66,5915,3407],{"class":76},[2982,5917,5918],{},[34,5919,5920],{},"2️⃣数组元素逆置",[57,5922,5924],{"className":1989,"code":5923,"language":1991,"meta":62,"style":62},"\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",[23,5925,5926,5931,5937,5947,5955,5959,5994,6010,6042,6055,6060,6065,6077,6087,6097,6102,6111,6121,6126,6131,6158,6162,6178,6182,6193,6202],{"__ignoreMap":62},[66,5927,5928],{"class":68,"line":69},[66,5929,5930],{"class":758},"\u002F\u002F元素逆置\n",[66,5932,5933,5935],{"class":68,"line":80},[66,5934,3779],{"class":72},[66,5936,3782],{"class":356},[66,5938,5939,5941,5943,5945],{"class":68,"line":112},[66,5940,3787],{"class":72},[66,5942,3790],{"class":72},[66,5944,3794],{"class":3793},[66,5946,3135],{"class":76},[66,5948,5949,5951,5953],{"class":68,"line":129},[66,5950,2003],{"class":72},[66,5952,3803],{"class":3793},[66,5954,1253],{"class":76},[66,5956,5957],{"class":68,"line":138},[66,5958,3388],{"class":76},[66,5960,5961,5964,5966,5968,5970,5972,5974,5976,5978,5980,5982,5984,5986,5988,5990,5992],{"class":68,"line":227},[66,5962,5963],{"class":72},"   int",[66,5965,5779],{"class":76},[66,5967,752],{"class":102},[66,5969,2917],{"class":76},[66,5971,99],{"class":72},[66,5973,451],{"class":76},[66,5975,304],{"class":102},[66,5977,2362],{"class":76},[66,5979,795],{"class":102},[66,5981,2362],{"class":76},[66,5983,1520],{"class":102},[66,5985,2362],{"class":76},[66,5987,1076],{"class":102},[66,5989,2362],{"class":76},[66,5991,752],{"class":102},[66,5993,5812],{"class":76},[66,5995,5996,5998,6001,6003,6005,6007],{"class":68,"line":236},[66,5997,5963],{"class":72},[66,5999,6000],{"class":76}," start",[66,6002,99],{"class":72},[66,6004,2183],{"class":102},[66,6006,2051],{"class":76},[66,6008,6009],{"class":758},"\u002F\u002F起始下标\n",[66,6011,6012,6014,6017,6020,6023,6026,6028,6030,6033,6035,6037,6039],{"class":68,"line":241},[66,6013,5963],{"class":72},[66,6015,6016],{"class":76}," end",[66,6018,6019],{"class":72},"=sizeof",[66,6021,6022],{"class":76},"(arr)",[66,6024,6025],{"class":72},"\u002Fsizeof",[66,6027,5668],{"class":76},[66,6029,2183],{"class":102},[66,6031,6032],{"class":76},"])",[66,6034,2511],{"class":72},[66,6036,304],{"class":102},[66,6038,2051],{"class":76},[66,6040,6041],{"class":758},"\u002F\u002F结束下标\n",[66,6043,6044,6047,6050,6052],{"class":68,"line":372},[66,6045,6046],{"class":72},"   while",[66,6048,6049],{"class":76}," (start",[66,6051,413],{"class":72},[66,6053,6054],{"class":76},"end)\n",[66,6056,6057],{"class":68,"line":377},[66,6058,6059],{"class":76},"   {\n",[66,6061,6062],{"class":68,"line":392},[66,6063,6064],{"class":758},"    \u002F\u002F实现元素互换代码\n",[66,6066,6067,6069,6072,6074],{"class":68,"line":405},[66,6068,3814],{"class":72},[66,6070,6071],{"class":76}," temp",[66,6073,99],{"class":72},[66,6075,6076],{"class":76},"arr[start];\n",[66,6078,6079,6082,6084],{"class":68,"line":418},[66,6080,6081],{"class":76},"    arr[start]",[66,6083,99],{"class":72},[66,6085,6086],{"class":76},"arr[end];\n",[66,6088,6089,6092,6094],{"class":68,"line":430},[66,6090,6091],{"class":76},"    arr[end]",[66,6093,99],{"class":72},[66,6095,6096],{"class":76},"temp;\n",[66,6098,6099],{"class":68,"line":438},[66,6100,6101],{"class":758},"    \u002F\u002F下标更新\n",[66,6103,6104,6107,6109],{"class":68,"line":465},[66,6105,6106],{"class":76},"    start",[66,6108,4118],{"class":72},[66,6110,3135],{"class":76},[66,6112,6113,6116,6119],{"class":68,"line":1805},[66,6114,6115],{"class":76},"    end",[66,6117,6118],{"class":72},"--",[66,6120,3135],{"class":76},[66,6122,6123],{"class":68,"line":1817},[66,6124,6125],{"class":76},"   }\n",[66,6127,6128],{"class":68,"line":1822},[66,6129,6130],{"class":758},"   \u002F\u002F输出逆置后的数组\n",[66,6132,6133,6136,6138,6140,6142,6144,6146,6148,6150,6152,6154,6156],{"class":68,"line":1829},[66,6134,6135],{"class":72},"   for",[66,6137,3492],{"class":76},[66,6139,2003],{"class":72},[66,6141,1596],{"class":76},[66,6143,99],{"class":72},[66,6145,2183],{"class":102},[66,6147,4860],{"class":76},[66,6149,413],{"class":72},[66,6151,752],{"class":102},[66,6153,4860],{"class":76},[66,6155,4118],{"class":72},[66,6157,313],{"class":76},[66,6159,6160],{"class":68,"line":3529},[66,6161,6059],{"class":76},[66,6163,6164,6166,6168,6171,6173,6176],{"class":68,"line":3557},[66,6165,3393],{"class":76},[66,6167,3019],{"class":72},[66,6169,6170],{"class":76},"arr[i]",[66,6172,3019],{"class":72},[66,6174,6175],{"class":356},"\" \"",[66,6177,3135],{"class":76},[66,6179,6180],{"class":68,"line":3562},[66,6181,6125],{"class":76},[66,6183,6184,6187,6189,6191],{"class":68,"line":3579},[66,6185,6186],{"class":3793},"   system",[66,6188,348],{"class":76},[66,6190,4134],{"class":356},[66,6192,4543],{"class":76},[66,6194,6195,6198,6200],{"class":68,"line":3584},[66,6196,6197],{"class":72},"   return",[66,6199,962],{"class":102},[66,6201,3135],{"class":76},[66,6203,6204],{"class":68,"line":3589},[66,6205,3407],{"class":76},[2982,6207,6208],{},[34,6209,6210],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[57,6212,6214],{"className":1989,"code":6213,"language":1991,"meta":62,"style":62},"\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",[23,6215,6216,6221,6227,6237,6245,6249,6301,6314,6340,6344,6358,6362,6367,6372,6402,6406,6411,6445,6449,6454,6474,6479,6491,6507,6522,6527,6531,6535,6548,6574,6578,6592,6596,6604],{"__ignoreMap":62},[66,6217,6218],{"class":68,"line":69},[66,6219,6220],{"class":758},"\u002F\u002F冒泡排序,升序\n",[66,6222,6223,6225],{"class":68,"line":80},[66,6224,3779],{"class":72},[66,6226,3782],{"class":356},[66,6228,6229,6231,6233,6235],{"class":68,"line":112},[66,6230,3787],{"class":72},[66,6232,3790],{"class":72},[66,6234,3794],{"class":3793},[66,6236,3135],{"class":76},[66,6238,6239,6241,6243],{"class":68,"line":129},[66,6240,2003],{"class":72},[66,6242,3803],{"class":3793},[66,6244,1253],{"class":76},[66,6246,6247],{"class":68,"line":138},[66,6248,3388],{"class":76},[66,6250,6251,6253,6255,6257,6260,6262,6265,6267,6269,6271,6273,6275,6277,6279,6281,6283,6285,6287,6289,6291,6293,6295,6297,6299],{"class":68,"line":227},[66,6252,3814],{"class":72},[66,6254,5779],{"class":76},[66,6256,2404],{"class":102},[66,6258,6259],{"class":76},"] ",[66,6261,99],{"class":72},[66,6263,6264],{"class":76}," {",[66,6266,1076],{"class":102},[66,6268,2362],{"class":76},[66,6270,795],{"class":102},[66,6272,2362],{"class":76},[66,6274,2379],{"class":102},[66,6276,2362],{"class":76},[66,6278,2183],{"class":102},[66,6280,2362],{"class":76},[66,6282,752],{"class":102},[66,6284,2362],{"class":76},[66,6286,2353],{"class":102},[66,6288,2362],{"class":76},[66,6290,304],{"class":102},[66,6292,2362],{"class":76},[66,6294,1520],{"class":102},[66,6296,2362],{"class":76},[66,6298,2404],{"class":102},[66,6300,5812],{"class":76},[66,6302,6303,6305,6307,6310,6312],{"class":68,"line":236},[66,6304,3393],{"class":76},[66,6306,3019],{"class":72},[66,6308,6309],{"class":356},"\"排序前：\"",[66,6311,3019],{"class":72},[66,6313,3041],{"class":76},[66,6315,6316,6318,6320,6322,6324,6326,6328,6330,6332,6334,6336,6338],{"class":68,"line":241},[66,6317,1083],{"class":72},[66,6319,3492],{"class":76},[66,6321,2003],{"class":72},[66,6323,1596],{"class":76},[66,6325,99],{"class":72},[66,6327,2183],{"class":102},[66,6329,4860],{"class":76},[66,6331,413],{"class":72},[66,6333,2404],{"class":102},[66,6335,4860],{"class":76},[66,6337,4118],{"class":72},[66,6339,313],{"class":76},[66,6341,6342],{"class":68,"line":372},[66,6343,3859],{"class":76},[66,6345,6346,6348,6350,6352,6354,6356],{"class":68,"line":377},[66,6347,5269],{"class":76},[66,6349,3019],{"class":72},[66,6351,6170],{"class":76},[66,6353,3019],{"class":72},[66,6355,6175],{"class":356},[66,6357,3135],{"class":76},[66,6359,6360],{"class":68,"line":392},[66,6361,4013],{"class":76},[66,6363,6364],{"class":68,"line":405},[66,6365,6366],{"class":758},"    \u002F\u002F开始冒泡排序\n",[66,6368,6369],{"class":68,"line":418},[66,6370,6371],{"class":758},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[66,6373,6374,6376,6378,6380,6382,6384,6386,6388,6390,6392,6394,6396,6398,6400],{"class":68,"line":430},[66,6375,1083],{"class":72},[66,6377,3492],{"class":76},[66,6379,2003],{"class":72},[66,6381,1596],{"class":76},[66,6383,99],{"class":72},[66,6385,2183],{"class":102},[66,6387,4860],{"class":76},[66,6389,413],{"class":72},[66,6391,2404],{"class":102},[66,6393,2511],{"class":72},[66,6395,304],{"class":102},[66,6397,4860],{"class":76},[66,6399,4118],{"class":72},[66,6401,313],{"class":76},[66,6403,6404],{"class":68,"line":438},[66,6405,3859],{"class":76},[66,6407,6408],{"class":68,"line":465},[66,6409,6410],{"class":758},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[66,6412,6413,6415,6417,6419,6421,6423,6425,6427,6429,6431,6433,6435,6437,6439,6441,6443],{"class":68,"line":1805},[66,6414,5222],{"class":72},[66,6416,3492],{"class":76},[66,6418,2003],{"class":72},[66,6420,1225],{"class":76},[66,6422,99],{"class":72},[66,6424,2183],{"class":102},[66,6426,5235],{"class":76},[66,6428,413],{"class":72},[66,6430,2404],{"class":102},[66,6432,2511],{"class":72},[66,6434,257],{"class":76},[66,6436,2511],{"class":72},[66,6438,304],{"class":102},[66,6440,5235],{"class":76},[66,6442,4118],{"class":72},[66,6444,313],{"class":76},[66,6446,6447],{"class":68,"line":1817},[66,6448,4334],{"class":76},[66,6450,6451],{"class":68,"line":1822},[66,6452,6453],{"class":758},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[66,6455,6456,6459,6462,6464,6467,6469,6471],{"class":68,"line":1829},[66,6457,6458],{"class":72},"            if",[66,6460,6461],{"class":76},"(arr[j]",[66,6463,386],{"class":72},[66,6465,6466],{"class":76},"arr[j",[66,6468,1184],{"class":72},[66,6470,304],{"class":102},[66,6472,6473],{"class":76},"])\n",[66,6475,6476],{"class":68,"line":3529},[66,6477,6478],{"class":76},"            {\n",[66,6480,6481,6484,6486,6488],{"class":68,"line":3557},[66,6482,6483],{"class":72},"                int",[66,6485,6071],{"class":76},[66,6487,99],{"class":72},[66,6489,6490],{"class":76},"arr[j];\n",[66,6492,6493,6496,6498,6500,6502,6504],{"class":68,"line":3562},[66,6494,6495],{"class":76},"                arr[j]",[66,6497,99],{"class":72},[66,6499,6466],{"class":76},[66,6501,1184],{"class":72},[66,6503,304],{"class":102},[66,6505,6506],{"class":76},"];\n",[66,6508,6509,6512,6514,6516,6518,6520],{"class":68,"line":3579},[66,6510,6511],{"class":76},"                arr[j",[66,6513,1184],{"class":72},[66,6515,304],{"class":102},[66,6517,2917],{"class":76},[66,6519,99],{"class":72},[66,6521,6096],{"class":76},[66,6523,6524],{"class":68,"line":3584},[66,6525,6526],{"class":76},"            }\n",[66,6528,6529],{"class":68,"line":3589},[66,6530,4353],{"class":76},[66,6532,6533],{"class":68,"line":3594},[66,6534,4013],{"class":76},[66,6536,6537,6539,6541,6544,6546],{"class":68,"line":3608},[66,6538,3393],{"class":76},[66,6540,3019],{"class":72},[66,6542,6543],{"class":356},"\"排序后：\"",[66,6545,3019],{"class":72},[66,6547,3041],{"class":76},[66,6549,6550,6552,6554,6556,6558,6560,6562,6564,6566,6568,6570,6572],{"class":68,"line":3613},[66,6551,1083],{"class":72},[66,6553,3492],{"class":76},[66,6555,2003],{"class":72},[66,6557,1596],{"class":76},[66,6559,99],{"class":72},[66,6561,2183],{"class":102},[66,6563,4860],{"class":76},[66,6565,413],{"class":72},[66,6567,2404],{"class":102},[66,6569,4860],{"class":76},[66,6571,4118],{"class":72},[66,6573,313],{"class":76},[66,6575,6576],{"class":68,"line":4401},[66,6577,3859],{"class":76},[66,6579,6580,6582,6584,6586,6588,6590],{"class":68,"line":4415},[66,6581,5269],{"class":76},[66,6583,3019],{"class":72},[66,6585,6170],{"class":76},[66,6587,3019],{"class":72},[66,6589,6175],{"class":356},[66,6591,3135],{"class":76},[66,6593,6594],{"class":68,"line":4423},[66,6595,4013],{"class":76},[66,6597,6598,6600,6602],{"class":68,"line":4428},[66,6599,5907],{"class":72},[66,6601,962],{"class":102},[66,6603,3135],{"class":76},[66,6605,6606],{"class":68,"line":4434},[66,6607,3407],{"class":76},[484,6609,6611],{"id":6610},"_172二维数组","1.7.2二维数组",[31,6613,6614],{},[34,6615,6616],{},"二维数组的四种定义方式",[2129,6618,6619,6628],{},[2132,6620,6621],{},[2135,6622,6623,6626],{},[2138,6624,6625],{},"序号",[2138,6627,5598],{},[2176,6629,6630,6640,6649,6658,6667],{},[2135,6631,6632,6634],{},[2181,6633,304],{},[2181,6635,6636,6637,2051],{},"数据类型 数组名[行数]",[66,6638,6639],{},"列数",[2135,6641,6642,6644],{},[2181,6643,795],{},[2181,6645,6636,6646,6648],{},[66,6647,6639],{},"={ {数据1,数据2}，{数据3，数据4}... }",[2135,6650,6651,6653],{},[2181,6652,1520],{},[2181,6654,6636,6655,6657],{},[66,6656,6639],{},"={数据1,数据2,数据3...}",[2135,6659,6660,6662],{},[2181,6661,1076],{},[2181,6663,6664,6665,6657],{},"数据类型 数组名[]",[66,6666,6639],{},[2135,6668,6669,6672],{},[2181,6670,6671],{},"注意：不能只省略列数",[2181,6673],{},[31,6675,6676],{"start":80},[34,6677,6678],{},"二维数组数组名",[2982,6680,6681,6684],{},[34,6682,6683],{},"1.查看二维数组所占内存空间",[34,6685,6686],{},"2.获取二维数组首地址",[19,6688,6689],{},"已知二维数组，求二维数组的行数与列数",[57,6691,6693],{"className":1989,"code":6692,"language":1991,"meta":62,"style":62},"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",[23,6694,6695,6703,6707,6725,6729,6747,6763,6768,6793,6826],{"__ignoreMap":62},[66,6696,6697,6699,6701],{"class":68,"line":69},[66,6698,2003],{"class":72},[66,6700,3803],{"class":3793},[66,6702,1253],{"class":76},[66,6704,6705],{"class":68,"line":80},[66,6706,3388],{"class":76},[66,6708,6709,6711,6713,6715,6718,6720,6722],{"class":68,"line":112},[66,6710,3814],{"class":72},[66,6712,5779],{"class":76},[66,6714,795],{"class":102},[66,6716,6717],{"class":76},"][",[66,6719,1520],{"class":102},[66,6721,2917],{"class":76},[66,6723,6724],{"class":72},"=\n",[66,6726,6727],{"class":68,"line":129},[66,6728,3859],{"class":76},[66,6730,6731,6734,6736,6738,6740,6742,6744],{"class":68,"line":138},[66,6732,6733],{"class":76},"        {",[66,6735,304],{"class":102},[66,6737,2362],{"class":76},[66,6739,795],{"class":102},[66,6741,2362],{"class":76},[66,6743,1520],{"class":102},[66,6745,6746],{"class":76},"},\n",[66,6748,6749,6751,6753,6755,6757,6759,6761],{"class":68,"line":227},[66,6750,6733],{"class":76},[66,6752,1076],{"class":102},[66,6754,2362],{"class":76},[66,6756,752],{"class":102},[66,6758,2362],{"class":76},[66,6760,519],{"class":102},[66,6762,3407],{"class":76},[66,6764,6765],{"class":68,"line":236},[66,6766,6767],{"class":76},"    };\n",[66,6769,6770,6772,6774,6777,6779,6781,6783,6785,6787,6789,6791],{"class":68,"line":241},[66,6771,3393],{"class":76},[66,6773,3019],{"class":72},[66,6775,6776],{"class":356},"\"二维数组的行数\"",[66,6778,3214],{"class":72},[66,6780,6022],{"class":76},[66,6782,6025],{"class":72},[66,6784,5668],{"class":76},[66,6786,2183],{"class":102},[66,6788,6032],{"class":76},[66,6790,3019],{"class":72},[66,6792,3041],{"class":76},[66,6794,6795,6797,6799,6802,6804,6806,6808,6810,6812,6814,6816,6818,6820,6822,6824],{"class":68,"line":372},[66,6796,3393],{"class":76},[66,6798,3019],{"class":72},[66,6800,6801],{"class":356},"\"二维数组的列数\"",[66,6803,3214],{"class":72},[66,6805,5668],{"class":76},[66,6807,2183],{"class":102},[66,6809,6032],{"class":76},[66,6811,6025],{"class":72},[66,6813,5668],{"class":76},[66,6815,2183],{"class":102},[66,6817,6717],{"class":76},[66,6819,2183],{"class":102},[66,6821,6032],{"class":76},[66,6823,3019],{"class":72},[66,6825,3041],{"class":76},[66,6827,6828],{"class":68,"line":377},[66,6829,3407],{"class":76},[19,6831,6832],{},"查看二维数组首地址",[57,6834,6836],{"className":1989,"code":6835,"language":1991,"meta":62,"style":62},"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",[23,6837,6838,6855,6881,6906],{"__ignoreMap":62},[66,6839,6840,6842,6844,6847,6849,6851,6853],{"class":68,"line":69},[66,6841,3211],{"class":76},[66,6843,3019],{"class":72},[66,6845,6846],{"class":356},"\"二维数组首地址：\"",[66,6848,3019],{"class":72},[66,6850,5697],{"class":76},[66,6852,3019],{"class":72},[66,6854,3041],{"class":76},[66,6856,6857,6859,6861,6864,6866,6868,6870,6873,6875,6877,6879],{"class":68,"line":80},[66,6858,3211],{"class":76},[66,6860,3019],{"class":72},[66,6862,6863],{"class":356},"\"二维数组第一行的首地址：\"",[66,6865,3019],{"class":72},[66,6867,348],{"class":76},[66,6869,2003],{"class":72},[66,6871,6872],{"class":76},")arr[",[66,6874,2183],{"class":102},[66,6876,2917],{"class":76},[66,6878,3019],{"class":72},[66,6880,3041],{"class":76},[66,6882,6883,6885,6887,6890,6892,6894,6896,6898,6900,6902,6904],{"class":68,"line":112},[66,6884,3211],{"class":76},[66,6886,3019],{"class":72},[66,6888,6889],{"class":356},"\"二维数组第二行的首地址：\"",[66,6891,3019],{"class":72},[66,6893,348],{"class":76},[66,6895,2003],{"class":72},[66,6897,6872],{"class":76},[66,6899,304],{"class":102},[66,6901,2917],{"class":76},[66,6903,3019],{"class":72},[66,6905,3041],{"class":76},[66,6907,6908,6910,6912,6915,6917,6919,6921,6923,6925,6927,6929,6931,6933,6935,6937,6939],{"class":68,"line":129},[66,6909,3211],{"class":76},[66,6911,3019],{"class":72},[66,6913,6914],{"class":356},"\"二维数组第一个元素的首地址:\"",[66,6916,3019],{"class":72},[66,6918,348],{"class":76},[66,6920,2003],{"class":72},[66,6922,2413],{"class":76},[66,6924,2337],{"class":72},[66,6926,5723],{"class":76},[66,6928,2183],{"class":102},[66,6930,6717],{"class":76},[66,6932,2183],{"class":102},[66,6934,2917],{"class":76},[66,6936,3019],{"class":72},[66,6938,3083],{"class":76},[66,6940,6941],{"class":758},"\u002F\u002F对于数，要加取址符\n",[1903,6943,6944],{},"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":62,"searchDepth":80,"depth":80,"links":6946},[6947,6948,6949,6957,6958,6964,6969],{"id":1944,"depth":80,"text":1945},{"id":1951,"depth":80,"text":1952},{"id":1966,"depth":80,"text":1967,"children":6950},[6951,6952,6953,6954,6955,6956],{"id":1970,"depth":112,"text":1971},{"id":2015,"depth":112,"text":2016},{"id":2078,"depth":112,"text":2079},{"id":3000,"depth":112,"text":3001},{"id":3089,"depth":112,"text":3090},{"id":3185,"depth":112,"text":3186},{"id":3227,"depth":80,"text":3228},{"id":3295,"depth":80,"text":3296,"children":6959},[6960,6961,6962,6963],{"id":3299,"depth":112,"text":3300},{"id":3321,"depth":112,"text":3322},{"id":3330,"depth":112,"text":3331},{"id":3339,"depth":112,"text":3340},{"id":3348,"depth":80,"text":3349,"children":6965},[6966,6967,6968],{"id":3352,"depth":112,"text":3353},{"id":4031,"depth":112,"text":4032},{"id":5439,"depth":112,"text":5440},{"id":5579,"depth":80,"text":5580,"children":6970},[6971,6972],{"id":5583,"depth":112,"text":5584},{"id":6610,"depth":112,"text":6611},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":1936,"description":62},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":6979,"title":6980,"body":6981,"description":62,"extension":1927,"meta":8076,"navigation":108,"path":8077,"seo":8078,"stem":8079,"__hash__":8080},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":6982,"toc":8068},[6983,6986,6990,6997,7003,7006,7071,7075,7078,7154,7158,7161,7164,7167,7380,7384,7389,7453,7458,7525,7530,7620,7623,7728,7732,7735,7741,7885,7889,7892,7906,7909,7954,7957,8065],[10,6984,6980],{"id":6985},"_2函数",[14,6987,6989],{"id":6988},"_21函数概述","2.1函数概述",[31,6991,6992,6995],{},[34,6993,6994],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[34,6996,55],{},[57,6998,7001],{"className":6999,"code":7000,"language":555,"meta":62},[553],"返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n",[23,7002,7000],{"__ignoreMap":62},[19,7004,7005],{},"小案例",[57,7007,7009],{"className":1989,"code":7008,"language":1991,"meta":62,"style":62},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[23,7010,7011,7016,7039,7043,7060,7067],{"__ignoreMap":62},[66,7012,7013],{"class":68,"line":69},[66,7014,7015],{"class":758},"\u002F\u002Fnum1,num2形参\n",[66,7017,7018,7020,7023,7025,7027,7030,7032,7034,7037],{"class":68,"line":80},[66,7019,2003],{"class":72},[66,7021,7022],{"class":3793}," add",[66,7024,348],{"class":76},[66,7026,2003],{"class":72},[66,7028,7029],{"class":1234}," num1",[66,7031,2362],{"class":76},[66,7033,2003],{"class":72},[66,7035,7036],{"class":1234}," num2",[66,7038,313],{"class":76},[66,7040,7041],{"class":68,"line":112},[66,7042,3388],{"class":76},[66,7044,7045,7047,7050,7052,7055,7057],{"class":68,"line":129},[66,7046,3814],{"class":72},[66,7048,7049],{"class":76}," sum",[66,7051,99],{"class":72},[66,7053,7054],{"class":76},"num1",[66,7056,1184],{"class":72},[66,7058,7059],{"class":76},"num2;\n",[66,7061,7062,7064],{"class":68,"line":138},[66,7063,5907],{"class":72},[66,7065,7066],{"class":76}," sum;\n",[66,7068,7069],{"class":68,"line":227},[66,7070,3407],{"class":76},[14,7072,7074],{"id":7073},"_22函数调用","2.2函数调用",[19,7076,7077],{},"调用刚刚写的求和函数",[57,7079,7081],{"className":1989,"code":7080,"language":1991,"meta":62,"style":62},"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",[23,7082,7083,7091,7095,7100,7112,7124,7133,7138,7150],{"__ignoreMap":62},[66,7084,7085,7087,7089],{"class":68,"line":69},[66,7086,2003],{"class":72},[66,7088,3803],{"class":3793},[66,7090,1253],{"class":76},[66,7092,7093],{"class":68,"line":80},[66,7094,3388],{"class":76},[66,7096,7097],{"class":68,"line":112},[66,7098,7099],{"class":758},"    \u002F\u002Fa,b实参\n",[66,7101,7102,7104,7106,7108,7110],{"class":68,"line":129},[66,7103,3814],{"class":72},[66,7105,3240],{"class":76},[66,7107,99],{"class":72},[66,7109,2183],{"class":102},[66,7111,3135],{"class":76},[66,7113,7114,7116,7118,7120,7122],{"class":68,"line":138},[66,7115,3814],{"class":72},[66,7117,4657],{"class":76},[66,7119,99],{"class":72},[66,7121,2183],{"class":102},[66,7123,3135],{"class":76},[66,7125,7126,7128,7130],{"class":68,"line":227},[66,7127,3841],{"class":76},[66,7129,3271],{"class":72},[66,7131,7132],{"class":76},"a,b;\n",[66,7134,7135],{"class":68,"line":236},[66,7136,7137],{"class":758},"    \u002F\u002F调用函数时，实参值传给了形参\n",[66,7139,7140,7142,7144,7147],{"class":68,"line":241},[66,7141,3393],{"class":76},[66,7143,3019],{"class":72},[66,7145,7146],{"class":3793},"add",[66,7148,7149],{"class":76},"(a,b);\n",[66,7151,7152],{"class":68,"line":372},[66,7153,3407],{"class":76},[14,7155,7157],{"id":7156},"_23值传递","2.3值传递",[19,7159,7160],{},"值传递就是函数调用时实参将数值传给形参",[19,7162,7163],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,7165,7166],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[57,7168,7170],{"className":1989,"code":7169,"language":1991,"meta":62,"style":62},"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",[23,7171,7172,7194,7198,7211,7228,7246,7257,7266,7275,7288,7304,7320,7329,7333,7341,7345,7357,7369,7376],{"__ignoreMap":62},[66,7173,7174,7177,7180,7182,7184,7186,7188,7190,7192],{"class":68,"line":69},[66,7175,7176],{"class":72},"void",[66,7178,7179],{"class":3793}," swap",[66,7181,348],{"class":76},[66,7183,2003],{"class":72},[66,7185,7029],{"class":1234},[66,7187,2362],{"class":76},[66,7189,2003],{"class":72},[66,7191,7036],{"class":1234},[66,7193,313],{"class":76},[66,7195,7196],{"class":68,"line":80},[66,7197,3388],{"class":76},[66,7199,7200,7202,7204,7207,7209],{"class":68,"line":112},[66,7201,3393],{"class":76},[66,7203,3019],{"class":72},[66,7205,7206],{"class":356},"\"交换前：\"",[66,7208,3019],{"class":72},[66,7210,3041],{"class":76},[66,7212,7213,7215,7217,7220,7222,7224,7226],{"class":68,"line":129},[66,7214,3393],{"class":76},[66,7216,3019],{"class":72},[66,7218,7219],{"class":356},"\"num1=\"",[66,7221,3019],{"class":72},[66,7223,7054],{"class":76},[66,7225,3019],{"class":72},[66,7227,3041],{"class":76},[66,7229,7230,7232,7234,7237,7239,7242,7244],{"class":68,"line":138},[66,7231,3393],{"class":76},[66,7233,3019],{"class":72},[66,7235,7236],{"class":356},"\"num2=\"",[66,7238,3019],{"class":72},[66,7240,7241],{"class":76},"num2",[66,7243,3019],{"class":72},[66,7245,3041],{"class":76},[66,7247,7248,7250,7252,7254],{"class":68,"line":227},[66,7249,3814],{"class":72},[66,7251,6071],{"class":76},[66,7253,99],{"class":72},[66,7255,7256],{"class":76},"num1;\n",[66,7258,7259,7262,7264],{"class":68,"line":236},[66,7260,7261],{"class":76},"    num1",[66,7263,99],{"class":72},[66,7265,7059],{"class":76},[66,7267,7268,7271,7273],{"class":68,"line":241},[66,7269,7270],{"class":76},"    num2",[66,7272,99],{"class":72},[66,7274,6096],{"class":76},[66,7276,7277,7279,7281,7284,7286],{"class":68,"line":372},[66,7278,3393],{"class":76},[66,7280,3019],{"class":72},[66,7282,7283],{"class":356},"\"交换后：\"",[66,7285,3019],{"class":72},[66,7287,3041],{"class":76},[66,7289,7290,7292,7294,7296,7298,7300,7302],{"class":68,"line":377},[66,7291,3393],{"class":76},[66,7293,3019],{"class":72},[66,7295,7219],{"class":356},[66,7297,3019],{"class":72},[66,7299,7054],{"class":76},[66,7301,3019],{"class":72},[66,7303,3041],{"class":76},[66,7305,7306,7308,7310,7312,7314,7316,7318],{"class":68,"line":392},[66,7307,3393],{"class":76},[66,7309,3019],{"class":72},[66,7311,7236],{"class":356},[66,7313,3019],{"class":72},[66,7315,7241],{"class":76},[66,7317,3019],{"class":72},[66,7319,3041],{"class":76},[66,7321,7322,7324,7326],{"class":68,"line":405},[66,7323,5907],{"class":72},[66,7325,2051],{"class":76},[66,7327,7328],{"class":758},"\u002F\u002F或者不写\n",[66,7330,7331],{"class":68,"line":418},[66,7332,3407],{"class":76},[66,7334,7335,7337,7339],{"class":68,"line":430},[66,7336,2003],{"class":72},[66,7338,3803],{"class":3793},[66,7340,1253],{"class":76},[66,7342,7343],{"class":68,"line":438},[66,7344,3388],{"class":76},[66,7346,7347,7349,7351,7353,7355],{"class":68,"line":465},[66,7348,3814],{"class":72},[66,7350,3240],{"class":76},[66,7352,99],{"class":72},[66,7354,790],{"class":102},[66,7356,3135],{"class":76},[66,7358,7359,7361,7363,7365,7367],{"class":68,"line":1805},[66,7360,3814],{"class":72},[66,7362,4657],{"class":76},[66,7364,99],{"class":72},[66,7366,2679],{"class":102},[66,7368,3135],{"class":76},[66,7370,7371,7374],{"class":68,"line":1817},[66,7372,7373],{"class":3793},"    swap",[66,7375,7149],{"class":76},[66,7377,7378],{"class":68,"line":1822},[66,7379,3407],{"class":76},[14,7381,7383],{"id":7382},"_24函数的常见形式","2.4函数的常见形式",[31,7385,7386],{},[34,7387,7388],{},"无参无返",[57,7390,7392],{"className":1989,"code":7391,"language":1991,"meta":62,"style":62},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[23,7393,7394,7403,7407,7420,7424,7432,7436,7441,7449],{"__ignoreMap":62},[66,7395,7396,7398,7401],{"class":68,"line":69},[66,7397,7176],{"class":72},[66,7399,7400],{"class":3793}," test01",[66,7402,1253],{"class":76},[66,7404,7405],{"class":68,"line":80},[66,7406,3388],{"class":76},[66,7408,7409,7411,7413,7416,7418],{"class":68,"line":112},[66,7410,3393],{"class":76},[66,7412,3019],{"class":72},[66,7414,7415],{"class":356},"\"你好\"",[66,7417,3019],{"class":72},[66,7419,3041],{"class":76},[66,7421,7422],{"class":68,"line":129},[66,7423,3407],{"class":76},[66,7425,7426,7428,7430],{"class":68,"line":138},[66,7427,2003],{"class":72},[66,7429,3803],{"class":3793},[66,7431,1253],{"class":76},[66,7433,7434],{"class":68,"line":227},[66,7435,3388],{"class":76},[66,7437,7438],{"class":68,"line":236},[66,7439,7440],{"class":758},"    \u002F\u002F函数调用\n",[66,7442,7443,7446],{"class":68,"line":241},[66,7444,7445],{"class":3793},"    test01",[66,7447,7448],{"class":76},"();\n",[66,7450,7451],{"class":68,"line":372},[66,7452,3407],{"class":76},[31,7454,7455],{"start":80},[34,7456,7457],{},"有参无返",[57,7459,7461],{"className":1989,"code":7460,"language":1991,"meta":62,"style":62},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[23,7462,7463,7478,7482,7494,7498,7506,7510,7521],{"__ignoreMap":62},[66,7464,7465,7467,7470,7472,7474,7476],{"class":68,"line":69},[66,7466,7176],{"class":72},[66,7468,7469],{"class":3793}," test02",[66,7471,348],{"class":76},[66,7473,2003],{"class":72},[66,7475,3240],{"class":1234},[66,7477,313],{"class":76},[66,7479,7480],{"class":68,"line":80},[66,7481,3388],{"class":76},[66,7483,7484,7486,7488,7490,7492],{"class":68,"line":112},[66,7485,3393],{"class":76},[66,7487,3019],{"class":72},[66,7489,7415],{"class":356},[66,7491,3019],{"class":72},[66,7493,3041],{"class":76},[66,7495,7496],{"class":68,"line":129},[66,7497,3407],{"class":76},[66,7499,7500,7502,7504],{"class":68,"line":138},[66,7501,2003],{"class":72},[66,7503,3803],{"class":3793},[66,7505,1253],{"class":76},[66,7507,7508],{"class":68,"line":227},[66,7509,3388],{"class":76},[66,7511,7512,7515,7517,7519],{"class":68,"line":236},[66,7513,7514],{"class":3793},"    test02",[66,7516,348],{"class":76},[66,7518,310],{"class":102},[66,7520,4543],{"class":76},[66,7522,7523],{"class":68,"line":241},[66,7524,3407],{"class":76},[31,7526,7527],{"start":112},[34,7528,7529],{},"无参有返",[57,7531,7533],{"className":1989,"code":7532,"language":1991,"meta":62,"style":62},"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",[23,7534,7535,7544,7548,7560,7568,7572,7580,7584,7597,7616],{"__ignoreMap":62},[66,7536,7537,7539,7542],{"class":68,"line":69},[66,7538,2003],{"class":72},[66,7540,7541],{"class":3793}," test03",[66,7543,1253],{"class":76},[66,7545,7546],{"class":68,"line":80},[66,7547,3388],{"class":76},[66,7549,7550,7552,7554,7556,7558],{"class":68,"line":112},[66,7551,3393],{"class":76},[66,7553,3019],{"class":72},[66,7555,7415],{"class":356},[66,7557,3019],{"class":72},[66,7559,3041],{"class":76},[66,7561,7562,7564,7566],{"class":68,"line":129},[66,7563,5907],{"class":72},[66,7565,212],{"class":102},[66,7567,3135],{"class":76},[66,7569,7570],{"class":68,"line":138},[66,7571,3407],{"class":76},[66,7573,7574,7576,7578],{"class":68,"line":227},[66,7575,2003],{"class":72},[66,7577,3803],{"class":3793},[66,7579,1253],{"class":76},[66,7581,7582],{"class":68,"line":236},[66,7583,3388],{"class":76},[66,7585,7586,7588,7590,7592,7595],{"class":68,"line":241},[66,7587,3814],{"class":72},[66,7589,7029],{"class":76},[66,7591,99],{"class":72},[66,7593,7594],{"class":3793},"test03",[66,7596,7448],{"class":76},[66,7598,7599,7601,7603,7605,7607,7609,7611,7613],{"class":68,"line":372},[66,7600,3393],{"class":76},[66,7602,3019],{"class":72},[66,7604,7219],{"class":356},[66,7606,3019],{"class":72},[66,7608,7054],{"class":76},[66,7610,3019],{"class":72},[66,7612,3083],{"class":76},[66,7614,7615],{"class":758}," \u002F\u002F100\n",[66,7617,7618],{"class":68,"line":377},[66,7619,3407],{"class":76},[19,7621,7622],{},"4.有参有返",[57,7624,7626],{"className":1989,"code":7625,"language":1991,"meta":62,"style":62},"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",[23,7627,7628,7643,7647,7660,7666,7670,7679,7683,7695,7709,7724],{"__ignoreMap":62},[66,7629,7630,7632,7635,7637,7639,7641],{"class":68,"line":69},[66,7631,2003],{"class":72},[66,7633,7634],{"class":3793}," test04",[66,7636,348],{"class":76},[66,7638,2003],{"class":72},[66,7640,3240],{"class":1234},[66,7642,313],{"class":76},[66,7644,7645],{"class":68,"line":80},[66,7646,3388],{"class":76},[66,7648,7649,7651,7653,7656,7658],{"class":68,"line":112},[66,7650,3393],{"class":76},[66,7652,3019],{"class":72},[66,7654,7655],{"class":356},"\"hello\"",[66,7657,3019],{"class":72},[66,7659,3041],{"class":76},[66,7661,7662,7664],{"class":68,"line":129},[66,7663,5907],{"class":72},[66,7665,3274],{"class":76},[66,7667,7668],{"class":68,"line":138},[66,7669,3407],{"class":76},[66,7671,7672,7674,7677],{"class":68,"line":227},[66,7673,2003],{"class":72},[66,7675,7676],{"class":3793}," mian",[66,7678,1253],{"class":76},[66,7680,7681],{"class":68,"line":236},[66,7682,3388],{"class":76},[66,7684,7685,7687,7689,7691,7693],{"class":68,"line":241},[66,7686,3814],{"class":72},[66,7688,4657],{"class":76},[66,7690,99],{"class":72},[66,7692,304],{"class":102},[66,7694,3135],{"class":76},[66,7696,7697,7699,7701,7703,7706],{"class":68,"line":372},[66,7698,3814],{"class":72},[66,7700,4673],{"class":76},[66,7702,99],{"class":72},[66,7704,7705],{"class":3793},"test04",[66,7707,7708],{"class":76},"(b);\n",[66,7710,7711,7713,7715,7717,7719,7721],{"class":68,"line":377},[66,7712,3393],{"class":76},[66,7714,3019],{"class":72},[66,7716,2278],{"class":76},[66,7718,3019],{"class":72},[66,7720,3083],{"class":76},[66,7722,7723],{"class":758}," \u002F\u002F1\n",[66,7725,7726],{"class":68,"line":392},[66,7727,3407],{"class":76},[14,7729,7731],{"id":7730},"_25函数的声明","2.5函数的声明",[19,7733,7734],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,7736,7737,7738],{},"函数的",[2141,7739,7740],{},"声明可以多次，但是函数的定义只能有一次",[57,7742,7744],{"className":1989,"code":7743,"language":1991,"meta":62,"style":62},"\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",[23,7745,7746,7751,7756,7781,7790,7794,7806,7818,7834,7838,7858,7862,7881],{"__ignoreMap":62},[66,7747,7748],{"class":68,"line":69},[66,7749,7750],{"class":758},"\u002F\u002F函数声明\n",[66,7752,7753],{"class":68,"line":80},[66,7754,7755],{"class":758},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[66,7757,7758,7760,7763,7765,7767,7769,7771,7773,7775,7778],{"class":68,"line":112},[66,7759,2003],{"class":72},[66,7761,7762],{"class":3793}," max",[66,7764,348],{"class":76},[66,7766,2003],{"class":72},[66,7768,3240],{"class":1234},[66,7770,2362],{"class":76},[66,7772,2003],{"class":72},[66,7774,4657],{"class":1234},[66,7776,7777],{"class":76},");",[66,7779,7780],{"class":758},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[66,7782,7783,7785,7787],{"class":68,"line":129},[66,7784,2003],{"class":72},[66,7786,3803],{"class":3793},[66,7788,7789],{"class":76},"() \n",[66,7791,7792],{"class":68,"line":138},[66,7793,3388],{"class":76},[66,7795,7796,7798,7800,7802,7804],{"class":68,"line":227},[66,7797,3814],{"class":72},[66,7799,3240],{"class":76},[66,7801,99],{"class":72},[66,7803,790],{"class":102},[66,7805,3135],{"class":76},[66,7807,7808,7810,7812,7814,7816],{"class":68,"line":236},[66,7809,3814],{"class":72},[66,7811,4657],{"class":76},[66,7813,99],{"class":72},[66,7815,2679],{"class":102},[66,7817,3135],{"class":76},[66,7819,7820,7822,7824,7827,7830,7832],{"class":68,"line":241},[66,7821,3393],{"class":76},[66,7823,3019],{"class":72},[66,7825,7826],{"class":3793},"max",[66,7828,7829],{"class":76},"(a,b)",[66,7831,3019],{"class":72},[66,7833,3041],{"class":76},[66,7835,7836],{"class":68,"line":372},[66,7837,3407],{"class":76},[66,7839,7840,7842,7844,7846,7848,7850,7852,7854,7856],{"class":68,"line":377},[66,7841,2003],{"class":72},[66,7843,7762],{"class":3793},[66,7845,348],{"class":76},[66,7847,2003],{"class":72},[66,7849,3240],{"class":1234},[66,7851,2362],{"class":76},[66,7853,2003],{"class":72},[66,7855,4657],{"class":1234},[66,7857,313],{"class":76},[66,7859,7860],{"class":68,"line":392},[66,7861,3388],{"class":76},[66,7863,7864,7866,7868,7870,7872,7874,7876,7878],{"class":68,"line":405},[66,7865,5907],{"class":72},[66,7867,3240],{"class":76},[66,7869,386],{"class":72},[66,7871,2253],{"class":76},[66,7873,2961],{"class":72},[66,7875,2229],{"class":76},[66,7877,2838],{"class":72},[66,7879,7880],{"class":76},"b;\n",[66,7882,7883],{"class":68,"line":418},[66,7884,3407],{"class":76},[14,7886,7888],{"id":7887},"_26函数的分文件编写","2.6函数的分文件编写",[19,7890,7891],{},"4个步骤：",[2982,7893,7894,7897,7900,7903],{},[34,7895,7896],{},"1.创建后缀名为.h的头文件",[34,7898,7899],{},"2.创建后缀名为.cpp的源文件",[34,7901,7902],{},"3.在头文件中写函数的定义",[34,7904,7905],{},"4.在源文件中写函数的定义\n示例：",[19,7907,7908],{},"头文件：swap.h",[57,7910,7912],{"className":1989,"code":7911,"language":1991,"meta":62,"style":62},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[23,7913,7914,7920,7930,7934],{"__ignoreMap":62},[66,7915,7916,7918],{"class":68,"line":69},[66,7917,3779],{"class":72},[66,7919,3782],{"class":356},[66,7921,7922,7924,7926,7928],{"class":68,"line":80},[66,7923,3787],{"class":72},[66,7925,3790],{"class":72},[66,7927,3794],{"class":3793},[66,7929,3135],{"class":76},[66,7931,7932],{"class":68,"line":112},[66,7933,7750],{"class":758},[66,7935,7936,7938,7940,7942,7944,7946,7948,7950,7952],{"class":68,"line":129},[66,7937,7176],{"class":72},[66,7939,7179],{"class":3793},[66,7941,348],{"class":76},[66,7943,2003],{"class":72},[66,7945,3240],{"class":1234},[66,7947,2362],{"class":76},[66,7949,2003],{"class":72},[66,7951,4657],{"class":1234},[66,7953,4543],{"class":76},[19,7955,7956],{},"源文件：swap.cpp",[57,7958,7960],{"className":1989,"code":7959,"language":1991,"meta":62,"style":62},"#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",[23,7961,7962,7969,7974,7994,7998,8009,8018,8027,8044,8061],{"__ignoreMap":62},[66,7963,7964,7966],{"class":68,"line":69},[66,7965,3779],{"class":72},[66,7967,7968],{"class":356}," \"swap.h\"\n",[66,7970,7971],{"class":68,"line":80},[66,7972,7973],{"class":758},"\u002F\u002F函数的定义\n",[66,7975,7976,7978,7980,7982,7984,7986,7988,7990,7992],{"class":68,"line":112},[66,7977,7176],{"class":72},[66,7979,7179],{"class":3793},[66,7981,348],{"class":76},[66,7983,2003],{"class":72},[66,7985,3240],{"class":1234},[66,7987,2362],{"class":76},[66,7989,2003],{"class":72},[66,7991,4657],{"class":1234},[66,7993,313],{"class":76},[66,7995,7996],{"class":68,"line":129},[66,7997,3388],{"class":76},[66,7999,8000,8002,8004,8006],{"class":68,"line":138},[66,8001,3814],{"class":72},[66,8003,6071],{"class":76},[66,8005,99],{"class":72},[66,8007,8008],{"class":76},"a;\n",[66,8010,8011,8014,8016],{"class":68,"line":227},[66,8012,8013],{"class":76},"    a",[66,8015,99],{"class":72},[66,8017,7880],{"class":76},[66,8019,8020,8023,8025],{"class":68,"line":236},[66,8021,8022],{"class":76},"    b",[66,8024,99],{"class":72},[66,8026,6096],{"class":76},[66,8028,8029,8031,8033,8036,8038,8040,8042],{"class":68,"line":241},[66,8030,3393],{"class":76},[66,8032,3019],{"class":72},[66,8034,8035],{"class":356},"\"a=\"",[66,8037,3019],{"class":72},[66,8039,2229],{"class":76},[66,8041,3019],{"class":72},[66,8043,3041],{"class":76},[66,8045,8046,8048,8050,8053,8055,8057,8059],{"class":68,"line":372},[66,8047,3393],{"class":76},[66,8049,3019],{"class":72},[66,8051,8052],{"class":356},"\"b=\"",[66,8054,3019],{"class":72},[66,8056,2253],{"class":76},[66,8058,3019],{"class":72},[66,8060,3041],{"class":76},[66,8062,8063],{"class":68,"line":377},[66,8064,3407],{"class":76},[1903,8066,8067],{},"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":62,"searchDepth":80,"depth":80,"links":8069},[8070,8071,8072,8073,8074,8075],{"id":6988,"depth":80,"text":6989},{"id":7073,"depth":80,"text":7074},{"id":7156,"depth":80,"text":7157},{"id":7382,"depth":80,"text":7383},{"id":7730,"depth":80,"text":7731},{"id":7887,"depth":80,"text":7888},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":6980,"description":62},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":8082,"title":8083,"body":8084,"description":8091,"extension":1927,"meta":9496,"navigation":108,"path":9497,"seo":9498,"stem":9499,"__hash__":9500},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":8085,"toc":9486},[8086,8089,8092,8096,8258,8262,8265,8268,8271,8274,8414,8418,8421,8424,8427,8492,8496,8501,8568,8571,8575,8578,8589,8594,8614,8617,8622,8641,8644,8648,8667,8670,8674,8909,8913,8916,8919,8922,9084,9087,9091,9094,9100,9483],[10,8087,8083],{"id":8088},"_3指针",[19,8090,8091],{},"通过指针保存一个地址，指针就是个地址",[14,8093,8095],{"id":8094},"_31定义指针","3.1定义指针",[57,8097,8099],{"className":1989,"code":8098,"language":1991,"meta":62,"style":62},"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",[23,8100,8101,8109,8113,8118,8130,8135,8143,8153,8171,8191,8195,8200,8205,8210,8224,8240,8254],{"__ignoreMap":62},[66,8102,8103,8105,8107],{"class":68,"line":69},[66,8104,2003],{"class":72},[66,8106,3803],{"class":3793},[66,8108,1253],{"class":76},[66,8110,8111],{"class":68,"line":80},[66,8112,3388],{"class":76},[66,8114,8115],{"class":68,"line":112},[66,8116,8117],{"class":758},"    \u002F\u002F1.定义指针\n",[66,8119,8120,8122,8124,8126,8128],{"class":68,"line":129},[66,8121,3814],{"class":72},[66,8123,3240],{"class":76},[66,8125,99],{"class":72},[66,8127,790],{"class":102},[66,8129,3135],{"class":76},[66,8131,8132],{"class":68,"line":138},[66,8133,8134],{"class":758},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[66,8136,8137,8140],{"class":68,"line":227},[66,8138,8139],{"class":72},"    int*",[66,8141,8142],{"class":76},"p;\n",[66,8144,8145,8148,8151],{"class":68,"line":236},[66,8146,8147],{"class":76},"    p",[66,8149,8150],{"class":72},"=&",[66,8152,8008],{"class":76},[66,8154,8155,8157,8159,8162,8165,8167,8169],{"class":68,"line":241},[66,8156,3393],{"class":76},[66,8158,3019],{"class":72},[66,8160,8161],{"class":356},"\"a的地址为：\"",[66,8163,8164],{"class":72},"\u003C\u003C&",[66,8166,2229],{"class":76},[66,8168,3019],{"class":72},[66,8170,3041],{"class":76},[66,8172,8173,8175,8177,8180,8182,8184,8186,8188],{"class":68,"line":372},[66,8174,3393],{"class":76},[66,8176,3019],{"class":72},[66,8178,8179],{"class":356},"\"指针p为：\"",[66,8181,3019],{"class":72},[66,8183,19],{"class":76},[66,8185,3019],{"class":72},[66,8187,3083],{"class":76},[66,8189,8190],{"class":758},"\u002F\u002F指针p表示的就是a的地址\n",[66,8192,8193],{"class":68,"line":377},[66,8194,109],{"emptyLinePlaceholder":108},[66,8196,8197],{"class":68,"line":392},[66,8198,8199],{"class":758},"    \u002F\u002F2.使用指针\n",[66,8201,8202],{"class":68,"line":405},[66,8203,8204],{"class":758},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[66,8206,8207],{"class":68,"line":418},[66,8208,8209],{"class":758},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[66,8211,8212,8215,8217,8219,8222],{"class":68,"line":430},[66,8213,8214],{"class":72},"    *",[66,8216,19],{"class":76},[66,8218,99],{"class":72},[66,8220,8221],{"class":102},"1000",[66,8223,3135],{"class":76},[66,8225,8226,8228,8231,8233,8235,8237],{"class":68,"line":438},[66,8227,3393],{"class":76},[66,8229,8230],{"class":72},"\u003C\u003C*",[66,8232,19],{"class":76},[66,8234,3019],{"class":72},[66,8236,3083],{"class":76},[66,8238,8239],{"class":758},"\u002F\u002F1000\n",[66,8241,8242,8244,8246,8248,8250,8252],{"class":68,"line":465},[66,8243,3393],{"class":76},[66,8245,3019],{"class":72},[66,8247,2229],{"class":76},[66,8249,3019],{"class":72},[66,8251,3083],{"class":76},[66,8253,8239],{"class":758},[66,8255,8256],{"class":68,"line":1805},[66,8257,3407],{"class":76},[14,8259,8261],{"id":8260},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,8263,8264],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,8266,8267],{},"在32位操作系统下：占用4个字节空间",[19,8269,8270],{},"在64位操作系统下：占用8个字节空间",[19,8272,8273],{},"上方是不管啥数据类型的",[57,8275,8277],{"className":1989,"code":8276,"language":1991,"meta":62,"style":62},"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",[23,8278,8279,8287,8291,8296,8308,8313,8318,8323,8336,8358,8384,8410],{"__ignoreMap":62},[66,8280,8281,8283,8285],{"class":68,"line":69},[66,8282,2003],{"class":72},[66,8284,3803],{"class":3793},[66,8286,1253],{"class":76},[66,8288,8289],{"class":68,"line":80},[66,8290,3388],{"class":76},[66,8292,8293],{"class":68,"line":112},[66,8294,8295],{"class":758},"    \u002F\u002F指针所占内存空间\n",[66,8297,8298,8300,8302,8304,8306],{"class":68,"line":129},[66,8299,3814],{"class":72},[66,8301,3240],{"class":76},[66,8303,99],{"class":72},[66,8305,790],{"class":102},[66,8307,3135],{"class":76},[66,8309,8310],{"class":68,"line":138},[66,8311,8312],{"class":758},"    \u002F\u002Fint *p;\n",[66,8314,8315],{"class":68,"line":227},[66,8316,8317],{"class":758},"    \u002F\u002Fp=&a;\n",[66,8319,8320],{"class":68,"line":236},[66,8321,8322],{"class":758},"    \u002F\u002F上述可以写为以下：\n",[66,8324,8325,8327,8330,8332,8334],{"class":68,"line":241},[66,8326,3814],{"class":72},[66,8328,8329],{"class":72}," *",[66,8331,19],{"class":76},[66,8333,8150],{"class":72},[66,8335,8008],{"class":76},[66,8337,8338,8341,8343,8346,8348,8351,8353,8355],{"class":68,"line":372},[66,8339,8340],{"class":76},"    cout ",[66,8342,3019],{"class":72},[66,8344,8345],{"class":356},"\"sizeof(int *)\"",[66,8347,3214],{"class":72},[66,8349,8350],{"class":76},"(p)",[66,8352,3019],{"class":72},[66,8354,3083],{"class":76},[66,8356,8357],{"class":758},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[66,8359,8360,8362,8364,8366,8368,8370,8372,8374,8376,8378,8381],{"class":68,"line":377},[66,8361,8340],{"class":76},[66,8363,3019],{"class":72},[66,8365,8345],{"class":356},[66,8367,3214],{"class":72},[66,8369,348],{"class":76},[66,8371,2003],{"class":72},[66,8373,8329],{"class":72},[66,8375,2413],{"class":76},[66,8377,3019],{"class":72},[66,8379,8380],{"class":76},"endl",[66,8382,8383],{"class":758},"  \u002F\u002F4字节(32位的话)\n",[66,8385,8386,8388,8390,8393,8395,8397,8399,8401,8403,8405,8407],{"class":68,"line":392},[66,8387,8340],{"class":76},[66,8389,3019],{"class":72},[66,8391,8392],{"class":356},"\"sizeof(char *)\"",[66,8394,3214],{"class":72},[66,8396,348],{"class":76},[66,8398,2089],{"class":72},[66,8400,8329],{"class":72},[66,8402,2413],{"class":76},[66,8404,3019],{"class":72},[66,8406,3083],{"class":76},[66,8408,8409],{"class":758}," \u002F\u002F4字节(32位的话)\n",[66,8411,8412],{"class":68,"line":405},[66,8413,3407],{"class":76},[14,8415,8417],{"id":8416},"_33空指针","3.3空指针",[19,8419,8420],{},"空指针：指针变量指向内存中编号为0的空间",[19,8422,8423],{},"用途：初始化指针变量",[19,8425,8426],{},"注意：空指针指向的内存是不可以访问的",[57,8428,8430],{"className":1989,"code":8429,"language":1991,"meta":62,"style":62},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[23,8431,8432,8440,8444,8449,8463,8468,8483,8488],{"__ignoreMap":62},[66,8433,8434,8436,8438],{"class":68,"line":69},[66,8435,2003],{"class":72},[66,8437,3803],{"class":3793},[66,8439,1253],{"class":76},[66,8441,8442],{"class":68,"line":80},[66,8443,3388],{"class":76},[66,8445,8446],{"class":68,"line":112},[66,8447,8448],{"class":758},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[66,8450,8451,8453,8455,8457,8459,8461],{"class":68,"line":129},[66,8452,3814],{"class":72},[66,8454,8329],{"class":72},[66,8456,19],{"class":76},[66,8458,99],{"class":72},[66,8460,4217],{"class":102},[66,8462,3135],{"class":76},[66,8464,8465],{"class":68,"line":138},[66,8466,8467],{"class":758},"    \u002F\u002F2.空指针不能进行访问\n",[66,8469,8470,8472,8474,8476,8478,8480],{"class":68,"line":227},[66,8471,8214],{"class":72},[66,8473,19],{"class":76},[66,8475,99],{"class":72},[66,8477,310],{"class":102},[66,8479,2051],{"class":76},[66,8481,8482],{"class":758},"\u002F\u002F直接报错，压根不能访问\n",[66,8484,8485],{"class":68,"line":236},[66,8486,8487],{"class":758},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[66,8489,8490],{"class":68,"line":241},[66,8491,3407],{"class":76},[14,8493,8495],{"id":8494},"_34野指针","3.4野指针",[19,8497,8498],{},[2141,8499,8500],{},"指针变量指向非法的内存空间",[57,8502,8504],{"className":1989,"code":8503,"language":1991,"meta":62,"style":62},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[23,8505,8506,8514,8518,8547,8552,8564],{"__ignoreMap":62},[66,8507,8508,8510,8512],{"class":68,"line":69},[66,8509,2003],{"class":72},[66,8511,3803],{"class":3793},[66,8513,1253],{"class":76},[66,8515,8516],{"class":68,"line":80},[66,8517,3388],{"class":76},[66,8519,8520,8522,8524,8526,8528,8530,8532,8534,8536,8539,8542,8544],{"class":68,"line":112},[66,8521,3814],{"class":72},[66,8523,8329],{"class":72},[66,8525,19],{"class":76},[66,8527,99],{"class":72},[66,8529,348],{"class":76},[66,8531,2003],{"class":72},[66,8533,8329],{"class":72},[66,8535,2413],{"class":76},[66,8537,8538],{"class":72},"0x",[66,8540,8541],{"class":102},"1100",[66,8543,2051],{"class":76},[66,8545,8546],{"class":758}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[66,8548,8549],{"class":68,"line":129},[66,8550,8551],{"class":758},"    \u002F\u002F访问野指针报错\n",[66,8553,8554,8556,8558,8560,8562],{"class":68,"line":138},[66,8555,3393],{"class":76},[66,8557,8230],{"class":72},[66,8559,19],{"class":76},[66,8561,3019],{"class":72},[66,8563,3041],{"class":76},[66,8565,8566],{"class":68,"line":227},[66,8567,3407],{"class":76},[19,8569,8570],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,8572,8574],{"id":8573},"_35const修饰指针","3.5const修饰指针",[19,8576,8577],{},"三种情况：",[2982,8579,8580,8583,8586],{},[34,8581,8582],{},"const修饰指针 常量指针",[34,8584,8585],{},"const修饰常量 指针常量",[34,8587,8588],{},"const即修饰指针，又修饰常量",[31,8590,8591],{},[34,8592,8593],{},"常量指针",[57,8595,8597],{"className":1989,"code":8596,"language":1991,"meta":62,"style":62},"const int *p=&a;\n",[23,8598,8599],{"__ignoreMap":62},[66,8600,8601,8604,8606,8608,8610,8612],{"class":68,"line":69},[66,8602,8603],{"class":72},"const",[66,8605,345],{"class":72},[66,8607,8329],{"class":72},[66,8609,19],{"class":76},[66,8611,8150],{"class":72},[66,8613,8008],{"class":76},[19,8615,8616],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[31,8618,8619],{"start":80},[34,8620,8621],{},"指针常量",[57,8623,8625],{"className":1989,"code":8624,"language":1991,"meta":62,"style":62},"int *const p=&a;\n",[23,8626,8627],{"__ignoreMap":62},[66,8628,8629,8631,8634,8637,8639],{"class":68,"line":69},[66,8630,2003],{"class":72},[66,8632,8633],{"class":72}," *const",[66,8635,8636],{"class":76}," p",[66,8638,8150],{"class":72},[66,8640,8008],{"class":76},[19,8642,8643],{},"指针的指向不可以改，指针指向的值可以改",[31,8645,8646],{"start":112},[34,8647,8588],{},[57,8649,8651],{"className":1989,"code":8650,"language":1991,"meta":62,"style":62},"const int *const p=&a;\n",[23,8652,8653],{"__ignoreMap":62},[66,8654,8655,8657,8659,8661,8663,8665],{"class":68,"line":69},[66,8656,8603],{"class":72},[66,8658,345],{"class":72},[66,8660,8633],{"class":72},[66,8662,8636],{"class":76},[66,8664,8150],{"class":72},[66,8666,8008],{"class":76},[19,8668,8669],{},"指针的指向和指针指向的值都不可以改变",[14,8671,8673],{"id":8672},"_36指针和数组","3.6指针和数组",[57,8675,8677],{"className":1989,"code":8676,"language":1991,"meta":62,"style":62},"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",[23,8678,8679,8687,8691,8696,8750,8771,8787,8803,8814,8831,8836,8850,8876,8880,8892,8901,8905],{"__ignoreMap":62},[66,8680,8681,8683,8685],{"class":68,"line":69},[66,8682,2003],{"class":72},[66,8684,3803],{"class":3793},[66,8686,1253],{"class":76},[66,8688,8689],{"class":68,"line":80},[66,8690,3388],{"class":76},[66,8692,8693],{"class":68,"line":112},[66,8694,8695],{"class":758},"    \u002F\u002F利用指针访问数组中的元素\n",[66,8697,8698,8700,8702,8704,8706,8708,8710,8712,8714,8716,8718,8720,8722,8724,8726,8728,8730,8732,8734,8736,8738,8740,8742,8744,8746,8748],{"class":68,"line":129},[66,8699,3814],{"class":72},[66,8701,5779],{"class":76},[66,8703,790],{"class":102},[66,8705,2917],{"class":76},[66,8707,99],{"class":72},[66,8709,451],{"class":76},[66,8711,304],{"class":102},[66,8713,2362],{"class":76},[66,8715,795],{"class":102},[66,8717,2362],{"class":76},[66,8719,1520],{"class":102},[66,8721,2362],{"class":76},[66,8723,1076],{"class":102},[66,8725,2362],{"class":76},[66,8727,752],{"class":102},[66,8729,2362],{"class":76},[66,8731,519],{"class":102},[66,8733,2362],{"class":76},[66,8735,2353],{"class":102},[66,8737,2362],{"class":76},[66,8739,2379],{"class":102},[66,8741,2362],{"class":76},[66,8743,2404],{"class":102},[66,8745,2362],{"class":76},[66,8747,790],{"class":102},[66,8749,5812],{"class":76},[66,8751,8752,8754,8756,8759,8761,8763,8765,8767,8769],{"class":68,"line":138},[66,8753,3393],{"class":76},[66,8755,3019],{"class":72},[66,8757,8758],{"class":356},"\"数组的第一个元素为：\"",[66,8760,3019],{"class":72},[66,8762,5723],{"class":76},[66,8764,2183],{"class":102},[66,8766,2917],{"class":76},[66,8768,3019],{"class":72},[66,8770,3041],{"class":76},[66,8772,8773,8775,8777,8779,8781,8784],{"class":68,"line":227},[66,8774,3814],{"class":72},[66,8776,8329],{"class":72},[66,8778,19],{"class":76},[66,8780,99],{"class":72},[66,8782,8783],{"class":76},"arr;",[66,8785,8786],{"class":758},"\u002F\u002F注意数才要加取地址符号&\n",[66,8788,8789,8791,8793,8795,8797,8799,8801],{"class":68,"line":236},[66,8790,3393],{"class":76},[66,8792,3019],{"class":72},[66,8794,8758],{"class":356},[66,8796,8230],{"class":72},[66,8798,19],{"class":76},[66,8800,3019],{"class":72},[66,8802,3041],{"class":76},[66,8804,8805,8807,8809,8811],{"class":68,"line":241},[66,8806,8147],{"class":76},[66,8808,4118],{"class":72},[66,8810,2051],{"class":76},[66,8812,8813],{"class":758}," \u002F\u002F让指针向后偏移4个字节\n",[66,8815,8816,8818,8820,8823,8825,8827,8829],{"class":68,"line":372},[66,8817,3393],{"class":76},[66,8819,3019],{"class":72},[66,8821,8822],{"class":356},"\"数组的第二个元素为：\"",[66,8824,8230],{"class":72},[66,8826,19],{"class":76},[66,8828,3019],{"class":72},[66,8830,3041],{"class":76},[66,8832,8833],{"class":68,"line":377},[66,8834,8835],{"class":758},"    \u002F\u002F利用指针遍历数组\n",[66,8837,8838,8840,8842,8845,8847],{"class":68,"line":392},[66,8839,3814],{"class":72},[66,8841,8329],{"class":72},[66,8843,8844],{"class":76},"p2",[66,8846,99],{"class":72},[66,8848,8849],{"class":76},"arr;\n",[66,8851,8852,8854,8856,8858,8860,8862,8864,8866,8868,8870,8872,8874],{"class":68,"line":405},[66,8853,1083],{"class":72},[66,8855,3492],{"class":76},[66,8857,2003],{"class":72},[66,8859,1596],{"class":76},[66,8861,99],{"class":72},[66,8863,2183],{"class":102},[66,8865,4860],{"class":76},[66,8867,413],{"class":72},[66,8869,790],{"class":102},[66,8871,4860],{"class":76},[66,8873,4118],{"class":72},[66,8875,313],{"class":76},[66,8877,8878],{"class":68,"line":418},[66,8879,3859],{"class":76},[66,8881,8882,8884,8886,8888,8890],{"class":68,"line":430},[66,8883,5269],{"class":76},[66,8885,8230],{"class":72},[66,8887,8844],{"class":76},[66,8889,3019],{"class":72},[66,8891,3041],{"class":76},[66,8893,8894,8897,8899],{"class":68,"line":438},[66,8895,8896],{"class":76},"        p2",[66,8898,4118],{"class":72},[66,8900,3135],{"class":76},[66,8902,8903],{"class":68,"line":465},[66,8904,4013],{"class":76},[66,8906,8907],{"class":68,"line":1805},[66,8908,3407],{"class":76},[14,8910,8912],{"id":8911},"_37指针和函数","3.7指针和函数",[19,8914,8915],{},"利用指针做函数参数，可以修改实参的值",[19,8917,8918],{},"值传递：只改变形参，不改变实参",[19,8920,8921],{},"地址传递：",[57,8923,8925],{"className":1989,"code":8924,"language":1991,"meta":62,"style":62},"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",[23,8926,8927,8952,8956,8968,8979,8989,8993,9001,9005,9017,9029,9034,9050,9065,9080],{"__ignoreMap":62},[66,8928,8929,8931,8933,8935,8937,8939,8942,8944,8946,8948,8950],{"class":68,"line":69},[66,8930,7176],{"class":72},[66,8932,7179],{"class":3793},[66,8934,348],{"class":76},[66,8936,2003],{"class":72},[66,8938,8329],{"class":72},[66,8940,8941],{"class":1234},"p1",[66,8943,2362],{"class":76},[66,8945,2003],{"class":72},[66,8947,8329],{"class":72},[66,8949,8844],{"class":1234},[66,8951,313],{"class":76},[66,8953,8954],{"class":68,"line":80},[66,8955,3388],{"class":76},[66,8957,8958,8960,8962,8965],{"class":68,"line":112},[66,8959,3814],{"class":72},[66,8961,6071],{"class":76},[66,8963,8964],{"class":72},"=*",[66,8966,8967],{"class":76},"p1;\n",[66,8969,8970,8972,8974,8976],{"class":68,"line":129},[66,8971,8214],{"class":72},[66,8973,8941],{"class":76},[66,8975,8964],{"class":72},[66,8977,8978],{"class":76},"p2;\n",[66,8980,8981,8983,8985,8987],{"class":68,"line":138},[66,8982,8214],{"class":72},[66,8984,8844],{"class":76},[66,8986,99],{"class":72},[66,8988,6096],{"class":76},[66,8990,8991],{"class":68,"line":227},[66,8992,3407],{"class":76},[66,8994,8995,8997,8999],{"class":68,"line":236},[66,8996,2003],{"class":72},[66,8998,3803],{"class":3793},[66,9000,1253],{"class":76},[66,9002,9003],{"class":68,"line":241},[66,9004,3388],{"class":76},[66,9006,9007,9009,9011,9013,9015],{"class":68,"line":372},[66,9008,3814],{"class":72},[66,9010,3240],{"class":76},[66,9012,99],{"class":72},[66,9014,790],{"class":102},[66,9016,3135],{"class":76},[66,9018,9019,9021,9023,9025,9027],{"class":68,"line":377},[66,9020,3814],{"class":72},[66,9022,4657],{"class":76},[66,9024,99],{"class":72},[66,9026,2679],{"class":102},[66,9028,3135],{"class":76},[66,9030,9031],{"class":68,"line":392},[66,9032,9033],{"class":758},"    \u002F\u002F地址传递\n",[66,9035,9036,9038,9040,9042,9045,9047],{"class":68,"line":405},[66,9037,7373],{"class":3793},[66,9039,348],{"class":76},[66,9041,2337],{"class":72},[66,9043,9044],{"class":76},"a,",[66,9046,2337],{"class":72},[66,9048,9049],{"class":76},"b);\n",[66,9051,9052,9054,9056,9058,9060,9062],{"class":68,"line":418},[66,9053,3393],{"class":76},[66,9055,3019],{"class":72},[66,9057,2229],{"class":76},[66,9059,3019],{"class":72},[66,9061,3083],{"class":76},[66,9063,9064],{"class":758},"\u002F\u002F20\n",[66,9066,9067,9069,9071,9073,9075,9077],{"class":68,"line":430},[66,9068,3393],{"class":76},[66,9070,3019],{"class":72},[66,9072,2253],{"class":76},[66,9074,3019],{"class":72},[66,9076,3083],{"class":76},[66,9078,9079],{"class":758},"\u002F\u002F10\n",[66,9081,9082],{"class":68,"line":438},[66,9083,3407],{"class":76},[19,9085,9086],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,9088,9090],{"id":9089},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,9092,9093],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,9095,9096,9097,9099],{},"例如数组：int arr",[66,9098,790],{},"={4,3,6,9,1,2,10,8,7,5}",[57,9101,9103],{"className":1989,"code":9102,"language":1991,"meta":62,"style":62},"#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",[23,9104,9105,9111,9121,9145,9149,9180,9184,9218,9222,9240,9244,9255,9270,9285,9289,9293,9297,9301,9305,9313,9317,9322,9376,9388,9400,9405,9413,9417,9422,9447,9451,9466,9475,9479],{"__ignoreMap":62},[66,9106,9107,9109],{"class":68,"line":69},[66,9108,3779],{"class":72},[66,9110,3782],{"class":356},[66,9112,9113,9115,9117,9119],{"class":68,"line":80},[66,9114,3787],{"class":72},[66,9116,3790],{"class":72},[66,9118,3794],{"class":3793},[66,9120,3135],{"class":76},[66,9122,9123,9125,9128,9130,9132,9134,9136,9138,9140,9143],{"class":68,"line":112},[66,9124,7176],{"class":72},[66,9126,9127],{"class":3793}," bubbleSort",[66,9129,348],{"class":76},[66,9131,2003],{"class":72},[66,9133,8329],{"class":72},[66,9135,19],{"class":1234},[66,9137,2362],{"class":76},[66,9139,2003],{"class":72},[66,9141,9142],{"class":1234}," len",[66,9144,313],{"class":76},[66,9146,9147],{"class":68,"line":129},[66,9148,3388],{"class":76},[66,9150,9151,9153,9155,9157,9159,9161,9163,9165,9167,9170,9172,9174,9176,9178],{"class":68,"line":138},[66,9152,1083],{"class":72},[66,9154,348],{"class":76},[66,9156,2003],{"class":72},[66,9158,1596],{"class":76},[66,9160,99],{"class":72},[66,9162,2183],{"class":102},[66,9164,4860],{"class":76},[66,9166,413],{"class":72},[66,9168,9169],{"class":76},"len",[66,9171,2511],{"class":72},[66,9173,304],{"class":102},[66,9175,4860],{"class":76},[66,9177,4118],{"class":72},[66,9179,313],{"class":76},[66,9181,9182],{"class":68,"line":227},[66,9183,3859],{"class":76},[66,9185,9186,9188,9190,9192,9194,9196,9198,9200,9202,9204,9206,9208,9210,9212,9214,9216],{"class":68,"line":236},[66,9187,5222],{"class":72},[66,9189,348],{"class":76},[66,9191,2003],{"class":72},[66,9193,1225],{"class":76},[66,9195,99],{"class":72},[66,9197,2183],{"class":102},[66,9199,5235],{"class":76},[66,9201,413],{"class":72},[66,9203,9169],{"class":76},[66,9205,2511],{"class":72},[66,9207,257],{"class":76},[66,9209,2511],{"class":72},[66,9211,304],{"class":102},[66,9213,5235],{"class":76},[66,9215,4118],{"class":72},[66,9217,313],{"class":76},[66,9219,9220],{"class":68,"line":241},[66,9221,4334],{"class":76},[66,9223,9224,9226,9229,9231,9234,9236,9238],{"class":68,"line":372},[66,9225,6458],{"class":72},[66,9227,9228],{"class":76},"(p[j]",[66,9230,386],{"class":72},[66,9232,9233],{"class":76},"p[j",[66,9235,1184],{"class":72},[66,9237,304],{"class":102},[66,9239,6473],{"class":76},[66,9241,9242],{"class":68,"line":377},[66,9243,6478],{"class":76},[66,9245,9246,9248,9250,9252],{"class":68,"line":392},[66,9247,6483],{"class":72},[66,9249,6071],{"class":76},[66,9251,99],{"class":72},[66,9253,9254],{"class":76},"p[j];\n",[66,9256,9257,9260,9262,9264,9266,9268],{"class":68,"line":405},[66,9258,9259],{"class":76},"                p[j]",[66,9261,99],{"class":72},[66,9263,9233],{"class":76},[66,9265,1184],{"class":72},[66,9267,304],{"class":102},[66,9269,6506],{"class":76},[66,9271,9272,9275,9277,9279,9281,9283],{"class":68,"line":418},[66,9273,9274],{"class":76},"                p[j",[66,9276,1184],{"class":72},[66,9278,304],{"class":102},[66,9280,2917],{"class":76},[66,9282,99],{"class":72},[66,9284,6096],{"class":76},[66,9286,9287],{"class":68,"line":430},[66,9288,6526],{"class":76},[66,9290,9291],{"class":68,"line":438},[66,9292,4353],{"class":76},[66,9294,9295],{"class":68,"line":465},[66,9296,4013],{"class":76},[66,9298,9299],{"class":68,"line":1805},[66,9300,3407],{"class":76},[66,9302,9303],{"class":68,"line":1817},[66,9304,109],{"emptyLinePlaceholder":108},[66,9306,9307,9309,9311],{"class":68,"line":1822},[66,9308,2003],{"class":72},[66,9310,3803],{"class":3793},[66,9312,1253],{"class":76},[66,9314,9315],{"class":68,"line":1829},[66,9316,3388],{"class":76},[66,9318,9319],{"class":68,"line":3529},[66,9320,9321],{"class":758},"    \u002F\u002F 1.创建数组\n",[66,9323,9324,9326,9328,9330,9332,9334,9336,9338,9340,9342,9344,9346,9348,9350,9352,9354,9356,9358,9360,9362,9364,9366,9368,9370,9372,9374],{"class":68,"line":3557},[66,9325,3814],{"class":72},[66,9327,5779],{"class":76},[66,9329,790],{"class":102},[66,9331,2917],{"class":76},[66,9333,99],{"class":72},[66,9335,451],{"class":76},[66,9337,1076],{"class":102},[66,9339,2362],{"class":76},[66,9341,1520],{"class":102},[66,9343,2362],{"class":76},[66,9345,519],{"class":102},[66,9347,2362],{"class":76},[66,9349,2404],{"class":102},[66,9351,2362],{"class":76},[66,9353,304],{"class":102},[66,9355,2362],{"class":76},[66,9357,795],{"class":102},[66,9359,2362],{"class":76},[66,9361,790],{"class":102},[66,9363,2362],{"class":76},[66,9365,2379],{"class":102},[66,9367,2362],{"class":76},[66,9369,2353],{"class":102},[66,9371,2362],{"class":76},[66,9373,752],{"class":102},[66,9375,5812],{"class":76},[66,9377,9378,9380,9382,9384,9386],{"class":68,"line":3562},[66,9379,3814],{"class":72},[66,9381,9142],{"class":76},[66,9383,99],{"class":72},[66,9385,790],{"class":102},[66,9387,3135],{"class":76},[66,9389,9390,9392,9394,9396,9398],{"class":68,"line":3579},[66,9391,3814],{"class":72},[66,9393,8329],{"class":72},[66,9395,19],{"class":76},[66,9397,99],{"class":72},[66,9399,8849],{"class":76},[66,9401,9402],{"class":68,"line":3584},[66,9403,9404],{"class":758},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[66,9406,9407,9410],{"class":68,"line":3589},[66,9408,9409],{"class":3793},"    bubbleSort",[66,9411,9412],{"class":76},"(p,len);\n",[66,9414,9415],{"class":68,"line":3594},[66,9416,109],{"emptyLinePlaceholder":108},[66,9418,9419],{"class":68,"line":3608},[66,9420,9421],{"class":758},"    \u002F\u002F 3.打印排序后的数组\n",[66,9423,9424,9426,9428,9430,9432,9434,9436,9438,9440,9443,9445],{"class":68,"line":3613},[66,9425,1083],{"class":72},[66,9427,3492],{"class":76},[66,9429,2003],{"class":72},[66,9431,1596],{"class":76},[66,9433,99],{"class":72},[66,9435,2183],{"class":102},[66,9437,5033],{"class":76},[66,9439,413],{"class":72},[66,9441,9442],{"class":76},"len; i",[66,9444,4118],{"class":72},[66,9446,313],{"class":76},[66,9448,9449],{"class":68,"line":4401},[66,9450,3859],{"class":76},[66,9452,9453,9455,9457,9459,9461,9464],{"class":68,"line":4415},[66,9454,5269],{"class":76},[66,9456,8230],{"class":72},[66,9458,19],{"class":76},[66,9460,3019],{"class":72},[66,9462,9463],{"class":356},"\"\"",[66,9465,3135],{"class":76},[66,9467,9468,9471,9473],{"class":68,"line":4423},[66,9469,9470],{"class":76},"        p",[66,9472,4118],{"class":72},[66,9474,3135],{"class":76},[66,9476,9477],{"class":68,"line":4428},[66,9478,4013],{"class":76},[66,9480,9481],{"class":68,"line":4434},[66,9482,3407],{"class":76},[1903,9484,9485],{},"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":62,"searchDepth":80,"depth":80,"links":9487},[9488,9489,9490,9491,9492,9493,9494,9495],{"id":8094,"depth":80,"text":8095},{"id":8260,"depth":80,"text":8261},{"id":8416,"depth":80,"text":8417},{"id":8494,"depth":80,"text":8495},{"id":8573,"depth":80,"text":8574},{"id":8672,"depth":80,"text":8673},{"id":8911,"depth":80,"text":8912},{"id":9089,"depth":80,"text":9090},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":8083,"description":8091},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":9502,"title":9503,"body":9504,"description":9511,"extension":1927,"meta":12480,"navigation":108,"path":12481,"seo":12482,"stem":12483,"__hash__":12484},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":9505,"toc":12471},[9506,9509,9512,9516,9519,9522,9533,9871,9874,9878,9881,9888,10143,10147,10150,10153,10308,10312,10315,10318,10524,10528,10531,10834,10836,10844,10848,10851,11002,11004,11015,11072,11076,11081,11735,11743,11746,11840,11842,12462,12468],[10,9507,9503],{"id":9508},"_4结构体",[19,9510,9511],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,9513,9515],{"id":9514},"_41结构体定义与使用","4.1结构体定义与使用",[19,9517,9518],{},"语法：struct 结构体名 {结构体成员列表}；",[19,9520,9521],{},"通过结构体创建变量的方式：",[2982,9523,9524,9527,9530],{},[34,9525,9526],{},"struct 结构体名 变量名",[34,9528,9529],{},"struct 结构体名 变量名={成员1值，成员2值...}",[34,9531,9532],{},"定义结构体时顺便创建变量",[57,9534,9536],{"className":1989,"code":9535,"language":1991,"meta":62,"style":62},"#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",[23,9537,9538,9544,9554,9561,9566,9574,9578,9583,9587,9592,9597,9602,9609,9614,9621,9625,9632,9636,9640,9644,9648,9652,9656,9662,9666,9672,9680,9688,9692,9697,9702,9713,9718,9730,9741,9752,9757,9781,9786,9792,9819,9824,9830,9842,9854,9866],{"__ignoreMap":62},[66,9539,9540,9542],{"class":68,"line":69},[66,9541,3779],{"class":72},[66,9543,3782],{"class":356},[66,9545,9546,9548,9550,9552],{"class":68,"line":80},[66,9547,3787],{"class":72},[66,9549,3790],{"class":72},[66,9551,3794],{"class":3793},[66,9553,3135],{"class":76},[66,9555,9556,9558],{"class":68,"line":112},[66,9557,3779],{"class":72},[66,9559,9560],{"class":356},"\u003Cstring>\n",[66,9562,9563],{"class":68,"line":129},[66,9564,9565],{"class":758},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[66,9567,9568,9571],{"class":68,"line":138},[66,9569,9570],{"class":72},"struct",[66,9572,9573],{"class":3793}," Student\n",[66,9575,9576],{"class":68,"line":227},[66,9577,3388],{"class":76},[66,9579,9580],{"class":68,"line":236},[66,9581,9582],{"class":758},"    \u002F\u002F成员列表\n",[66,9584,9585],{"class":68,"line":241},[66,9586,109],{"emptyLinePlaceholder":108},[66,9588,9589],{"class":68,"line":372},[66,9590,9591],{"class":758},"    \u002F\u002F姓名\n",[66,9593,9594],{"class":68,"line":377},[66,9595,9596],{"class":76},"    string name;\n",[66,9598,9599],{"class":68,"line":392},[66,9600,9601],{"class":758},"    \u002F\u002F年龄\n",[66,9603,9604,9606],{"class":68,"line":405},[66,9605,3814],{"class":72},[66,9607,9608],{"class":76}," age;\n",[66,9610,9611],{"class":68,"line":418},[66,9612,9613],{"class":758},"    \u002F\u002F分数\n",[66,9615,9616,9618],{"class":68,"line":430},[66,9617,3814],{"class":72},[66,9619,9620],{"class":76}," score;\n",[66,9622,9623],{"class":68,"line":438},[66,9624,5812],{"class":76},[66,9626,9627,9629],{"class":68,"line":465},[66,9628,9570],{"class":72},[66,9630,9631],{"class":3793}," School\n",[66,9633,9634],{"class":68,"line":1805},[66,9635,3388],{"class":76},[66,9637,9638],{"class":68,"line":1817},[66,9639,9582],{"class":758},[66,9641,9642],{"class":68,"line":1822},[66,9643,109],{"emptyLinePlaceholder":108},[66,9645,9646],{"class":68,"line":1829},[66,9647,9591],{"class":758},[66,9649,9650],{"class":68,"line":3529},[66,9651,9596],{"class":76},[66,9653,9654],{"class":68,"line":3557},[66,9655,9601],{"class":758},[66,9657,9658,9660],{"class":68,"line":3562},[66,9659,3814],{"class":72},[66,9661,9608],{"class":76},[66,9663,9664],{"class":68,"line":3579},[66,9665,9613],{"class":758},[66,9667,9668,9670],{"class":68,"line":3584},[66,9669,3814],{"class":72},[66,9671,9620],{"class":76},[66,9673,9674,9677],{"class":68,"line":3589},[66,9675,9676],{"class":76},"} s3;",[66,9678,9679],{"class":758}," \u002F\u002F创建结构体时就创建了变量\n",[66,9681,9682,9684,9686],{"class":68,"line":3594},[66,9683,2003],{"class":72},[66,9685,3803],{"class":3793},[66,9687,1253],{"class":76},[66,9689,9690],{"class":68,"line":3608},[66,9691,3388],{"class":76},[66,9693,9694],{"class":68,"line":3613},[66,9695,9696],{"class":758},"    \u002F\u002F2.通过学生类型创建具体学生\n",[66,9698,9699],{"class":68,"line":4401},[66,9700,9701],{"class":758},"    \u002F\u002F2.1 struct Student s1;\n",[66,9703,9704,9707,9710],{"class":68,"line":4415},[66,9705,9706],{"class":72},"    struct",[66,9708,9709],{"class":3793}," Student",[66,9711,9712],{"class":76}," s1;\n",[66,9714,9715],{"class":68,"line":4423},[66,9716,9717],{"class":758},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[66,9719,9720,9723,9725,9728],{"class":68,"line":4428},[66,9721,9722],{"class":76},"    s1.name",[66,9724,99],{"class":72},[66,9726,9727],{"class":356},"\"张三\"",[66,9729,3135],{"class":76},[66,9731,9732,9735,9737,9739],{"class":68,"line":4434},[66,9733,9734],{"class":76},"    s1.age",[66,9736,99],{"class":72},[66,9738,2629],{"class":102},[66,9740,3135],{"class":76},[66,9742,9743,9746,9748,9750],{"class":68,"line":4440},[66,9744,9745],{"class":76},"    s1.score",[66,9747,99],{"class":72},[66,9749,2244],{"class":102},[66,9751,3135],{"class":76},[66,9753,9754],{"class":68,"line":4445},[66,9755,9756],{"class":758},"    \u002F\u002F输出结果\n",[66,9758,9760,9762,9764,9767,9769,9772,9774,9777,9779],{"class":68,"line":9759},37,[66,9761,3393],{"class":76},[66,9763,3019],{"class":72},[66,9765,9766],{"class":76},"s1.name",[66,9768,3019],{"class":72},[66,9770,9771],{"class":76},"s1.age",[66,9773,3019],{"class":72},[66,9775,9776],{"class":76},"s1.score",[66,9778,3019],{"class":72},[66,9780,3041],{"class":76},[66,9782,9784],{"class":68,"line":9783},38,[66,9785,109],{"emptyLinePlaceholder":108},[66,9787,9789],{"class":68,"line":9788},39,[66,9790,9791],{"class":758},"    \u002F\u002F2.2 struct Student s2={...}\n",[66,9793,9795,9797,9799,9802,9804,9806,9809,9811,9813,9815,9817],{"class":68,"line":9794},40,[66,9796,9706],{"class":72},[66,9798,9709],{"class":3793},[66,9800,9801],{"class":76}," s2",[66,9803,99],{"class":72},[66,9805,451],{"class":76},[66,9807,9808],{"class":356},"\"王五\"",[66,9810,2362],{"class":76},[66,9812,2629],{"class":102},[66,9814,2362],{"class":76},[66,9816,2244],{"class":102},[66,9818,5812],{"class":76},[66,9820,9822],{"class":68,"line":9821},41,[66,9823,109],{"emptyLinePlaceholder":108},[66,9825,9827],{"class":68,"line":9826},42,[66,9828,9829],{"class":758},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[66,9831,9833,9836,9838,9840],{"class":68,"line":9832},43,[66,9834,9835],{"class":76},"    s3.name",[66,9837,99],{"class":72},[66,9839,5496],{"class":356},[66,9841,3135],{"class":76},[66,9843,9845,9848,9850,9852],{"class":68,"line":9844},44,[66,9846,9847],{"class":76},"    s3.age",[66,9849,99],{"class":72},[66,9851,2629],{"class":102},[66,9853,3135],{"class":76},[66,9855,9857,9860,9862,9864],{"class":68,"line":9856},45,[66,9858,9859],{"class":76},"    s3.score",[66,9861,99],{"class":72},[66,9863,2679],{"class":102},[66,9865,3135],{"class":76},[66,9867,9869],{"class":68,"line":9868},46,[66,9870,3407],{"class":76},[19,9872,9873],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,9875,9877],{"id":9876},"_42结构体数组","4.2结构体数组",[19,9879,9880],{},"将自定义的结构体放入到数组中方便维护",[19,9882,9883,9884,9887],{},"语法：struct 结构体名 数组名",[66,9885,9886],{},"元素个数","={ {}，{},...{} };",[57,9889,9891],{"className":1989,"code":9890,"language":1991,"meta":62,"style":62},"#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",[23,9892,9893,9899,9909,9915,9920,9926,9930,9934,9940,9946,9950,9954,9962,9966,9971,9986,9990,10006,10022,10026,10031,10047,10062,10077,10082,10108,10112,10135,10139],{"__ignoreMap":62},[66,9894,9895,9897],{"class":68,"line":69},[66,9896,3779],{"class":72},[66,9898,3782],{"class":356},[66,9900,9901,9903,9905,9907],{"class":68,"line":80},[66,9902,3787],{"class":72},[66,9904,3790],{"class":72},[66,9906,3794],{"class":3793},[66,9908,3135],{"class":76},[66,9910,9911,9913],{"class":68,"line":112},[66,9912,3779],{"class":72},[66,9914,9560],{"class":356},[66,9916,9917],{"class":68,"line":129},[66,9918,9919],{"class":758},"\u002F\u002F1.定义结构体\n",[66,9921,9922,9924],{"class":68,"line":138},[66,9923,9570],{"class":72},[66,9925,9573],{"class":3793},[66,9927,9928],{"class":68,"line":227},[66,9929,3388],{"class":76},[66,9931,9932],{"class":68,"line":236},[66,9933,9596],{"class":76},[66,9935,9936,9938],{"class":68,"line":241},[66,9937,3814],{"class":72},[66,9939,9608],{"class":76},[66,9941,9942,9944],{"class":68,"line":372},[66,9943,3814],{"class":72},[66,9945,9620],{"class":76},[66,9947,9948],{"class":68,"line":377},[66,9949,109],{"emptyLinePlaceholder":108},[66,9951,9952],{"class":68,"line":392},[66,9953,5812],{"class":76},[66,9955,9956,9958,9960],{"class":68,"line":405},[66,9957,2003],{"class":72},[66,9959,3803],{"class":3793},[66,9961,1253],{"class":76},[66,9963,9964],{"class":68,"line":418},[66,9965,3388],{"class":76},[66,9967,9968],{"class":68,"line":430},[66,9969,9970],{"class":758},"    \u002F\u002F2.创建结构体数组\n",[66,9972,9973,9975,9977,9980,9982,9984],{"class":68,"line":438},[66,9974,9706],{"class":72},[66,9976,9709],{"class":3793},[66,9978,9979],{"class":76}," stuArray[",[66,9981,795],{"class":102},[66,9983,2917],{"class":76},[66,9985,6724],{"class":72},[66,9987,9988],{"class":68,"line":465},[66,9989,3859],{"class":76},[66,9991,9992,9994,9996,9998,10000,10002,10004],{"class":68,"line":1805},[66,9993,6733],{"class":76},[66,9995,9727],{"class":356},[66,9997,2362],{"class":76},[66,9999,2629],{"class":102},[66,10001,2362],{"class":76},[66,10003,310],{"class":102},[66,10005,6746],{"class":76},[66,10007,10008,10010,10012,10014,10016,10018,10020],{"class":68,"line":1817},[66,10009,6733],{"class":76},[66,10011,5496],{"class":356},[66,10013,2362],{"class":76},[66,10015,2554],{"class":102},[66,10017,2362],{"class":76},[66,10019,2554],{"class":102},[66,10021,3407],{"class":76},[66,10023,10024],{"class":68,"line":1822},[66,10025,4013],{"class":76},[66,10027,10028],{"class":68,"line":1829},[66,10029,10030],{"class":758},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[66,10032,10033,10036,10038,10041,10043,10045],{"class":68,"line":3529},[66,10034,10035],{"class":76},"    stuArray[",[66,10037,304],{"class":102},[66,10039,10040],{"class":76},"].name",[66,10042,99],{"class":72},[66,10044,5519],{"class":356},[66,10046,3135],{"class":76},[66,10048,10049,10051,10053,10056,10058,10060],{"class":68,"line":3557},[66,10050,10035],{"class":76},[66,10052,304],{"class":102},[66,10054,10055],{"class":76},"].age",[66,10057,99],{"class":72},[66,10059,795],{"class":102},[66,10061,3135],{"class":76},[66,10063,10064,10066,10068,10071,10073,10075],{"class":68,"line":3562},[66,10065,10035],{"class":76},[66,10067,304],{"class":102},[66,10069,10070],{"class":76},"].score",[66,10072,99],{"class":72},[66,10074,795],{"class":102},[66,10076,3135],{"class":76},[66,10078,10079],{"class":68,"line":3579},[66,10080,10081],{"class":758},"    \u002F\u002F4.遍历结构体数组\n",[66,10083,10084,10086,10088,10090,10092,10094,10096,10098,10100,10102,10104,10106],{"class":68,"line":3584},[66,10085,1083],{"class":72},[66,10087,3492],{"class":76},[66,10089,2003],{"class":72},[66,10091,1596],{"class":76},[66,10093,99],{"class":72},[66,10095,2183],{"class":102},[66,10097,4860],{"class":76},[66,10099,413],{"class":72},[66,10101,795],{"class":102},[66,10103,4860],{"class":76},[66,10105,4118],{"class":72},[66,10107,313],{"class":76},[66,10109,10110],{"class":68,"line":3589},[66,10111,3859],{"class":76},[66,10113,10114,10116,10118,10121,10123,10126,10128,10131,10133],{"class":68,"line":3594},[66,10115,5269],{"class":76},[66,10117,3019],{"class":72},[66,10119,10120],{"class":76},"stuArray[i].name",[66,10122,3019],{"class":72},[66,10124,10125],{"class":76},"stuArray[i].age",[66,10127,3019],{"class":72},[66,10129,10130],{"class":76},"stuArray[i].score",[66,10132,3019],{"class":72},[66,10134,3041],{"class":76},[66,10136,10137],{"class":68,"line":3608},[66,10138,4013],{"class":76},[66,10140,10141],{"class":68,"line":3613},[66,10142,3407],{"class":76},[14,10144,10146],{"id":10145},"_43结构体指针","4.3结构体指针",[19,10148,10149],{},"作用：通过指针访问结构体中的成员",[19,10151,10152],{},"利用操作符->可以通过结构体指针访问结构体属性",[57,10154,10156],{"className":1989,"code":10155,"language":1991,"meta":62,"style":62},"#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",[23,10157,10158,10164,10174,10180,10184,10190,10194,10198,10204,10210,10214,10222,10226,10231,10256,10261,10276,10281,10304],{"__ignoreMap":62},[66,10159,10160,10162],{"class":68,"line":69},[66,10161,3779],{"class":72},[66,10163,3782],{"class":356},[66,10165,10166,10168,10170,10172],{"class":68,"line":80},[66,10167,3787],{"class":72},[66,10169,3790],{"class":72},[66,10171,3794],{"class":3793},[66,10173,3135],{"class":76},[66,10175,10176,10178],{"class":68,"line":112},[66,10177,3779],{"class":72},[66,10179,9560],{"class":356},[66,10181,10182],{"class":68,"line":129},[66,10183,9919],{"class":758},[66,10185,10186,10188],{"class":68,"line":138},[66,10187,9570],{"class":72},[66,10189,9573],{"class":3793},[66,10191,10192],{"class":68,"line":227},[66,10193,3388],{"class":76},[66,10195,10196],{"class":68,"line":236},[66,10197,9596],{"class":76},[66,10199,10200,10202],{"class":68,"line":241},[66,10201,3814],{"class":72},[66,10203,9608],{"class":76},[66,10205,10206,10208],{"class":68,"line":372},[66,10207,3814],{"class":72},[66,10209,9620],{"class":76},[66,10211,10212],{"class":68,"line":377},[66,10213,5812],{"class":76},[66,10215,10216,10218,10220],{"class":68,"line":392},[66,10217,2003],{"class":72},[66,10219,3803],{"class":3793},[66,10221,1253],{"class":76},[66,10223,10224],{"class":68,"line":405},[66,10225,3388],{"class":76},[66,10227,10228],{"class":68,"line":418},[66,10229,10230],{"class":758},"    \u002F\u002F创建学生结构体变量\n",[66,10232,10233,10235,10237,10240,10242,10244,10246,10248,10250,10252,10254],{"class":68,"line":430},[66,10234,9706],{"class":72},[66,10236,9709],{"class":3793},[66,10238,10239],{"class":76}," s",[66,10241,99],{"class":72},[66,10243,451],{"class":76},[66,10245,9727],{"class":356},[66,10247,2362],{"class":76},[66,10249,2629],{"class":102},[66,10251,2362],{"class":76},[66,10253,3552],{"class":102},[66,10255,5812],{"class":76},[66,10257,10258],{"class":68,"line":438},[66,10259,10260],{"class":758},"    \u002F\u002F通过指针指向结构体变量\n",[66,10262,10263,10265,10267,10269,10271,10273],{"class":68,"line":465},[66,10264,9706],{"class":72},[66,10266,9709],{"class":3793},[66,10268,8329],{"class":72},[66,10270,19],{"class":76},[66,10272,8150],{"class":72},[66,10274,10275],{"class":76},"s\n",[66,10277,10278],{"class":68,"line":1805},[66,10279,10280],{"class":758},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[66,10282,10283,10285,10287,10290,10292,10295,10297,10300,10302],{"class":68,"line":1817},[66,10284,3393],{"class":76},[66,10286,3019],{"class":72},[66,10288,10289],{"class":76},"p->name",[66,10291,3019],{"class":72},[66,10293,10294],{"class":76},"p->age",[66,10296,3019],{"class":72},[66,10298,10299],{"class":76},"p->score",[66,10301,3019],{"class":72},[66,10303,3041],{"class":76},[66,10305,10306],{"class":68,"line":1822},[66,10307,3407],{"class":76},[14,10309,10311],{"id":10310},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,10313,10314],{},"作用：结构体中的成员可以是另一个结构体",[19,10316,10317],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[57,10319,10321],{"className":1989,"code":10320,"language":1991,"meta":62,"style":62},"#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",[23,10322,10323,10329,10339,10345,10350,10358,10362,10366,10372,10378,10382,10387,10394,10398,10405,10409,10415,10420,10424,10432,10436,10441,10446,10451,10462,10474,10485,10498,10509,10520],{"__ignoreMap":62},[66,10324,10325,10327],{"class":68,"line":69},[66,10326,3779],{"class":72},[66,10328,3782],{"class":356},[66,10330,10331,10333,10335,10337],{"class":68,"line":80},[66,10332,3787],{"class":72},[66,10334,3790],{"class":72},[66,10336,3794],{"class":3793},[66,10338,3135],{"class":76},[66,10340,10341,10343],{"class":68,"line":112},[66,10342,3779],{"class":72},[66,10344,9560],{"class":356},[66,10346,10347],{"class":68,"line":129},[66,10348,10349],{"class":758},"\u002F\u002F定义学生结构体\n",[66,10351,10352,10354,10356],{"class":68,"line":138},[66,10353,9570],{"class":72},[66,10355,9709],{"class":3793},[66,10357,4498],{"class":76},[66,10359,10360],{"class":68,"line":227},[66,10361,3388],{"class":76},[66,10363,10364],{"class":68,"line":236},[66,10365,9596],{"class":76},[66,10367,10368,10370],{"class":68,"line":241},[66,10369,3814],{"class":72},[66,10371,9608],{"class":76},[66,10373,10374,10376],{"class":68,"line":372},[66,10375,3814],{"class":72},[66,10377,9620],{"class":76},[66,10379,10380],{"class":68,"line":377},[66,10381,3407],{"class":76},[66,10383,10384],{"class":68,"line":392},[66,10385,10386],{"class":758},"\u002F\u002F定义老师结构体\n",[66,10388,10389,10391],{"class":68,"line":405},[66,10390,9570],{"class":72},[66,10392,10393],{"class":3793}," Teacher\n",[66,10395,10396],{"class":68,"line":418},[66,10397,3388],{"class":76},[66,10399,10400,10402],{"class":68,"line":430},[66,10401,3814],{"class":72},[66,10403,10404],{"class":76}," id;\n",[66,10406,10407],{"class":68,"line":438},[66,10408,9596],{"class":76},[66,10410,10411,10413],{"class":68,"line":465},[66,10412,3814],{"class":72},[66,10414,9608],{"class":76},[66,10416,10417],{"class":68,"line":1805},[66,10418,10419],{"class":76},"    Student stu;\n",[66,10421,10422],{"class":68,"line":1817},[66,10423,3407],{"class":76},[66,10425,10426,10428,10430],{"class":68,"line":1822},[66,10427,2003],{"class":72},[66,10429,3803],{"class":3793},[66,10431,7789],{"class":76},[66,10433,10434],{"class":68,"line":1829},[66,10435,3388],{"class":76},[66,10437,10438],{"class":68,"line":3529},[66,10439,10440],{"class":758},"    \u002F\u002F结构体嵌套结构体\n",[66,10442,10443],{"class":68,"line":3557},[66,10444,10445],{"class":758},"    \u002F\u002F创建老师\n",[66,10447,10448],{"class":68,"line":3562},[66,10449,10450],{"class":76},"    Teacher t;\n",[66,10452,10453,10456,10458,10460],{"class":68,"line":3579},[66,10454,10455],{"class":76},"    t.id",[66,10457,99],{"class":72},[66,10459,310],{"class":102},[66,10461,3135],{"class":76},[66,10463,10464,10467,10469,10472],{"class":68,"line":3584},[66,10465,10466],{"class":76},"    t.name",[66,10468,99],{"class":72},[66,10470,10471],{"class":356},"\"老王\"",[66,10473,3135],{"class":76},[66,10475,10476,10479,10481,10483],{"class":68,"line":3589},[66,10477,10478],{"class":76},"    t.age",[66,10480,99],{"class":72},[66,10482,2629],{"class":102},[66,10484,3135],{"class":76},[66,10486,10487,10490,10492,10495],{"class":68,"line":3594},[66,10488,10489],{"class":76},"    t.stu.name",[66,10491,99],{"class":72},[66,10493,10494],{"class":356},"\"小王\"",[66,10496,10497],{"class":76},"；\n",[66,10499,10500,10503,10505,10507],{"class":68,"line":3608},[66,10501,10502],{"class":76},"    t.stu.age",[66,10504,99],{"class":72},[66,10506,2679],{"class":102},[66,10508,3135],{"class":76},[66,10510,10511,10514,10516,10518],{"class":68,"line":3613},[66,10512,10513],{"class":76},"    t.stu.score",[66,10515,99],{"class":72},[66,10517,519],{"class":102},[66,10519,3135],{"class":76},[66,10521,10522],{"class":68,"line":4401},[66,10523,3407],{"class":76},[14,10525,10527],{"id":10526},"_45结构体做函数参数","4.5结构体做函数参数",[19,10529,10530],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[57,10532,10534],{"className":1989,"code":10533,"language":1991,"meta":62,"style":62},"#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",[23,10535,10536,10542,10552,10558,10564,10568,10572,10578,10584,10588,10593,10598,10615,10619,10652,10656,10661,10680,10684,10715,10719,10727,10731,10740,10752,10764,10776,10789,10797,10810,10822,10830],{"__ignoreMap":62},[66,10537,10538,10540],{"class":68,"line":69},[66,10539,3779],{"class":72},[66,10541,3782],{"class":356},[66,10543,10544,10546,10548,10550],{"class":68,"line":80},[66,10545,3787],{"class":72},[66,10547,3790],{"class":72},[66,10549,3794],{"class":3793},[66,10551,3135],{"class":76},[66,10553,10554,10556],{"class":68,"line":112},[66,10555,3779],{"class":72},[66,10557,9560],{"class":356},[66,10559,10560,10562],{"class":68,"line":129},[66,10561,9570],{"class":72},[66,10563,9573],{"class":3793},[66,10565,10566],{"class":68,"line":138},[66,10567,3388],{"class":76},[66,10569,10570],{"class":68,"line":227},[66,10571,9596],{"class":76},[66,10573,10574,10576],{"class":68,"line":236},[66,10575,3814],{"class":72},[66,10577,9608],{"class":76},[66,10579,10580,10582],{"class":68,"line":241},[66,10581,3814],{"class":72},[66,10583,9620],{"class":76},[66,10585,10586],{"class":68,"line":372},[66,10587,5812],{"class":76},[66,10589,10590],{"class":68,"line":377},[66,10591,10592],{"class":758},"\u002F\u002F打印学生信息的函数\n",[66,10594,10595],{"class":68,"line":392},[66,10596,10597],{"class":758},"\u002F\u002F值传递\n",[66,10599,10600,10602,10605,10607,10609,10611,10613],{"class":68,"line":405},[66,10601,7176],{"class":72},[66,10603,10604],{"class":3793}," printStudent1",[66,10606,348],{"class":76},[66,10608,9570],{"class":72},[66,10610,9709],{"class":3793},[66,10612,10239],{"class":1234},[66,10614,313],{"class":76},[66,10616,10617],{"class":68,"line":418},[66,10618,3388],{"class":76},[66,10620,10621,10623,10625,10628,10630,10633,10635,10638,10640,10642,10644,10647,10649],{"class":68,"line":430},[66,10622,8340],{"class":76},[66,10624,3019],{"class":72},[66,10626,10627],{"class":76}," s.name ",[66,10629,3019],{"class":72},[66,10631,10632],{"class":356}," \" \"",[66,10634,3286],{"class":72},[66,10636,10637],{"class":76}," s.age ",[66,10639,3019],{"class":72},[66,10641,10632],{"class":356},[66,10643,3286],{"class":72},[66,10645,10646],{"class":76}," s.score ",[66,10648,3019],{"class":72},[66,10650,10651],{"class":76}," endl;\n",[66,10653,10654],{"class":68,"line":438},[66,10655,3407],{"class":76},[66,10657,10658],{"class":68,"line":465},[66,10659,10660],{"class":758},"\u002F\u002F地址传递\n",[66,10662,10663,10665,10668,10670,10672,10674,10676,10678],{"class":68,"line":1805},[66,10664,7176],{"class":72},[66,10666,10667],{"class":3793}," printStudent2",[66,10669,348],{"class":76},[66,10671,9570],{"class":72},[66,10673,9709],{"class":3793},[66,10675,8329],{"class":72},[66,10677,2674],{"class":1234},[66,10679,313],{"class":76},[66,10681,10682],{"class":68,"line":1817},[66,10683,3388],{"class":76},[66,10685,10686,10688,10690,10693,10695,10697,10699,10702,10704,10706,10708,10711,10713],{"class":68,"line":1822},[66,10687,8340],{"class":76},[66,10689,3019],{"class":72},[66,10691,10692],{"class":76}," s->name ",[66,10694,3019],{"class":72},[66,10696,10632],{"class":356},[66,10698,3286],{"class":72},[66,10700,10701],{"class":76}," s->age ",[66,10703,3019],{"class":72},[66,10705,10632],{"class":356},[66,10707,3286],{"class":72},[66,10709,10710],{"class":76}," s->score ",[66,10712,3019],{"class":72},[66,10714,10651],{"class":76},[66,10716,10717],{"class":68,"line":1829},[66,10718,3407],{"class":76},[66,10720,10721,10723,10725],{"class":68,"line":3529},[66,10722,2003],{"class":72},[66,10724,3803],{"class":3793},[66,10726,1253],{"class":76},[66,10728,10729],{"class":68,"line":3557},[66,10730,3388],{"class":76},[66,10732,10733,10735,10737],{"class":68,"line":3562},[66,10734,9706],{"class":72},[66,10736,9709],{"class":3793},[66,10738,10739],{"class":76}," s;\n",[66,10741,10742,10745,10747,10750],{"class":68,"line":3579},[66,10743,10744],{"class":76},"    s.name ",[66,10746,99],{"class":72},[66,10748,10749],{"class":356}," \"张三\"",[66,10751,3135],{"class":76},[66,10753,10754,10757,10759,10762],{"class":68,"line":3584},[66,10755,10756],{"class":76},"    s.age ",[66,10758,99],{"class":72},[66,10760,10761],{"class":102}," 20",[66,10763,3135],{"class":76},[66,10765,10766,10769,10771,10774],{"class":68,"line":3589},[66,10767,10768],{"class":76},"    s.score ",[66,10770,99],{"class":72},[66,10772,10773],{"class":102}," 85",[66,10775,3135],{"class":76},[66,10777,10778,10780,10782,10785,10787],{"class":68,"line":3594},[66,10779,3393],{"class":76},[66,10781,3019],{"class":72},[66,10783,10784],{"class":356},"\"值传递:\"",[66,10786,3019],{"class":72},[66,10788,3041],{"class":76},[66,10790,10791,10794],{"class":68,"line":3608},[66,10792,10793],{"class":3793},"    printStudent1",[66,10795,10796],{"class":76},"(s);\n",[66,10798,10799,10801,10803,10806,10808],{"class":68,"line":3613},[66,10800,3393],{"class":76},[66,10802,3019],{"class":72},[66,10804,10805],{"class":356},"\"地址传递:\"",[66,10807,3019],{"class":72},[66,10809,3041],{"class":76},[66,10811,10812,10815,10817,10819],{"class":68,"line":4401},[66,10813,10814],{"class":3793},"    printStudent2",[66,10816,348],{"class":76},[66,10818,2337],{"class":72},[66,10820,10821],{"class":76},"s); \n",[66,10823,10824,10826,10828],{"class":68,"line":4415},[66,10825,5907],{"class":72},[66,10827,962],{"class":102},[66,10829,3135],{"class":76},[66,10831,10832],{"class":68,"line":4423},[66,10833,3407],{"class":76},[19,10835,841],{},[2982,10837,10838,10841],{},[34,10839,10840],{},"1.先定义结构体，不要在函数中写结构体的定义",[34,10842,10843],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,10845,10847],{"id":10846},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,10849,10850],{},"用const防止误操作",[57,10852,10854],{"className":1989,"code":10853,"language":1991,"meta":62,"style":62},"#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",[23,10855,10856,10862,10872,10878,10883,10887,10891,10897,10903,10907,10923,10927,10950,10954,10962,10966,10987,10994,10998],{"__ignoreMap":62},[66,10857,10858,10860],{"class":68,"line":69},[66,10859,3779],{"class":72},[66,10861,3782],{"class":356},[66,10863,10864,10866,10868,10870],{"class":68,"line":80},[66,10865,3787],{"class":72},[66,10867,3790],{"class":72},[66,10869,3794],{"class":3793},[66,10871,3135],{"class":76},[66,10873,10874,10876],{"class":68,"line":112},[66,10875,3779],{"class":72},[66,10877,9560],{"class":356},[66,10879,10880],{"class":68,"line":129},[66,10881,10882],{"class":76},"sctuct Student\n",[66,10884,10885],{"class":68,"line":138},[66,10886,3388],{"class":76},[66,10888,10889],{"class":68,"line":227},[66,10890,9596],{"class":76},[66,10892,10893,10895],{"class":68,"line":236},[66,10894,3814],{"class":72},[66,10896,9608],{"class":76},[66,10898,10899,10901],{"class":68,"line":241},[66,10900,3814],{"class":72},[66,10902,9620],{"class":76},[66,10904,10905],{"class":68,"line":372},[66,10906,5812],{"class":76},[66,10908,10909,10911,10914,10916,10919,10921],{"class":68,"line":377},[66,10910,7176],{"class":72},[66,10912,10913],{"class":3793}," printStudents",[66,10915,348],{"class":76},[66,10917,10918],{"class":3793},"student",[66,10920,10239],{"class":1234},[66,10922,313],{"class":76},[66,10924,10925],{"class":68,"line":392},[66,10926,3388],{"class":76},[66,10928,10929,10931,10933,10936,10938,10941,10943,10946,10948],{"class":68,"line":405},[66,10930,3393],{"class":76},[66,10932,3019],{"class":72},[66,10934,10935],{"class":76},"s.name",[66,10937,3019],{"class":72},[66,10939,10940],{"class":76},"s.age",[66,10942,3019],{"class":72},[66,10944,10945],{"class":76},"s.score",[66,10947,3019],{"class":72},[66,10949,3041],{"class":76},[66,10951,10952],{"class":68,"line":418},[66,10953,3407],{"class":76},[66,10955,10956,10958,10960],{"class":68,"line":430},[66,10957,2003],{"class":72},[66,10959,3803],{"class":3793},[66,10961,7789],{"class":76},[66,10963,10964],{"class":68,"line":438},[66,10965,3388],{"class":76},[66,10967,10968,10971,10973,10975,10977,10979,10981,10983,10985],{"class":68,"line":465},[66,10969,10970],{"class":76},"    Student s",[66,10972,99],{"class":72},[66,10974,451],{"class":76},[66,10976,9727],{"class":356},[66,10978,2362],{"class":76},[66,10980,2629],{"class":102},[66,10982,2362],{"class":76},[66,10984,2629],{"class":102},[66,10986,5812],{"class":76},[66,10988,10989,10992],{"class":68,"line":1805},[66,10990,10991],{"class":3793},"    printStudent",[66,10993,10796],{"class":76},[66,10995,10996],{"class":68,"line":1817},[66,10997,109],{"emptyLinePlaceholder":108},[66,10999,11000],{"class":68,"line":1822},[66,11001,3407],{"class":76},[19,11003,841],{},[2982,11005,11006,11009,11012],{},[34,11007,11008],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[34,11010,11011],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[34,11013,11014],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[57,11016,11018],{"className":1989,"code":11017,"language":1991,"meta":62,"style":62},"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",[23,11019,11020,11039,11043,11048,11068],{"__ignoreMap":62},[66,11021,11022,11024,11026,11028,11030,11033,11035,11037],{"class":68,"line":69},[66,11023,7176],{"class":72},[66,11025,10913],{"class":3793},[66,11027,348],{"class":76},[66,11029,8603],{"class":72},[66,11031,11032],{"class":3793}," student",[66,11034,8329],{"class":72},[66,11036,2674],{"class":1234},[66,11038,313],{"class":76},[66,11040,11041],{"class":68,"line":80},[66,11042,3388],{"class":76},[66,11044,11045],{"class":68,"line":112},[66,11046,11047],{"class":758},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[66,11049,11050,11052,11054,11056,11058,11060,11062,11064,11066],{"class":68,"line":129},[66,11051,3393],{"class":76},[66,11053,3019],{"class":72},[66,11055,10935],{"class":76},[66,11057,3019],{"class":72},[66,11059,10940],{"class":76},[66,11061,3019],{"class":72},[66,11063,10945],{"class":76},[66,11065,3019],{"class":72},[66,11067,3041],{"class":76},[66,11069,11070],{"class":68,"line":138},[66,11071,3407],{"class":76},[14,11073,11075],{"id":11074},"_47案例","4.7案例",[31,11077,11078],{},[34,11079,11080],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[57,11082,11084],{"className":1989,"code":11083,"language":1991,"meta":62,"style":62},"#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",[23,11085,11086,11092,11102,11108,11115,11119,11125,11129,11134,11140,11146,11150,11154,11160,11164,11169,11174,11187,11191,11196,11222,11226,11238,11264,11268,11280,11289,11293,11298,11326,11330,11342,11351,11378,11389,11399,11403,11407,11411,11416,11440,11444,11468,11472,11491,11517,11521,11546,11569,11593,11598,11603,11608,11617,11622,11628,11649,11655,11669,11675,11702,11711,11717,11725,11730],{"__ignoreMap":62},[66,11087,11088,11090],{"class":68,"line":69},[66,11089,3779],{"class":72},[66,11091,3782],{"class":356},[66,11093,11094,11096,11098,11100],{"class":68,"line":80},[66,11095,3787],{"class":72},[66,11097,3790],{"class":72},[66,11099,3794],{"class":3793},[66,11101,3135],{"class":76},[66,11103,11104,11106],{"class":68,"line":112},[66,11105,3779],{"class":72},[66,11107,9560],{"class":356},[66,11109,11110,11112],{"class":68,"line":129},[66,11111,3779],{"class":72},[66,11113,11114],{"class":356},"\u003Cctime>\n",[66,11116,11117],{"class":68,"line":138},[66,11118,10349],{"class":758},[66,11120,11121,11123],{"class":68,"line":227},[66,11122,9570],{"class":72},[66,11124,9573],{"class":3793},[66,11126,11127],{"class":68,"line":236},[66,11128,3388],{"class":76},[66,11130,11131],{"class":68,"line":241},[66,11132,11133],{"class":76},"    string sName;\n",[66,11135,11136,11138],{"class":68,"line":372},[66,11137,3814],{"class":72},[66,11139,9608],{"class":76},[66,11141,11142,11144],{"class":68,"line":377},[66,11143,3814],{"class":72},[66,11145,9620],{"class":76},[66,11147,11148],{"class":68,"line":392},[66,11149,5812],{"class":76},[66,11151,11152],{"class":68,"line":405},[66,11153,10386],{"class":758},[66,11155,11156,11158],{"class":68,"line":418},[66,11157,9570],{"class":72},[66,11159,10393],{"class":3793},[66,11161,11162],{"class":68,"line":430},[66,11163,3388],{"class":76},[66,11165,11166],{"class":68,"line":438},[66,11167,11168],{"class":76},"    string tName;\n",[66,11170,11171],{"class":68,"line":465},[66,11172,11173],{"class":758},"    \u002F\u002F学生数组\n",[66,11175,11176,11178,11180,11183,11185],{"class":68,"line":1805},[66,11177,9706],{"class":72},[66,11179,9709],{"class":3793},[66,11181,11182],{"class":76}," sArray[",[66,11184,752],{"class":102},[66,11186,6506],{"class":76},[66,11188,11189],{"class":68,"line":1817},[66,11190,5812],{"class":76},[66,11192,11193],{"class":68,"line":1822},[66,11194,11195],{"class":758},"\u002F\u002F给老师和学生赋值的函数\n",[66,11197,11198,11200,11203,11205,11207,11210,11213,11216,11218,11220],{"class":68,"line":1829},[66,11199,7176],{"class":72},[66,11201,11202],{"class":3793}," allocateSpace",[66,11204,348],{"class":76},[66,11206,9570],{"class":72},[66,11208,11209],{"class":3793}," Teacher",[66,11211,11212],{"class":1234}," tArray",[66,11214,11215],{"class":76},"[],",[66,11217,2003],{"class":72},[66,11219,9142],{"class":1234},[66,11221,313],{"class":76},[66,11223,11224],{"class":68,"line":3529},[66,11225,3388],{"class":76},[66,11227,11228,11231,11233,11236],{"class":68,"line":3557},[66,11229,11230],{"class":76},"    string nameSeed",[66,11232,99],{"class":72},[66,11234,11235],{"class":356},"\"ABCDE\"",[66,11237,3135],{"class":76},[66,11239,11240,11242,11244,11246,11248,11250,11252,11255,11257,11260,11262],{"class":68,"line":3562},[66,11241,1083],{"class":72},[66,11243,3492],{"class":76},[66,11245,2003],{"class":72},[66,11247,117],{"class":76},[66,11249,99],{"class":72},[66,11251,962],{"class":102},[66,11253,11254],{"class":76},"; i ",[66,11256,413],{"class":72},[66,11258,11259],{"class":76}," len; i",[66,11261,4118],{"class":72},[66,11263,313],{"class":76},[66,11265,11266],{"class":68,"line":3579},[66,11267,3859],{"class":76},[66,11269,11270,11273,11275,11278],{"class":68,"line":3584},[66,11271,11272],{"class":76},"        tArray[i].tName ",[66,11274,99],{"class":72},[66,11276,11277],{"class":356}," \"Teacher_\"",[66,11279,3135],{"class":76},[66,11281,11282,11284,11286],{"class":68,"line":3589},[66,11283,11272],{"class":76},[66,11285,144],{"class":72},[66,11287,11288],{"class":76},"nameSeed[i];\n",[66,11290,11291],{"class":68,"line":3594},[66,11292,109],{"emptyLinePlaceholder":108},[66,11294,11295],{"class":68,"line":3608},[66,11296,11297],{"class":758},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[66,11299,11300,11302,11304,11306,11308,11310,11312,11315,11317,11319,11322,11324],{"class":68,"line":3613},[66,11301,5222],{"class":72},[66,11303,3492],{"class":76},[66,11305,2003],{"class":72},[66,11307,1086],{"class":76},[66,11309,99],{"class":72},[66,11311,962],{"class":102},[66,11313,11314],{"class":76},"; j ",[66,11316,413],{"class":72},[66,11318,123],{"class":102},[66,11320,11321],{"class":76},"; j",[66,11323,4118],{"class":72},[66,11325,313],{"class":76},[66,11327,11328],{"class":68,"line":4401},[66,11329,4334],{"class":76},[66,11331,11332,11335,11337,11340],{"class":68,"line":4415},[66,11333,11334],{"class":76},"            tArray[i].sArray[j].sName ",[66,11336,99],{"class":72},[66,11338,11339],{"class":356}," \"Student_\"",[66,11341,3135],{"class":76},[66,11343,11344,11346,11348],{"class":68,"line":4423},[66,11345,11334],{"class":76},[66,11347,144],{"class":72},[66,11349,11350],{"class":76}," nameSeed[j];\n",[66,11352,11353,11356,11359,11361,11363,11365,11367,11369,11371,11373,11375],{"class":68,"line":4428},[66,11354,11355],{"class":72},"            int",[66,11357,11358],{"class":76}," random",[66,11360,99],{"class":72},[66,11362,4248],{"class":3793},[66,11364,4251],{"class":76},[66,11366,953],{"class":72},[66,11368,2885],{"class":102},[66,11370,1184],{"class":72},[66,11372,2385],{"class":102},[66,11374,2051],{"class":76},[66,11376,11377],{"class":758},"\u002F\u002F40~99\n",[66,11379,11380,11383,11385,11387],{"class":68,"line":4434},[66,11381,11382],{"class":76},"            tArray[i].sArray[j].age ",[66,11384,99],{"class":72},[66,11386,10761],{"class":102},[66,11388,3135],{"class":76},[66,11390,11391,11394,11396],{"class":68,"line":4440},[66,11392,11393],{"class":76},"            tArray[i].sArray[j].score ",[66,11395,99],{"class":72},[66,11397,11398],{"class":76}," random;\n",[66,11400,11401],{"class":68,"line":4445},[66,11402,4353],{"class":76},[66,11404,11405],{"class":68,"line":9759},[66,11406,4013],{"class":76},[66,11408,11409],{"class":68,"line":9783},[66,11410,3407],{"class":76},[66,11412,11413],{"class":68,"line":9788},[66,11414,11415],{"class":758},"\u002F\u002F打印所有信息的函数\n",[66,11417,11418,11420,11423,11425,11427,11429,11431,11434,11436,11438],{"class":68,"line":9794},[66,11419,7176],{"class":72},[66,11421,11422],{"class":3793}," printInfo",[66,11424,348],{"class":76},[66,11426,9570],{"class":72},[66,11428,11209],{"class":3793},[66,11430,11212],{"class":1234},[66,11432,11433],{"class":76},"[], ",[66,11435,2003],{"class":72},[66,11437,9142],{"class":1234},[66,11439,313],{"class":76},[66,11441,11442],{"class":68,"line":9821},[66,11443,3388],{"class":76},[66,11445,11446,11448,11450,11452,11454,11456,11458,11460,11462,11464,11466],{"class":68,"line":9826},[66,11447,1083],{"class":72},[66,11449,3492],{"class":76},[66,11451,2003],{"class":72},[66,11453,117],{"class":76},[66,11455,99],{"class":72},[66,11457,962],{"class":102},[66,11459,11254],{"class":76},[66,11461,413],{"class":72},[66,11463,11259],{"class":76},[66,11465,4118],{"class":72},[66,11467,313],{"class":76},[66,11469,11470],{"class":68,"line":9832},[66,11471,3859],{"class":76},[66,11473,11474,11477,11479,11482,11484,11487,11489],{"class":68,"line":9844},[66,11475,11476],{"class":76},"        cout ",[66,11478,3019],{"class":72},[66,11480,11481],{"class":356}," \"Teacher: \"",[66,11483,3286],{"class":72},[66,11485,11486],{"class":76}," tArray[i].tName ",[66,11488,3019],{"class":72},[66,11490,10651],{"class":76},[66,11492,11493,11495,11497,11499,11501,11503,11505,11507,11509,11511,11513,11515],{"class":68,"line":9856},[66,11494,5222],{"class":72},[66,11496,3492],{"class":76},[66,11498,2003],{"class":72},[66,11500,1086],{"class":76},[66,11502,99],{"class":72},[66,11504,962],{"class":102},[66,11506,11314],{"class":76},[66,11508,413],{"class":72},[66,11510,123],{"class":102},[66,11512,11321],{"class":76},[66,11514,4118],{"class":72},[66,11516,313],{"class":76},[66,11518,11519],{"class":68,"line":9868},[66,11520,4334],{"class":76},[66,11522,11524,11527,11529,11532,11534,11537,11539,11542,11544],{"class":68,"line":11523},47,[66,11525,11526],{"class":76},"            cout ",[66,11528,3019],{"class":72},[66,11530,11531],{"class":356}," \"",[66,11533,1242],{"class":102},[66,11535,11536],{"class":356},"Student: \"",[66,11538,3286],{"class":72},[66,11540,11541],{"class":76}," tArray[i].sArray[j].sName",[66,11543,3019],{"class":72},[66,11545,3041],{"class":76},[66,11547,11549,11551,11553,11555,11557,11560,11562,11565,11567],{"class":68,"line":11548},48,[66,11550,11526],{"class":76},[66,11552,3019],{"class":72},[66,11554,11531],{"class":356},[66,11556,1242],{"class":102},[66,11558,11559],{"class":356},"Age: \"",[66,11561,3286],{"class":72},[66,11563,11564],{"class":76}," tArray[i].sArray[j].age ",[66,11566,3019],{"class":72},[66,11568,10651],{"class":76},[66,11570,11572,11574,11576,11578,11580,11583,11585,11588,11590],{"class":68,"line":11571},49,[66,11573,11526],{"class":76},[66,11575,3019],{"class":72},[66,11577,11531],{"class":356},[66,11579,1242],{"class":102},[66,11581,11582],{"class":356},"Score: \"",[66,11584,3286],{"class":72},[66,11586,11587],{"class":76}," tArray[i].sArray[j].score ",[66,11589,3019],{"class":72},[66,11591,11592],{"class":76}," endl;   \n",[66,11594,11596],{"class":68,"line":11595},50,[66,11597,4353],{"class":76},[66,11599,11601],{"class":68,"line":11600},51,[66,11602,4013],{"class":76},[66,11604,11606],{"class":68,"line":11605},52,[66,11607,3407],{"class":76},[66,11609,11611,11613,11615],{"class":68,"line":11610},53,[66,11612,2003],{"class":72},[66,11614,3803],{"class":3793},[66,11616,1253],{"class":76},[66,11618,11620],{"class":68,"line":11619},54,[66,11621,3388],{"class":76},[66,11623,11625],{"class":68,"line":11624},55,[66,11626,11627],{"class":758},"    \u002F\u002F随机数种子\n",[66,11629,11631,11633,11635,11637,11639,11641,11643,11645,11647],{"class":68,"line":11630},56,[66,11632,4199],{"class":3793},[66,11634,4202],{"class":76},[66,11636,4205],{"class":72},[66,11638,345],{"class":72},[66,11640,2413],{"class":76},[66,11642,4212],{"class":3793},[66,11644,348],{"class":76},[66,11646,4217],{"class":102},[66,11648,4220],{"class":76},[66,11650,11652],{"class":68,"line":11651},57,[66,11653,11654],{"class":758},"    \u002F\u002F1.创建3名老师的数组\n",[66,11656,11658,11660,11662,11665,11667],{"class":68,"line":11657},58,[66,11659,9706],{"class":72},[66,11661,11209],{"class":3793},[66,11663,11664],{"class":76}," tArray[",[66,11666,1520],{"class":102},[66,11668,6506],{"class":76},[66,11670,11672],{"class":68,"line":11671},59,[66,11673,11674],{"class":758},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[66,11676,11678,11680,11683,11685,11688,11691,11693,11695,11698,11700],{"class":68,"line":11677},60,[66,11679,3814],{"class":72},[66,11681,11682],{"class":76}," len ",[66,11684,99],{"class":72},[66,11686,11687],{"class":72}," sizeof",[66,11689,11690],{"class":76},"(tArray) ",[66,11692,2563],{"class":72},[66,11694,11687],{"class":72},[66,11696,11697],{"class":76},"(tArray[",[66,11699,2183],{"class":102},[66,11701,5673],{"class":76},[66,11703,11705,11708],{"class":68,"line":11704},61,[66,11706,11707],{"class":3793},"    allocateSpace",[66,11709,11710],{"class":76},"(tArray, len);\n",[66,11712,11714],{"class":68,"line":11713},62,[66,11715,11716],{"class":758},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[66,11718,11720,11723],{"class":68,"line":11719},63,[66,11721,11722],{"class":3793},"    printInfo",[66,11724,11710],{"class":76},[66,11726,11728],{"class":68,"line":11727},64,[66,11729,109],{"emptyLinePlaceholder":108},[66,11731,11733],{"class":68,"line":11732},65,[66,11734,3407],{"class":76},[31,11736,11737],{"start":80},[34,11738,11739,11742],{},[2141,11740,11741],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,11744,11745],{},"五名英雄信息如下：",[57,11747,11751],{"className":11748,"code":11749,"language":11750,"meta":62,"style":62},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[23,11752,11753,11771,11788,11805,11822],{"__ignoreMap":62},[66,11754,11755,11757,11760,11762,11764,11766,11769],{"class":68,"line":69},[66,11756,6733],{"class":76},[66,11758,11759],{"class":356},"\"刘备\"",[66,11761,2362],{"class":76},[66,11763,2754],{"class":102},[66,11765,2362],{"class":76},[66,11767,11768],{"class":356},"\"男\"",[66,11770,6746],{"class":76},[66,11772,11773,11775,11778,11780,11782,11784,11786],{"class":68,"line":80},[66,11774,6733],{"class":76},[66,11776,11777],{"class":356},"\"关羽\"",[66,11779,2362],{"class":76},[66,11781,2729],{"class":102},[66,11783,2362],{"class":76},[66,11785,11768],{"class":356},[66,11787,6746],{"class":76},[66,11789,11790,11792,11795,11797,11799,11801,11803],{"class":68,"line":112},[66,11791,6733],{"class":76},[66,11793,11794],{"class":356},"\"张飞\"",[66,11796,2362],{"class":76},[66,11798,2679],{"class":102},[66,11800,2362],{"class":76},[66,11802,11768],{"class":356},[66,11804,6746],{"class":76},[66,11806,11807,11809,11812,11814,11816,11818,11820],{"class":68,"line":129},[66,11808,6733],{"class":76},[66,11810,11811],{"class":356},"\"赵云\"",[66,11813,2362],{"class":76},[66,11815,2704],{"class":102},[66,11817,2362],{"class":76},[66,11819,11768],{"class":356},[66,11821,6746],{"class":76},[66,11823,11824,11826,11829,11831,11833,11835,11838],{"class":68,"line":138},[66,11825,6733],{"class":76},[66,11827,11828],{"class":356},"\"貂蝉\"",[66,11830,2362],{"class":76},[66,11832,2654],{"class":102},[66,11834,2362],{"class":76},[66,11836,11837],{"class":356},"\"女\"",[66,11839,6746],{"class":76},[19,11841,1486],{},[57,11843,11845],{"className":1989,"code":11844,"language":1991,"meta":62,"style":62},"#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",[23,11846,11847,11853,11863,11869,11876,11880,11884,11890,11895,11899,11904,11927,11931,11956,11960,11993,11998,12027,12032,12047,12073,12093,12098,12103,12107,12111,12116,12138,12142,12166,12170,12232,12236,12240,12248,12252,12257,12268,12272,12288,12304,12320,12336,12352,12356,12376,12398,12403,12416,12423,12428,12434,12439,12452,12458],{"__ignoreMap":62},[66,11848,11849,11851],{"class":68,"line":69},[66,11850,3779],{"class":72},[66,11852,3782],{"class":356},[66,11854,11855,11857,11859,11861],{"class":68,"line":80},[66,11856,3787],{"class":72},[66,11858,3790],{"class":72},[66,11860,3794],{"class":3793},[66,11862,3135],{"class":76},[66,11864,11865,11867],{"class":68,"line":112},[66,11866,3779],{"class":72},[66,11868,9560],{"class":356},[66,11870,11871,11873],{"class":68,"line":129},[66,11872,9570],{"class":72},[66,11874,11875],{"class":3793}," Sanguo\n",[66,11877,11878],{"class":68,"line":138},[66,11879,3388],{"class":76},[66,11881,11882],{"class":68,"line":227},[66,11883,9596],{"class":76},[66,11885,11886,11888],{"class":68,"line":236},[66,11887,3814],{"class":72},[66,11889,9608],{"class":76},[66,11891,11892],{"class":68,"line":241},[66,11893,11894],{"class":76},"    string gender;\n",[66,11896,11897],{"class":68,"line":372},[66,11898,5812],{"class":76},[66,11900,11901],{"class":68,"line":377},[66,11902,11903],{"class":758},"\u002F\u002F定义排序函数\n",[66,11905,11906,11908,11910,11912,11915,11917,11919,11921,11923,11925],{"class":68,"line":392},[66,11907,7176],{"class":72},[66,11909,9127],{"class":3793},[66,11911,348],{"class":76},[66,11913,11914],{"class":3793},"Sanguo",[66,11916,8329],{"class":72},[66,11918,2674],{"class":1234},[66,11920,2362],{"class":76},[66,11922,2003],{"class":72},[66,11924,9142],{"class":1234},[66,11926,313],{"class":76},[66,11928,11929],{"class":68,"line":405},[66,11930,3388],{"class":76},[66,11932,11933,11935,11937,11939,11941,11943,11945,11947,11949,11952,11954],{"class":68,"line":418},[66,11934,1083],{"class":72},[66,11936,348],{"class":76},[66,11938,2003],{"class":72},[66,11940,1596],{"class":76},[66,11942,99],{"class":72},[66,11944,2183],{"class":102},[66,11946,4860],{"class":76},[66,11948,413],{"class":72},[66,11950,11951],{"class":76},"len;i",[66,11953,4118],{"class":72},[66,11955,313],{"class":76},[66,11957,11958],{"class":68,"line":430},[66,11959,3859],{"class":76},[66,11961,11962,11965,11967,11969,11971,11973,11975,11977,11979,11981,11983,11985,11987,11989,11991],{"class":68,"line":438},[66,11963,11964],{"class":72},"     for",[66,11966,3492],{"class":76},[66,11968,2003],{"class":72},[66,11970,1225],{"class":76},[66,11972,99],{"class":72},[66,11974,2183],{"class":102},[66,11976,5235],{"class":76},[66,11978,413],{"class":72},[66,11980,9169],{"class":76},[66,11982,2511],{"class":72},[66,11984,304],{"class":102},[66,11986,2511],{"class":72},[66,11988,5368],{"class":76},[66,11990,4118],{"class":72},[66,11992,313],{"class":76},[66,11994,11995],{"class":68,"line":465},[66,11996,11997],{"class":76},"     {\n",[66,11999,12000,12003,12006,12008,12011,12013,12016,12018,12020,12022,12024],{"class":68,"line":1805},[66,12001,12002],{"class":72},"         if",[66,12004,12005],{"class":76}," ((s",[66,12007,1184],{"class":72},[66,12009,12010],{"class":76},"j)->age ",[66,12012,386],{"class":72},[66,12014,12015],{"class":76}," (s",[66,12017,1184],{"class":72},[66,12019,1125],{"class":76},[66,12021,1184],{"class":72},[66,12023,304],{"class":102},[66,12025,12026],{"class":76},")->age)\n",[66,12028,12029],{"class":68,"line":1817},[66,12030,12031],{"class":76},"         {\n",[66,12033,12034,12037,12039,12042,12044],{"class":68,"line":1822},[66,12035,12036],{"class":76},"             Sanguo temp",[66,12038,8964],{"class":72},[66,12040,12041],{"class":76},"(s",[66,12043,1184],{"class":72},[66,12045,12046],{"class":76},"j);\n",[66,12048,12049,12052,12054,12056,12059,12061,12063,12065,12067,12069,12071],{"class":68,"line":1829},[66,12050,12051],{"class":72},"             *",[66,12053,12041],{"class":76},[66,12055,1184],{"class":72},[66,12057,12058],{"class":76},"j)",[66,12060,8964],{"class":72},[66,12062,12041],{"class":76},[66,12064,1184],{"class":72},[66,12066,1125],{"class":76},[66,12068,1184],{"class":72},[66,12070,304],{"class":102},[66,12072,4543],{"class":76},[66,12074,12075,12077,12079,12081,12083,12085,12087,12089,12091],{"class":68,"line":3529},[66,12076,12051],{"class":72},[66,12078,12041],{"class":76},[66,12080,1184],{"class":72},[66,12082,1125],{"class":76},[66,12084,1184],{"class":72},[66,12086,304],{"class":102},[66,12088,2413],{"class":76},[66,12090,99],{"class":72},[66,12092,6096],{"class":76},[66,12094,12095],{"class":68,"line":3557},[66,12096,12097],{"class":76},"         }\n",[66,12099,12100],{"class":68,"line":3562},[66,12101,12102],{"class":76},"     }\n",[66,12104,12105],{"class":68,"line":3579},[66,12106,4013],{"class":76},[66,12108,12109],{"class":68,"line":3584},[66,12110,3407],{"class":76},[66,12112,12113],{"class":68,"line":3589},[66,12114,12115],{"class":758},"\u002F\u002F定义打印函数\n",[66,12117,12118,12120,12122,12124,12126,12128,12130,12132,12134,12136],{"class":68,"line":3594},[66,12119,7176],{"class":72},[66,12121,11422],{"class":3793},[66,12123,348],{"class":76},[66,12125,11914],{"class":3793},[66,12127,8329],{"class":72},[66,12129,2674],{"class":1234},[66,12131,2362],{"class":76},[66,12133,2003],{"class":72},[66,12135,9142],{"class":1234},[66,12137,313],{"class":76},[66,12139,12140],{"class":68,"line":3608},[66,12141,3388],{"class":76},[66,12143,12144,12146,12148,12150,12152,12154,12156,12158,12160,12162,12164],{"class":68,"line":3613},[66,12145,1083],{"class":72},[66,12147,3492],{"class":76},[66,12149,2003],{"class":72},[66,12151,1596],{"class":76},[66,12153,99],{"class":72},[66,12155,2183],{"class":102},[66,12157,4860],{"class":76},[66,12159,413],{"class":72},[66,12161,11951],{"class":76},[66,12163,4118],{"class":72},[66,12165,313],{"class":76},[66,12167,12168],{"class":68,"line":4401},[66,12169,3859],{"class":76},[66,12171,12172,12174,12176,12178,12180,12183,12185,12187,12189,12192,12194,12196,12198,12201,12203,12205,12207,12210,12212,12214,12216,12219,12221,12223,12225,12228,12230],{"class":68,"line":4415},[66,12173,5269],{"class":76},[66,12175,3019],{"class":72},[66,12177,1130],{"class":356},[66,12179,1242],{"class":102},[66,12181,12182],{"class":356},"姓名：\"",[66,12184,3019],{"class":72},[66,12186,12041],{"class":76},[66,12188,1184],{"class":72},[66,12190,12191],{"class":76},"i)->name",[66,12193,3019],{"class":72},[66,12195,1130],{"class":356},[66,12197,1242],{"class":102},[66,12199,12200],{"class":356},"年龄：\"",[66,12202,3019],{"class":72},[66,12204,12041],{"class":76},[66,12206,1184],{"class":72},[66,12208,12209],{"class":76},"i)->age",[66,12211,3019],{"class":72},[66,12213,1130],{"class":356},[66,12215,1242],{"class":102},[66,12217,12218],{"class":356},"性别：\"",[66,12220,3019],{"class":72},[66,12222,12041],{"class":76},[66,12224,1184],{"class":72},[66,12226,12227],{"class":76},"i)->gender",[66,12229,3019],{"class":72},[66,12231,3041],{"class":76},[66,12233,12234],{"class":68,"line":4423},[66,12235,4013],{"class":76},[66,12237,12238],{"class":68,"line":4428},[66,12239,3407],{"class":76},[66,12241,12242,12244,12246],{"class":68,"line":4434},[66,12243,2003],{"class":72},[66,12245,3803],{"class":3793},[66,12247,1253],{"class":76},[66,12249,12250],{"class":68,"line":4440},[66,12251,3388],{"class":76},[66,12253,12254],{"class":68,"line":4445},[66,12255,12256],{"class":758},"    \u002F\u002F定义结构体变量\n",[66,12258,12259,12262,12264,12266],{"class":68,"line":9759},[66,12260,12261],{"class":76},"    Sanguo s1[",[66,12263,752],{"class":102},[66,12265,2917],{"class":76},[66,12267,6724],{"class":72},[66,12269,12270],{"class":68,"line":9783},[66,12271,3859],{"class":76},[66,12273,12274,12276,12278,12280,12282,12284,12286],{"class":68,"line":9788},[66,12275,6733],{"class":76},[66,12277,11759],{"class":356},[66,12279,2362],{"class":76},[66,12281,2754],{"class":102},[66,12283,2362],{"class":76},[66,12285,11768],{"class":356},[66,12287,6746],{"class":76},[66,12289,12290,12292,12294,12296,12298,12300,12302],{"class":68,"line":9794},[66,12291,6733],{"class":76},[66,12293,11777],{"class":356},[66,12295,2362],{"class":76},[66,12297,2729],{"class":102},[66,12299,2362],{"class":76},[66,12301,11768],{"class":356},[66,12303,6746],{"class":76},[66,12305,12306,12308,12310,12312,12314,12316,12318],{"class":68,"line":9821},[66,12307,6733],{"class":76},[66,12309,11794],{"class":356},[66,12311,2362],{"class":76},[66,12313,2679],{"class":102},[66,12315,2362],{"class":76},[66,12317,11768],{"class":356},[66,12319,6746],{"class":76},[66,12321,12322,12324,12326,12328,12330,12332,12334],{"class":68,"line":9826},[66,12323,6733],{"class":76},[66,12325,11811],{"class":356},[66,12327,2362],{"class":76},[66,12329,2704],{"class":102},[66,12331,2362],{"class":76},[66,12333,11768],{"class":356},[66,12335,6746],{"class":76},[66,12337,12338,12340,12342,12344,12346,12348,12350],{"class":68,"line":9832},[66,12339,6733],{"class":76},[66,12341,11828],{"class":356},[66,12343,2362],{"class":76},[66,12345,2654],{"class":102},[66,12347,2362],{"class":76},[66,12349,11837],{"class":356},[66,12351,6746],{"class":76},[66,12353,12354],{"class":68,"line":9844},[66,12355,6767],{"class":76},[66,12357,12358,12360,12362,12364,12367,12369,12372,12374],{"class":68,"line":9856},[66,12359,3814],{"class":72},[66,12361,9142],{"class":76},[66,12363,6019],{"class":72},[66,12365,12366],{"class":76},"(s1)",[66,12368,6025],{"class":72},[66,12370,12371],{"class":76},"(s1[",[66,12373,2183],{"class":102},[66,12375,5673],{"class":76},[66,12377,12378,12381,12383,12386,12388,12391,12394,12396],{"class":68,"line":9868},[66,12379,12380],{"class":76},"    Sanguo ",[66,12382,1208],{"class":72},[66,12384,12385],{"class":76},"s ",[66,12387,99],{"class":72},[66,12389,12390],{"class":72}," &",[66,12392,12393],{"class":76},"s1[",[66,12395,2183],{"class":102},[66,12397,6506],{"class":76},[66,12399,12400],{"class":68,"line":11523},[66,12401,12402],{"class":758},"    \u002F\u002F排序前：\n",[66,12404,12405,12407,12409,12412,12414],{"class":68,"line":11548},[66,12406,8340],{"class":76},[66,12408,3019],{"class":72},[66,12410,12411],{"class":356}," \"排序前：\"",[66,12413,3286],{"class":72},[66,12415,10651],{"class":76},[66,12417,12418,12420],{"class":68,"line":11571},[66,12419,11722],{"class":3793},[66,12421,12422],{"class":76},"(s,len);\n",[66,12424,12425],{"class":68,"line":11595},[66,12426,12427],{"class":758},"    \u002F\u002F调用排序函数\n",[66,12429,12430,12432],{"class":68,"line":11600},[66,12431,9409],{"class":3793},[66,12433,12422],{"class":76},[66,12435,12436],{"class":68,"line":11605},[66,12437,12438],{"class":758},"    \u002F\u002F排序后\n",[66,12440,12441,12443,12445,12448,12450],{"class":68,"line":11610},[66,12442,8340],{"class":76},[66,12444,3019],{"class":72},[66,12446,12447],{"class":356}," \"排序后：\"",[66,12449,3286],{"class":72},[66,12451,10651],{"class":76},[66,12453,12454,12456],{"class":68,"line":11619},[66,12455,11722],{"class":3793},[66,12457,12422],{"class":76},[66,12459,12460],{"class":68,"line":11624},[66,12461,3407],{"class":76},[19,12463,12464,12465,12467],{},"注意：使用指针时直接用传首地址**&s",[66,12466,2183],{},"**",[1903,12469,12470],{},"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":62,"searchDepth":80,"depth":80,"links":12472},[12473,12474,12475,12476,12477,12478,12479],{"id":9514,"depth":80,"text":9515},{"id":9876,"depth":80,"text":9877},{"id":10145,"depth":80,"text":10146},{"id":10310,"depth":80,"text":10311},{"id":10526,"depth":80,"text":10527},{"id":10846,"depth":80,"text":10847},{"id":11074,"depth":80,"text":11075},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":9503,"description":9511},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":12486,"title":12487,"body":12488,"description":62,"extension":1927,"meta":13831,"navigation":108,"path":13832,"seo":13833,"stem":13834,"__hash__":13835},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":12489,"toc":13825},[12490,12493,12497,12503,12517,12522,12525,12529,12536,12542,12545,12552,12558,12563,12566,12569,12572,13136,13139,13153,13157,13162,13178,13318,13321,13327,13330,13335,13343,13451,13454,13459,13462,13467,13470,13476,13479,13822],[10,12491,12487],{"id":12492},"_5程序内存模型",[14,12494,12496],{"id":12495},"_51内存分区模型","5.1内存分区模型",[19,12498,12499,12500],{},"C++程序在执行时，将内存大方向划分为",[2141,12501,12502],{},"4个区域",[2982,12504,12505,12508,12511,12514],{},[34,12506,12507],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[34,12509,12510],{},"全局区：存放全局变量和静态变量以及常量",[34,12512,12513],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[34,12515,12516],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,12518,12519],{},[2141,12520,12521],{},"内存四区意义：",[19,12523,12524],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[484,12526,12528],{"id":12527},"_511程序运行前","5.1.1程序运行前",[19,12530,12531,12532,12535],{},"​\t在程序编译后，生成了exe可执行程序，",[2141,12533,12534],{},"未执行该程序前","分为两个区域",[19,12537,12538,12539],{},"​\t",[2141,12540,12541],{},"代码区：",[19,12543,12544],{},"​\t\t存放 CPU 执行的机器指令",[19,12546,12547,12548,12551],{},"​\t\t代码区是",[2141,12549,12550],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,12553,12547,12554,12557],{},[2141,12555,12556],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,12559,12538,12560],{},[2141,12561,12562],{},"全局区：",[19,12564,12565],{},"​\t\t全局变量和静态变量存放在此.",[19,12567,12568],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,12570,12571],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[57,12573,12575],{"className":1989,"code":12574,"language":1991,"meta":62,"style":62},"\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",[23,12576,12577,12582,12595,12608,12612,12617,12632,12647,12651,12660,12664,12669,12682,12695,12699,12704,12730,12756,12760,12787,12813,12817,12822,12838,12853,12857,12883,12909,12913,12938,12963,12967,12993,13019,13023,13039,13054,13080,13106,13110,13120,13124,13132],{"__ignoreMap":62},[66,12578,12579],{"class":68,"line":69},[66,12580,12581],{"class":758},"\u002F\u002F全局变量\n",[66,12583,12584,12586,12589,12591,12593],{"class":68,"line":80},[66,12585,2003],{"class":72},[66,12587,12588],{"class":76}," g_a ",[66,12590,99],{"class":72},[66,12592,1335],{"class":102},[66,12594,3135],{"class":76},[66,12596,12597,12599,12602,12604,12606],{"class":68,"line":112},[66,12598,2003],{"class":72},[66,12600,12601],{"class":76}," g_b ",[66,12603,99],{"class":72},[66,12605,1335],{"class":102},[66,12607,3135],{"class":76},[66,12609,12610],{"class":68,"line":129},[66,12611,109],{"emptyLinePlaceholder":108},[66,12613,12614],{"class":68,"line":138},[66,12615,12616],{"class":758},"\u002F\u002F全局常量\n",[66,12618,12619,12621,12623,12626,12628,12630],{"class":68,"line":227},[66,12620,8603],{"class":72},[66,12622,345],{"class":72},[66,12624,12625],{"class":76}," c_g_a ",[66,12627,99],{"class":72},[66,12629,1335],{"class":102},[66,12631,3135],{"class":76},[66,12633,12634,12636,12638,12641,12643,12645],{"class":68,"line":236},[66,12635,8603],{"class":72},[66,12637,345],{"class":72},[66,12639,12640],{"class":76}," c_g_b ",[66,12642,99],{"class":72},[66,12644,1335],{"class":102},[66,12646,3135],{"class":76},[66,12648,12649],{"class":68,"line":241},[66,12650,109],{"emptyLinePlaceholder":108},[66,12652,12653,12655,12657],{"class":68,"line":372},[66,12654,2003],{"class":72},[66,12656,3803],{"class":3793},[66,12658,12659],{"class":76},"() {\n",[66,12661,12662],{"class":68,"line":377},[66,12663,109],{"emptyLinePlaceholder":108},[66,12665,12666],{"class":68,"line":392},[66,12667,12668],{"class":758},"    \u002F\u002F局部变量\n",[66,12670,12671,12673,12676,12678,12680],{"class":68,"line":405},[66,12672,3814],{"class":72},[66,12674,12675],{"class":76}," a ",[66,12677,99],{"class":72},[66,12679,1335],{"class":102},[66,12681,3135],{"class":76},[66,12683,12684,12686,12689,12691,12693],{"class":68,"line":418},[66,12685,3814],{"class":72},[66,12687,12688],{"class":76}," b ",[66,12690,99],{"class":72},[66,12692,1335],{"class":102},[66,12694,3135],{"class":76},[66,12696,12697],{"class":68,"line":430},[66,12698,109],{"emptyLinePlaceholder":108},[66,12700,12701],{"class":68,"line":438},[66,12702,12703],{"class":758},"    \u002F\u002F打印地址\n",[66,12705,12706,12708,12710,12713,12715,12717,12719,12721,12723,12726,12728],{"class":68,"line":465},[66,12707,8340],{"class":76},[66,12709,3019],{"class":72},[66,12711,12712],{"class":356}," \"局部变量a地址为： \"",[66,12714,3286],{"class":72},[66,12716,3492],{"class":76},[66,12718,2003],{"class":72},[66,12720,2413],{"class":76},[66,12722,2337],{"class":72},[66,12724,12725],{"class":76},"a ",[66,12727,3019],{"class":72},[66,12729,10651],{"class":76},[66,12731,12732,12734,12736,12739,12741,12743,12745,12747,12749,12752,12754],{"class":68,"line":1805},[66,12733,8340],{"class":76},[66,12735,3019],{"class":72},[66,12737,12738],{"class":356}," \"局部变量b地址为： \"",[66,12740,3286],{"class":72},[66,12742,3492],{"class":76},[66,12744,2003],{"class":72},[66,12746,2413],{"class":76},[66,12748,2337],{"class":72},[66,12750,12751],{"class":76},"b ",[66,12753,3019],{"class":72},[66,12755,10651],{"class":76},[66,12757,12758],{"class":68,"line":1817},[66,12759,109],{"emptyLinePlaceholder":108},[66,12761,12762,12764,12766,12769,12771,12774,12776,12778,12780,12783,12785],{"class":68,"line":1822},[66,12763,8340],{"class":76},[66,12765,3019],{"class":72},[66,12767,12768],{"class":356}," \"全局变量g_a地址为： \"",[66,12770,3286],{"class":72},[66,12772,12773],{"class":76},"  (",[66,12775,2003],{"class":72},[66,12777,2413],{"class":76},[66,12779,2337],{"class":72},[66,12781,12782],{"class":76},"g_a ",[66,12784,3019],{"class":72},[66,12786,10651],{"class":76},[66,12788,12789,12791,12793,12796,12798,12800,12802,12804,12806,12809,12811],{"class":68,"line":1829},[66,12790,8340],{"class":76},[66,12792,3019],{"class":72},[66,12794,12795],{"class":356}," \"全局变量g_b地址为： \"",[66,12797,3286],{"class":72},[66,12799,12773],{"class":76},[66,12801,2003],{"class":72},[66,12803,2413],{"class":76},[66,12805,2337],{"class":72},[66,12807,12808],{"class":76},"g_b ",[66,12810,3019],{"class":72},[66,12812,10651],{"class":76},[66,12814,12815],{"class":68,"line":3529},[66,12816,109],{"emptyLinePlaceholder":108},[66,12818,12819],{"class":68,"line":3557},[66,12820,12821],{"class":758},"    \u002F\u002F静态变量\n",[66,12823,12824,12827,12829,12832,12834,12836],{"class":68,"line":3562},[66,12825,12826],{"class":72},"    static",[66,12828,345],{"class":72},[66,12830,12831],{"class":76}," s_a ",[66,12833,99],{"class":72},[66,12835,1335],{"class":102},[66,12837,3135],{"class":76},[66,12839,12840,12842,12844,12847,12849,12851],{"class":68,"line":3579},[66,12841,12826],{"class":72},[66,12843,345],{"class":72},[66,12845,12846],{"class":76}," s_b ",[66,12848,99],{"class":72},[66,12850,1335],{"class":102},[66,12852,3135],{"class":76},[66,12854,12855],{"class":68,"line":3584},[66,12856,109],{"emptyLinePlaceholder":108},[66,12858,12859,12861,12863,12866,12868,12870,12872,12874,12876,12879,12881],{"class":68,"line":3589},[66,12860,8340],{"class":76},[66,12862,3019],{"class":72},[66,12864,12865],{"class":356}," \"静态变量s_a地址为： \"",[66,12867,3286],{"class":72},[66,12869,3492],{"class":76},[66,12871,2003],{"class":72},[66,12873,2413],{"class":76},[66,12875,2337],{"class":72},[66,12877,12878],{"class":76},"s_a ",[66,12880,3019],{"class":72},[66,12882,10651],{"class":76},[66,12884,12885,12887,12889,12892,12894,12896,12898,12900,12902,12905,12907],{"class":68,"line":3594},[66,12886,8340],{"class":76},[66,12888,3019],{"class":72},[66,12890,12891],{"class":356}," \"静态变量s_b地址为： \"",[66,12893,3286],{"class":72},[66,12895,3492],{"class":76},[66,12897,2003],{"class":72},[66,12899,2413],{"class":76},[66,12901,2337],{"class":72},[66,12903,12904],{"class":76},"s_b ",[66,12906,3019],{"class":72},[66,12908,10651],{"class":76},[66,12910,12911],{"class":68,"line":3608},[66,12912,109],{"emptyLinePlaceholder":108},[66,12914,12915,12917,12919,12922,12924,12926,12928,12930,12932,12934,12936],{"class":68,"line":3613},[66,12916,8340],{"class":76},[66,12918,3019],{"class":72},[66,12920,12921],{"class":356}," \"字符串常量地址为： \"",[66,12923,3286],{"class":72},[66,12925,3492],{"class":76},[66,12927,2003],{"class":72},[66,12929,2413],{"class":76},[66,12931,2337],{"class":72},[66,12933,3036],{"class":356},[66,12935,3286],{"class":72},[66,12937,10651],{"class":76},[66,12939,12940,12942,12944,12946,12948,12950,12952,12954,12956,12959,12961],{"class":68,"line":4401},[66,12941,8340],{"class":76},[66,12943,3019],{"class":72},[66,12945,12921],{"class":356},[66,12947,3286],{"class":72},[66,12949,3492],{"class":76},[66,12951,2003],{"class":72},[66,12953,2413],{"class":76},[66,12955,2337],{"class":72},[66,12957,12958],{"class":356},"\"hello world1\"",[66,12960,3286],{"class":72},[66,12962,10651],{"class":76},[66,12964,12965],{"class":68,"line":4415},[66,12966,109],{"emptyLinePlaceholder":108},[66,12968,12969,12971,12973,12976,12978,12980,12982,12984,12986,12989,12991],{"class":68,"line":4423},[66,12970,8340],{"class":76},[66,12972,3019],{"class":72},[66,12974,12975],{"class":356}," \"全局常量c_g_a地址为： \"",[66,12977,3286],{"class":72},[66,12979,3492],{"class":76},[66,12981,2003],{"class":72},[66,12983,2413],{"class":76},[66,12985,2337],{"class":72},[66,12987,12988],{"class":76},"c_g_a ",[66,12990,3019],{"class":72},[66,12992,10651],{"class":76},[66,12994,12995,12997,12999,13002,13004,13006,13008,13010,13012,13015,13017],{"class":68,"line":4428},[66,12996,8340],{"class":76},[66,12998,3019],{"class":72},[66,13000,13001],{"class":356}," \"全局常量c_g_b地址为： \"",[66,13003,3286],{"class":72},[66,13005,3492],{"class":76},[66,13007,2003],{"class":72},[66,13009,2413],{"class":76},[66,13011,2337],{"class":72},[66,13013,13014],{"class":76},"c_g_b ",[66,13016,3019],{"class":72},[66,13018,10651],{"class":76},[66,13020,13021],{"class":68,"line":4434},[66,13022,109],{"emptyLinePlaceholder":108},[66,13024,13025,13028,13030,13033,13035,13037],{"class":68,"line":4440},[66,13026,13027],{"class":72},"    const",[66,13029,345],{"class":72},[66,13031,13032],{"class":76}," c_l_a ",[66,13034,99],{"class":72},[66,13036,1335],{"class":102},[66,13038,3135],{"class":76},[66,13040,13041,13043,13045,13048,13050,13052],{"class":68,"line":4445},[66,13042,13027],{"class":72},[66,13044,345],{"class":72},[66,13046,13047],{"class":76}," c_l_b ",[66,13049,99],{"class":72},[66,13051,1335],{"class":102},[66,13053,3135],{"class":76},[66,13055,13056,13058,13060,13063,13065,13067,13069,13071,13073,13076,13078],{"class":68,"line":9759},[66,13057,8340],{"class":76},[66,13059,3019],{"class":72},[66,13061,13062],{"class":356}," \"局部常量c_l_a地址为： \"",[66,13064,3286],{"class":72},[66,13066,3492],{"class":76},[66,13068,2003],{"class":72},[66,13070,2413],{"class":76},[66,13072,2337],{"class":72},[66,13074,13075],{"class":76},"c_l_a ",[66,13077,3019],{"class":72},[66,13079,10651],{"class":76},[66,13081,13082,13084,13086,13089,13091,13093,13095,13097,13099,13102,13104],{"class":68,"line":9783},[66,13083,8340],{"class":76},[66,13085,3019],{"class":72},[66,13087,13088],{"class":356}," \"局部常量c_l_b地址为： \"",[66,13090,3286],{"class":72},[66,13092,3492],{"class":76},[66,13094,2003],{"class":72},[66,13096,2413],{"class":76},[66,13098,2337],{"class":72},[66,13100,13101],{"class":76},"c_l_b ",[66,13103,3019],{"class":72},[66,13105,10651],{"class":76},[66,13107,13108],{"class":68,"line":9788},[66,13109,109],{"emptyLinePlaceholder":108},[66,13111,13112,13114,13116,13118],{"class":68,"line":9794},[66,13113,4129],{"class":3793},[66,13115,348],{"class":76},[66,13117,4134],{"class":356},[66,13119,4543],{"class":76},[66,13121,13122],{"class":68,"line":9821},[66,13123,109],{"emptyLinePlaceholder":108},[66,13125,13126,13128,13130],{"class":68,"line":9826},[66,13127,5907],{"class":72},[66,13129,962],{"class":102},[66,13131,3135],{"class":76},[66,13133,13134],{"class":68,"line":9832},[66,13135,3407],{"class":76},[19,13137,13138],{},"总结：",[2982,13140,13141,13144,13147,13150],{},[34,13142,13143],{},"c++中程序运行前分为全局区和代码区",[34,13145,13146],{},"代码区特点是共享和只读",[34,13148,13149],{},"全局区中存放全局变量、静态变量、常量",[34,13151,13152],{},"常量区中存放const修饰的全局常量和字符串常量",[484,13154,13156],{"id":13155},"_512程序运行后","5.1.2程序运行后",[31,13158,13159],{},[34,13160,13161],{},"栈区：",[2982,13163,13164,13171],{},[34,13165,13166,13167,13170],{},"由编译器自动分配释放, 存放",[2141,13168,13169],{},"函数的参数值,局部变量","等",[34,13172,13173,13174,13177],{},"注意事项：",[2141,13175,13176],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[57,13179,13181],{"className":1989,"code":13180,"language":1991,"meta":62,"style":62},"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",[23,13182,13183,13194,13198,13213,13225,13229,13233,13241,13246,13261,13279,13296,13306,13314],{"__ignoreMap":62},[66,13184,13185,13187,13189,13192],{"class":68,"line":69},[66,13186,2003],{"class":72},[66,13188,8329],{"class":72},[66,13190,13191],{"class":3793}," func",[66,13193,1253],{"class":76},[66,13195,13196],{"class":68,"line":80},[66,13197,3388],{"class":76},[66,13199,13200,13202,13204,13206,13208,13210],{"class":68,"line":112},[66,13201,3814],{"class":72},[66,13203,12675],{"class":76},[66,13205,99],{"class":72},[66,13207,1335],{"class":102},[66,13209,2051],{"class":76},[66,13211,13212],{"class":758}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[66,13214,13215,13217,13219,13222],{"class":68,"line":129},[66,13216,5907],{"class":72},[66,13218,12390],{"class":72},[66,13220,13221],{"class":76},"a;",[66,13223,13224],{"class":758}," \u002F\u002F放回局部变量的地址\n",[66,13226,13227],{"class":68,"line":138},[66,13228,3407],{"class":76},[66,13230,13231],{"class":68,"line":227},[66,13232,109],{"emptyLinePlaceholder":108},[66,13234,13235,13237,13239],{"class":68,"line":236},[66,13236,2003],{"class":72},[66,13238,3803],{"class":3793},[66,13240,12659],{"class":76},[66,13242,13243],{"class":68,"line":241},[66,13244,13245],{"class":758},"    \u002F\u002F接受func的返回值\n",[66,13247,13248,13250,13252,13255,13257,13259],{"class":68,"line":372},[66,13249,3814],{"class":72},[66,13251,8329],{"class":72},[66,13253,13254],{"class":76},"p ",[66,13256,99],{"class":72},[66,13258,13191],{"class":3793},[66,13260,7448],{"class":76},[66,13262,13263,13265,13267,13269,13271,13273,13276],{"class":68,"line":377},[66,13264,8340],{"class":76},[66,13266,3019],{"class":72},[66,13268,8329],{"class":72},[66,13270,13254],{"class":76},[66,13272,3019],{"class":72},[66,13274,13275],{"class":76}," endl;",[66,13277,13278],{"class":758}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[66,13280,13281,13283,13285,13287,13289,13291,13293],{"class":68,"line":392},[66,13282,8340],{"class":76},[66,13284,3019],{"class":72},[66,13286,8329],{"class":72},[66,13288,13254],{"class":76},[66,13290,3019],{"class":72},[66,13292,13275],{"class":76},[66,13294,13295],{"class":758}," \u002F\u002F第二次这个数据不再保留\n",[66,13297,13298,13300,13302,13304],{"class":68,"line":405},[66,13299,4129],{"class":3793},[66,13301,348],{"class":76},[66,13303,4134],{"class":356},[66,13305,4543],{"class":76},[66,13307,13308,13310,13312],{"class":68,"line":418},[66,13309,5907],{"class":72},[66,13311,962],{"class":102},[66,13313,3135],{"class":76},[66,13315,13316],{"class":68,"line":430},[66,13317,3407],{"class":76},[19,13319,13320],{},"输出结果：",[19,13322,13323],{},[3304,13324],{"alt":13325,"src":13326},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,13328,13329],{},"总结：不要返回局部变量的地址",[31,13331,13332],{"start":80},[34,13333,13334],{},"堆区",[2982,13336,13337,13340],{},[34,13338,13339],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[34,13341,13342],{},"在c++中主要利用new在堆区开辟内存",[57,13344,13346],{"className":1989,"code":13345,"language":1991,"meta":62,"style":62},"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",[23,13347,13348,13363,13367,13372,13393,13400,13404,13412,13416,13421,13435,13447],{"__ignoreMap":62},[66,13349,13350,13352,13355,13358,13360],{"class":68,"line":69},[66,13351,2003],{"class":72},[66,13353,13354],{"class":72},"  *",[66,13356,13357],{"class":3793},"func",[66,13359,4251],{"class":76},[66,13361,13362],{"class":758},"  \u002F\u002F函数返回指针\n",[66,13364,13365],{"class":68,"line":80},[66,13366,3388],{"class":76},[66,13368,13369],{"class":68,"line":112},[66,13370,13371],{"class":758},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[66,13373,13374,13376,13378,13380,13382,13385,13387,13389,13391],{"class":68,"line":129},[66,13375,5963],{"class":72},[66,13377,8329],{"class":72},[66,13379,19],{"class":76},[66,13381,99],{"class":72},[66,13383,13384],{"class":72}," new",[66,13386,345],{"class":72},[66,13388,348],{"class":76},[66,13390,790],{"class":102},[66,13392,4543],{"class":76},[66,13394,13395,13397],{"class":68,"line":138},[66,13396,6197],{"class":72},[66,13398,13399],{"class":76}," p;\n",[66,13401,13402],{"class":68,"line":227},[66,13403,3407],{"class":76},[66,13405,13406,13408,13410],{"class":68,"line":236},[66,13407,2003],{"class":72},[66,13409,3803],{"class":3793},[66,13411,1253],{"class":76},[66,13413,13414],{"class":68,"line":241},[66,13415,3388],{"class":76},[66,13417,13418],{"class":68,"line":372},[66,13419,13420],{"class":758},"    \u002F\u002F在堆区开辟数据\n",[66,13422,13423,13425,13427,13429,13431,13433],{"class":68,"line":377},[66,13424,3814],{"class":72},[66,13426,8329],{"class":72},[66,13428,19],{"class":76},[66,13430,99],{"class":72},[66,13432,13357],{"class":3793},[66,13434,7448],{"class":76},[66,13436,13437,13439,13441,13443,13445],{"class":68,"line":392},[66,13438,3393],{"class":76},[66,13440,8230],{"class":72},[66,13442,19],{"class":76},[66,13444,3019],{"class":72},[66,13446,3041],{"class":76},[66,13448,13449],{"class":68,"line":405},[66,13450,3407],{"class":76},[19,13452,13453],{},"图片展示：",[19,13455,13456],{},[3304,13457],{"alt":13325,"src":13458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,13460,13461],{},"堆区内存由程序员管生死！！！",[31,13463,13464],{"start":112},[34,13465,13466],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,13468,13469],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,13471,13472,13473],{},"​语法：",[23,13474,13475],{}," new 数据类型",[19,13477,13478],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[57,13480,13482],{"className":1989,"code":13481,"language":1991,"meta":62,"style":62},"\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",[23,13483,13484,13489,13499,13503,13508,13513,13535,13539,13547,13551,13565,13577,13589,13601,13606,13611,13622,13626,13631,13639,13643,13648,13670,13696,13700,13718,13722,13748,13752,13764,13768,13773,13778,13786,13790,13794,13802,13806,13812,13818],{"__ignoreMap":62},[66,13485,13486],{"class":68,"line":69},[66,13487,13488],{"class":758},"\u002F\u002F1.new的基本语法\n",[66,13490,13491,13493,13495,13497],{"class":68,"line":80},[66,13492,2003],{"class":72},[66,13494,8329],{"class":72},[66,13496,13357],{"class":3793},[66,13498,1253],{"class":76},[66,13500,13501],{"class":68,"line":112},[66,13502,3388],{"class":76},[66,13504,13505],{"class":68,"line":129},[66,13506,13507],{"class":758},"    \u002F\u002F在堆区创建整型数据\n",[66,13509,13510],{"class":68,"line":138},[66,13511,13512],{"class":758},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[66,13514,13515,13517,13519,13521,13524,13526,13528,13530,13532],{"class":68,"line":227},[66,13516,3814],{"class":72},[66,13518,8329],{"class":72},[66,13520,19],{"class":76},[66,13522,13523],{"class":72},"=new",[66,13525,345],{"class":72},[66,13527,348],{"class":76},[66,13529,790],{"class":102},[66,13531,7777],{"class":76},[66,13533,13534],{"class":758},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[66,13536,13537],{"class":68,"line":236},[66,13538,3407],{"class":76},[66,13540,13541,13543,13545],{"class":68,"line":241},[66,13542,7176],{"class":72},[66,13544,7400],{"class":3793},[66,13546,1253],{"class":76},[66,13548,13549],{"class":68,"line":372},[66,13550,3388],{"class":76},[66,13552,13553,13555,13557,13559,13561,13563],{"class":68,"line":377},[66,13554,3814],{"class":72},[66,13556,8329],{"class":72},[66,13558,19],{"class":76},[66,13560,99],{"class":72},[66,13562,13357],{"class":3793},[66,13564,7448],{"class":76},[66,13566,13567,13569,13571,13573,13575],{"class":68,"line":392},[66,13568,3393],{"class":76},[66,13570,8230],{"class":72},[66,13572,19],{"class":76},[66,13574,3019],{"class":72},[66,13576,3041],{"class":76},[66,13578,13579,13581,13583,13585,13587],{"class":68,"line":405},[66,13580,3393],{"class":76},[66,13582,8230],{"class":72},[66,13584,19],{"class":76},[66,13586,3019],{"class":72},[66,13588,3041],{"class":76},[66,13590,13591,13593,13595,13597,13599],{"class":68,"line":418},[66,13592,3393],{"class":76},[66,13594,8230],{"class":72},[66,13596,19],{"class":76},[66,13598,3019],{"class":72},[66,13600,3041],{"class":76},[66,13602,13603],{"class":68,"line":430},[66,13604,13605],{"class":758},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[66,13607,13608],{"class":68,"line":438},[66,13609,13610],{"class":758},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[66,13612,13613,13616,13619],{"class":68,"line":465},[66,13614,13615],{"class":72},"    delete",[66,13617,13618],{"class":76}," p;",[66,13620,13621],{"class":758},"\u002F\u002F删除这块地址\n",[66,13623,13624],{"class":68,"line":1805},[66,13625,3407],{"class":76},[66,13627,13628],{"class":68,"line":1817},[66,13629,13630],{"class":758},"\u002F\u002F2.在堆区利用new开辟数组\n",[66,13632,13633,13635,13637],{"class":68,"line":1822},[66,13634,7176],{"class":72},[66,13636,7469],{"class":3793},[66,13638,1253],{"class":76},[66,13640,13641],{"class":68,"line":1829},[66,13642,3388],{"class":76},[66,13644,13645],{"class":68,"line":3529},[66,13646,13647],{"class":758},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[66,13649,13650,13652,13654,13656,13658,13660,13662,13664,13667],{"class":68,"line":3557},[66,13651,3814],{"class":72},[66,13653,8329],{"class":72},[66,13655,5697],{"class":76},[66,13657,13523],{"class":72},[66,13659,345],{"class":72},[66,13661,2869],{"class":76},[66,13663,790],{"class":102},[66,13665,13666],{"class":76},"];",[66,13668,13669],{"class":758},"\u002F\u002F10代表数组有10个元素\n",[66,13671,13672,13674,13676,13678,13680,13682,13684,13686,13688,13690,13692,13694],{"class":68,"line":3562},[66,13673,1083],{"class":72},[66,13675,3492],{"class":76},[66,13677,2003],{"class":72},[66,13679,1596],{"class":76},[66,13681,99],{"class":72},[66,13683,2183],{"class":102},[66,13685,4860],{"class":76},[66,13687,413],{"class":72},[66,13689,790],{"class":102},[66,13691,4860],{"class":76},[66,13693,4118],{"class":72},[66,13695,313],{"class":76},[66,13697,13698],{"class":68,"line":3579},[66,13699,3859],{"class":76},[66,13701,13702,13705,13707,13709,13711,13713,13715],{"class":68,"line":3584},[66,13703,13704],{"class":76},"        arr[i]",[66,13706,99],{"class":72},[66,13708,257],{"class":76},[66,13710,1184],{"class":72},[66,13712,310],{"class":102},[66,13714,2051],{"class":76},[66,13716,13717],{"class":758},"\u002F\u002F给10个元素赋值100～109\n",[66,13719,13720],{"class":68,"line":3589},[66,13721,4013],{"class":76},[66,13723,13724,13726,13728,13730,13732,13734,13736,13738,13740,13742,13744,13746],{"class":68,"line":3594},[66,13725,1083],{"class":72},[66,13727,3492],{"class":76},[66,13729,2003],{"class":72},[66,13731,1596],{"class":76},[66,13733,99],{"class":72},[66,13735,2183],{"class":102},[66,13737,4860],{"class":76},[66,13739,413],{"class":72},[66,13741,790],{"class":102},[66,13743,4860],{"class":76},[66,13745,4118],{"class":72},[66,13747,313],{"class":76},[66,13749,13750],{"class":68,"line":3608},[66,13751,3859],{"class":76},[66,13753,13754,13756,13758,13760,13762],{"class":68,"line":3613},[66,13755,5269],{"class":76},[66,13757,3019],{"class":72},[66,13759,6170],{"class":76},[66,13761,3019],{"class":72},[66,13763,3041],{"class":76},[66,13765,13766],{"class":68,"line":4401},[66,13767,4013],{"class":76},[66,13769,13770],{"class":68,"line":4415},[66,13771,13772],{"class":758},"    \u002F\u002F释放堆区数组\n",[66,13774,13775],{"class":68,"line":4423},[66,13776,13777],{"class":758},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[66,13779,13780,13783],{"class":68,"line":4428},[66,13781,13782],{"class":72},"    delete[]",[66,13784,13785],{"class":76}," arr;\n",[66,13787,13788],{"class":68,"line":4434},[66,13789,3407],{"class":76},[66,13791,13792],{"class":68,"line":4440},[66,13793,109],{"emptyLinePlaceholder":108},[66,13795,13796,13798,13800],{"class":68,"line":4445},[66,13797,2003],{"class":72},[66,13799,3803],{"class":3793},[66,13801,1253],{"class":76},[66,13803,13804],{"class":68,"line":9759},[66,13805,3388],{"class":76},[66,13807,13808,13810],{"class":68,"line":9783},[66,13809,7445],{"class":3793},[66,13811,7448],{"class":76},[66,13813,13814,13816],{"class":68,"line":9788},[66,13815,7514],{"class":3793},[66,13817,7448],{"class":76},[66,13819,13820],{"class":68,"line":9794},[66,13821,3407],{"class":76},[1903,13823,13824],{},"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":62,"searchDepth":80,"depth":80,"links":13826},[13827],{"id":12495,"depth":80,"text":12496,"children":13828},[13829,13830],{"id":12527,"depth":112,"text":12528},{"id":13155,"depth":112,"text":13156},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":12487,"description":62},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":13837,"title":13838,"body":13839,"description":62,"extension":1927,"meta":15319,"navigation":108,"path":15320,"seo":15321,"stem":15322,"__hash__":15323},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":13840,"toc":15311},[13841,13844,13848,13851,13854,14023,14027,14032,14049,14054,14206,14210,14213,14216,14609,14613,14616,14621,14624,14936,14940,14946,15106,15108,15116,15120,15123,15130,15308],[10,13842,13838],{"id":13843},"_6引用",[14,13845,13847],{"id":13846},"_61引用基本用法","6.1引用基本用法",[19,13849,13850],{},"引用的本质：给变量起别名",[19,13852,13853],{},"语法：数据类型 &别名=原名",[57,13855,13857],{"className":1989,"code":13856,"language":1991,"meta":62,"style":62},"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",[23,13858,13859,13867,13871,13883,13895,13899,13918,13937,13941,13952,13956,13975,13993,13997,14007,14011,14019],{"__ignoreMap":62},[66,13860,13861,13863,13865],{"class":68,"line":69},[66,13862,2003],{"class":72},[66,13864,3803],{"class":3793},[66,13866,12659],{"class":76},[66,13868,13869],{"class":68,"line":80},[66,13870,109],{"emptyLinePlaceholder":108},[66,13872,13873,13875,13877,13879,13881],{"class":68,"line":112},[66,13874,3814],{"class":72},[66,13876,12675],{"class":76},[66,13878,99],{"class":72},[66,13880,1335],{"class":102},[66,13882,3135],{"class":76},[66,13884,13885,13887,13889,13891,13893],{"class":68,"line":129},[66,13886,3814],{"class":72},[66,13888,12390],{"class":72},[66,13890,12751],{"class":76},[66,13892,99],{"class":72},[66,13894,3274],{"class":76},[66,13896,13897],{"class":68,"line":138},[66,13898,109],{"emptyLinePlaceholder":108},[66,13900,13901,13903,13905,13908,13910,13912,13914,13916],{"class":68,"line":227},[66,13902,8340],{"class":76},[66,13904,3019],{"class":72},[66,13906,13907],{"class":356}," \"a = \"",[66,13909,3286],{"class":72},[66,13911,12675],{"class":76},[66,13913,3019],{"class":72},[66,13915,13275],{"class":76},[66,13917,9079],{"class":758},[66,13919,13920,13922,13924,13927,13929,13931,13933,13935],{"class":68,"line":236},[66,13921,8340],{"class":76},[66,13923,3019],{"class":72},[66,13925,13926],{"class":356}," \"b = \"",[66,13928,3286],{"class":72},[66,13930,12688],{"class":76},[66,13932,3019],{"class":72},[66,13934,13275],{"class":76},[66,13936,9079],{"class":758},[66,13938,13939],{"class":68,"line":241},[66,13940,109],{"emptyLinePlaceholder":108},[66,13942,13943,13946,13948,13950],{"class":68,"line":372},[66,13944,13945],{"class":76},"    b ",[66,13947,99],{"class":72},[66,13949,212],{"class":102},[66,13951,3135],{"class":76},[66,13953,13954],{"class":68,"line":377},[66,13955,109],{"emptyLinePlaceholder":108},[66,13957,13958,13960,13962,13964,13966,13968,13970,13972],{"class":68,"line":392},[66,13959,8340],{"class":76},[66,13961,3019],{"class":72},[66,13963,13907],{"class":356},[66,13965,3286],{"class":72},[66,13967,12675],{"class":76},[66,13969,3019],{"class":72},[66,13971,13275],{"class":76},[66,13973,13974],{"class":758},"\u002F\u002F100\n",[66,13976,13977,13979,13981,13983,13985,13987,13989,13991],{"class":68,"line":405},[66,13978,8340],{"class":76},[66,13980,3019],{"class":72},[66,13982,13926],{"class":356},[66,13984,3286],{"class":72},[66,13986,12688],{"class":76},[66,13988,3019],{"class":72},[66,13990,13275],{"class":76},[66,13992,13974],{"class":758},[66,13994,13995],{"class":68,"line":418},[66,13996,109],{"emptyLinePlaceholder":108},[66,13998,13999,14001,14003,14005],{"class":68,"line":430},[66,14000,4129],{"class":3793},[66,14002,348],{"class":76},[66,14004,4134],{"class":356},[66,14006,4543],{"class":76},[66,14008,14009],{"class":68,"line":438},[66,14010,109],{"emptyLinePlaceholder":108},[66,14012,14013,14015,14017],{"class":68,"line":465},[66,14014,5907],{"class":72},[66,14016,962],{"class":102},[66,14018,3135],{"class":76},[66,14020,14021],{"class":68,"line":1805},[66,14022,3407],{"class":76},[14,14024,14026],{"id":14025},"_62引用的注意事项","6.2引用的注意事项",[31,14028,14029],{},[34,14030,14031],{},"引用必须要初始化",[57,14033,14035],{"className":1989,"code":14034,"language":1991,"meta":62,"style":62},"int &b;\u002F\u002F非常错误！\n",[23,14036,14037],{"__ignoreMap":62},[66,14038,14039,14041,14043,14046],{"class":68,"line":69},[66,14040,2003],{"class":72},[66,14042,12390],{"class":72},[66,14044,14045],{"class":76},"b;",[66,14047,14048],{"class":758},"\u002F\u002F非常错误！\n",[31,14050,14051],{"start":80},[34,14052,14053],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[57,14055,14057],{"className":1989,"code":14056,"language":1991,"meta":62,"style":62},"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",[23,14058,14059,14067,14079,14091,14099,14115,14128,14146,14164,14184,14194,14202],{"__ignoreMap":62},[66,14060,14061,14063,14065],{"class":68,"line":69},[66,14062,2003],{"class":72},[66,14064,3803],{"class":3793},[66,14066,12659],{"class":76},[66,14068,14069,14071,14073,14075,14077],{"class":68,"line":80},[66,14070,3814],{"class":72},[66,14072,12675],{"class":76},[66,14074,99],{"class":72},[66,14076,1335],{"class":102},[66,14078,3135],{"class":76},[66,14080,14081,14083,14085,14087,14089],{"class":68,"line":112},[66,14082,3814],{"class":72},[66,14084,12688],{"class":76},[66,14086,99],{"class":72},[66,14088,10761],{"class":102},[66,14090,3135],{"class":76},[66,14092,14093,14096],{"class":68,"line":129},[66,14094,14095],{"class":758},"    \u002F\u002Fint &c;",[66,14097,14098],{"class":758}," \u002F\u002F错误，引用必须初始化\n",[66,14100,14101,14103,14105,14107,14109,14112],{"class":68,"line":138},[66,14102,3814],{"class":72},[66,14104,12390],{"class":72},[66,14106,4770],{"class":76},[66,14108,99],{"class":72},[66,14110,14111],{"class":76}," a;",[66,14113,14114],{"class":758}," \u002F\u002F一旦初始化后，就不可以更改\n",[66,14116,14117,14120,14122,14125],{"class":68,"line":227},[66,14118,14119],{"class":76},"    c ",[66,14121,99],{"class":72},[66,14123,14124],{"class":76}," b;",[66,14126,14127],{"class":758}," \u002F\u002F这是赋值操作，不是更改引用\n",[66,14129,14130,14132,14134,14136,14138,14140,14142,14144],{"class":68,"line":236},[66,14131,8340],{"class":76},[66,14133,3019],{"class":72},[66,14135,13907],{"class":356},[66,14137,3286],{"class":72},[66,14139,12675],{"class":76},[66,14141,3019],{"class":72},[66,14143,13275],{"class":76},[66,14145,9064],{"class":758},[66,14147,14148,14150,14152,14154,14156,14158,14160,14162],{"class":68,"line":241},[66,14149,8340],{"class":76},[66,14151,3019],{"class":72},[66,14153,13926],{"class":356},[66,14155,3286],{"class":72},[66,14157,12688],{"class":76},[66,14159,3019],{"class":72},[66,14161,13275],{"class":76},[66,14163,9064],{"class":758},[66,14165,14166,14168,14170,14173,14175,14178,14180,14182],{"class":68,"line":372},[66,14167,8340],{"class":76},[66,14169,3019],{"class":72},[66,14171,14172],{"class":356}," \"c = \"",[66,14174,3286],{"class":72},[66,14176,14177],{"class":76}," c ",[66,14179,3019],{"class":72},[66,14181,13275],{"class":76},[66,14183,9064],{"class":758},[66,14185,14186,14188,14190,14192],{"class":68,"line":377},[66,14187,4129],{"class":3793},[66,14189,348],{"class":76},[66,14191,4134],{"class":356},[66,14193,4543],{"class":76},[66,14195,14196,14198,14200],{"class":68,"line":392},[66,14197,5907],{"class":72},[66,14199,962],{"class":102},[66,14201,3135],{"class":76},[66,14203,14204],{"class":68,"line":405},[66,14205,3407],{"class":76},[14,14207,14209],{"id":14208},"_63引用做函数参数","6.3引用做函数参数",[19,14211,14212],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,14214,14215],{},"优点：可以简化指针修改实参",[57,14217,14219],{"className":1989,"code":14218,"language":1991,"meta":62,"style":62},"\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",[23,14220,14221,14226,14248,14259,14269,14278,14282,14286,14291,14313,14325,14337,14347,14351,14355,14360,14382,14392,14400,14408,14412,14416,14424,14428,14440,14452,14456,14467,14493,14497,14517,14541,14545,14555,14579,14583,14593,14597,14605],{"__ignoreMap":62},[66,14222,14223],{"class":68,"line":69},[66,14224,14225],{"class":758},"\u002F\u002F1. 值传递\n",[66,14227,14228,14230,14233,14235,14237,14239,14241,14243,14245],{"class":68,"line":80},[66,14229,7176],{"class":72},[66,14231,14232],{"class":3793}," mySwap01",[66,14234,348],{"class":76},[66,14236,2003],{"class":72},[66,14238,3240],{"class":1234},[66,14240,307],{"class":76},[66,14242,2003],{"class":72},[66,14244,4657],{"class":1234},[66,14246,14247],{"class":76},") {\n",[66,14249,14250,14252,14255,14257],{"class":68,"line":112},[66,14251,3814],{"class":72},[66,14253,14254],{"class":76}," temp ",[66,14256,99],{"class":72},[66,14258,3274],{"class":76},[66,14260,14261,14264,14266],{"class":68,"line":129},[66,14262,14263],{"class":76},"    a ",[66,14265,99],{"class":72},[66,14267,14268],{"class":76}," b;\n",[66,14270,14271,14273,14275],{"class":68,"line":138},[66,14272,13945],{"class":76},[66,14274,99],{"class":72},[66,14276,14277],{"class":76}," temp;\n",[66,14279,14280],{"class":68,"line":227},[66,14281,3407],{"class":76},[66,14283,14284],{"class":68,"line":236},[66,14285,109],{"emptyLinePlaceholder":108},[66,14287,14288],{"class":68,"line":241},[66,14289,14290],{"class":758},"\u002F\u002F2. 地址传递\n",[66,14292,14293,14295,14298,14300,14303,14305,14307,14309,14311],{"class":68,"line":372},[66,14294,7176],{"class":72},[66,14296,14297],{"class":3793}," mySwap02",[66,14299,348],{"class":76},[66,14301,14302],{"class":72},"int*",[66,14304,3240],{"class":1234},[66,14306,307],{"class":76},[66,14308,14302],{"class":72},[66,14310,4657],{"class":1234},[66,14312,14247],{"class":76},[66,14314,14315,14317,14319,14321,14323],{"class":68,"line":377},[66,14316,3814],{"class":72},[66,14318,14254],{"class":76},[66,14320,99],{"class":72},[66,14322,8329],{"class":72},[66,14324,8008],{"class":76},[66,14326,14327,14329,14331,14333,14335],{"class":68,"line":392},[66,14328,8214],{"class":72},[66,14330,12725],{"class":76},[66,14332,99],{"class":72},[66,14334,8329],{"class":72},[66,14336,7880],{"class":76},[66,14338,14339,14341,14343,14345],{"class":68,"line":405},[66,14340,8214],{"class":72},[66,14342,12751],{"class":76},[66,14344,99],{"class":72},[66,14346,14277],{"class":76},[66,14348,14349],{"class":68,"line":418},[66,14350,3407],{"class":76},[66,14352,14353],{"class":68,"line":430},[66,14354,109],{"emptyLinePlaceholder":108},[66,14356,14357],{"class":68,"line":438},[66,14358,14359],{"class":758},"\u002F\u002F3. 引用传递\n",[66,14361,14362,14364,14367,14369,14372,14374,14376,14378,14380],{"class":68,"line":465},[66,14363,7176],{"class":72},[66,14365,14366],{"class":3793}," mySwap03",[66,14368,348],{"class":76},[66,14370,14371],{"class":72},"int&",[66,14373,3240],{"class":1234},[66,14375,307],{"class":76},[66,14377,14371],{"class":72},[66,14379,4657],{"class":1234},[66,14381,14247],{"class":76},[66,14383,14384,14386,14388,14390],{"class":68,"line":1805},[66,14385,3814],{"class":72},[66,14387,14254],{"class":76},[66,14389,99],{"class":72},[66,14391,3274],{"class":76},[66,14393,14394,14396,14398],{"class":68,"line":1817},[66,14395,14263],{"class":76},[66,14397,99],{"class":72},[66,14399,14268],{"class":76},[66,14401,14402,14404,14406],{"class":68,"line":1822},[66,14403,13945],{"class":76},[66,14405,99],{"class":72},[66,14407,14277],{"class":76},[66,14409,14410],{"class":68,"line":1829},[66,14411,3407],{"class":76},[66,14413,14414],{"class":68,"line":3529},[66,14415,109],{"emptyLinePlaceholder":108},[66,14417,14418,14420,14422],{"class":68,"line":3557},[66,14419,2003],{"class":72},[66,14421,3803],{"class":3793},[66,14423,12659],{"class":76},[66,14425,14426],{"class":68,"line":3562},[66,14427,109],{"emptyLinePlaceholder":108},[66,14429,14430,14432,14434,14436,14438],{"class":68,"line":3579},[66,14431,3814],{"class":72},[66,14433,12675],{"class":76},[66,14435,99],{"class":72},[66,14437,1335],{"class":102},[66,14439,3135],{"class":76},[66,14441,14442,14444,14446,14448,14450],{"class":68,"line":3584},[66,14443,3814],{"class":72},[66,14445,12688],{"class":76},[66,14447,99],{"class":72},[66,14449,10761],{"class":102},[66,14451,3135],{"class":76},[66,14453,14454],{"class":68,"line":3589},[66,14455,109],{"emptyLinePlaceholder":108},[66,14457,14458,14461,14464],{"class":68,"line":3594},[66,14459,14460],{"class":3793},"    mySwap01",[66,14462,14463],{"class":76},"(a, b);",[66,14465,14466],{"class":758},"\u002F\u002F值传递，形参不会修饰实参\n",[66,14468,14469,14471,14473,14476,14478,14480,14482,14485,14487,14489,14491],{"class":68,"line":3608},[66,14470,8340],{"class":76},[66,14472,3019],{"class":72},[66,14474,14475],{"class":356}," \"a:\"",[66,14477,3286],{"class":72},[66,14479,12675],{"class":76},[66,14481,3019],{"class":72},[66,14483,14484],{"class":356}," \" b:\"",[66,14486,3286],{"class":72},[66,14488,12688],{"class":76},[66,14490,3019],{"class":72},[66,14492,10651],{"class":76},[66,14494,14495],{"class":68,"line":3613},[66,14496,109],{"emptyLinePlaceholder":108},[66,14498,14499,14502,14504,14506,14509,14511,14514],{"class":68,"line":4401},[66,14500,14501],{"class":3793},"    mySwap02",[66,14503,348],{"class":76},[66,14505,2337],{"class":72},[66,14507,14508],{"class":76},"a, ",[66,14510,2337],{"class":72},[66,14512,14513],{"class":76},"b);",[66,14515,14516],{"class":758},"\u002F\u002F地址传递，形参会修饰实参\n",[66,14518,14519,14521,14523,14525,14527,14529,14531,14533,14535,14537,14539],{"class":68,"line":4415},[66,14520,8340],{"class":76},[66,14522,3019],{"class":72},[66,14524,14475],{"class":356},[66,14526,3286],{"class":72},[66,14528,12675],{"class":76},[66,14530,3019],{"class":72},[66,14532,14484],{"class":356},[66,14534,3286],{"class":72},[66,14536,12688],{"class":76},[66,14538,3019],{"class":72},[66,14540,10651],{"class":76},[66,14542,14543],{"class":68,"line":4423},[66,14544,109],{"emptyLinePlaceholder":108},[66,14546,14547,14550,14552],{"class":68,"line":4428},[66,14548,14549],{"class":3793},"    mySwap03",[66,14551,14463],{"class":76},[66,14553,14554],{"class":758},"\u002F\u002F引用传递，形参会修饰实参\n",[66,14556,14557,14559,14561,14563,14565,14567,14569,14571,14573,14575,14577],{"class":68,"line":4434},[66,14558,8340],{"class":76},[66,14560,3019],{"class":72},[66,14562,14475],{"class":356},[66,14564,3286],{"class":72},[66,14566,12675],{"class":76},[66,14568,3019],{"class":72},[66,14570,14484],{"class":356},[66,14572,3286],{"class":72},[66,14574,12688],{"class":76},[66,14576,3019],{"class":72},[66,14578,10651],{"class":76},[66,14580,14581],{"class":68,"line":4440},[66,14582,109],{"emptyLinePlaceholder":108},[66,14584,14585,14587,14589,14591],{"class":68,"line":4445},[66,14586,4129],{"class":3793},[66,14588,348],{"class":76},[66,14590,4134],{"class":356},[66,14592,4543],{"class":76},[66,14594,14595],{"class":68,"line":9759},[66,14596,109],{"emptyLinePlaceholder":108},[66,14598,14599,14601,14603],{"class":68,"line":9783},[66,14600,5907],{"class":72},[66,14602,962],{"class":102},[66,14604,3135],{"class":76},[66,14606,14607],{"class":68,"line":9788},[66,14608,3407],{"class":76},[14,14610,14612],{"id":14611},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,14614,14615],{},"作用：引用是可以作为函数的返回值存在的",[19,14617,841,14618],{},[2141,14619,14620],{},"不要返回局部变量引用",[19,14622,14623],{},"用法：函数调用作为左值",[57,14625,14627],{"className":11748,"code":14626,"language":11750,"meta":62,"style":62},"\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",[23,14628,14629,14634,14642,14657,14663,14667,14671,14676,14684,14701,14707,14711,14715,14723,14727,14732,14746,14766,14785,14789,14794,14807,14827,14845,14849,14865,14869,14888,14906,14910,14920,14924,14932],{"__ignoreMap":62},[66,14630,14631],{"class":68,"line":69},[66,14632,14633],{"class":758},"\u002F\u002F返回局部变量引用\n",[66,14635,14636,14638,14640],{"class":68,"line":80},[66,14637,14371],{"class":72},[66,14639,7400],{"class":3793},[66,14641,12659],{"class":76},[66,14643,14644,14646,14648,14650,14652,14654],{"class":68,"line":112},[66,14645,3814],{"class":72},[66,14647,12675],{"class":76},[66,14649,99],{"class":72},[66,14651,1335],{"class":102},[66,14653,2051],{"class":76},[66,14655,14656],{"class":758}," \u002F\u002F局部变量\n",[66,14658,14659,14661],{"class":68,"line":129},[66,14660,5907],{"class":72},[66,14662,3274],{"class":76},[66,14664,14665],{"class":68,"line":138},[66,14666,3407],{"class":76},[66,14668,14669],{"class":68,"line":227},[66,14670,109],{"emptyLinePlaceholder":108},[66,14672,14673],{"class":68,"line":236},[66,14674,14675],{"class":758},"\u002F\u002F返回静态变量引用\n",[66,14677,14678,14680,14682],{"class":68,"line":241},[66,14679,14371],{"class":72},[66,14681,7469],{"class":3793},[66,14683,12659],{"class":76},[66,14685,14686,14688,14690,14692,14694,14696,14698],{"class":68,"line":372},[66,14687,12826],{"class":72},[66,14689,345],{"class":72},[66,14691,12675],{"class":76},[66,14693,99],{"class":72},[66,14695,10761],{"class":102},[66,14697,2051],{"class":76},[66,14699,14700],{"class":758},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[66,14702,14703,14705],{"class":68,"line":377},[66,14704,5907],{"class":72},[66,14706,3274],{"class":76},[66,14708,14709],{"class":68,"line":392},[66,14710,3407],{"class":76},[66,14712,14713],{"class":68,"line":405},[66,14714,109],{"emptyLinePlaceholder":108},[66,14716,14717,14719,14721],{"class":68,"line":418},[66,14718,2003],{"class":72},[66,14720,3803],{"class":3793},[66,14722,12659],{"class":76},[66,14724,14725],{"class":68,"line":430},[66,14726,109],{"emptyLinePlaceholder":108},[66,14728,14729],{"class":68,"line":438},[66,14730,14731],{"class":758},"    \u002F\u002F不能返回局部变量的引用\n",[66,14733,14734,14737,14740,14742,14744],{"class":68,"line":465},[66,14735,14736],{"class":72},"    int&",[66,14738,14739],{"class":76}," ref ",[66,14741,99],{"class":72},[66,14743,7400],{"class":3793},[66,14745,7448],{"class":76},[66,14747,14748,14750,14752,14755,14757,14759,14761,14763],{"class":68,"line":1805},[66,14749,8340],{"class":76},[66,14751,3019],{"class":72},[66,14753,14754],{"class":356}," \"ref = \"",[66,14756,3286],{"class":72},[66,14758,14739],{"class":76},[66,14760,3019],{"class":72},[66,14762,13275],{"class":76},[66,14764,14765],{"class":758},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[66,14767,14768,14770,14772,14774,14776,14778,14780,14782],{"class":68,"line":1817},[66,14769,8340],{"class":76},[66,14771,3019],{"class":72},[66,14773,14754],{"class":356},[66,14775,3286],{"class":72},[66,14777,14739],{"class":76},[66,14779,3019],{"class":72},[66,14781,13275],{"class":76},[66,14783,14784],{"class":758},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[66,14786,14787],{"class":68,"line":1822},[66,14788,109],{"emptyLinePlaceholder":108},[66,14790,14791],{"class":68,"line":1829},[66,14792,14793],{"class":758},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[66,14795,14796,14798,14801,14803,14805],{"class":68,"line":3529},[66,14797,14736],{"class":72},[66,14799,14800],{"class":76}," ref2 ",[66,14802,99],{"class":72},[66,14804,7469],{"class":3793},[66,14806,7448],{"class":76},[66,14808,14809,14811,14813,14816,14818,14820,14822,14824],{"class":68,"line":3557},[66,14810,8340],{"class":76},[66,14812,3019],{"class":72},[66,14814,14815],{"class":356}," \"ref2 = \"",[66,14817,3286],{"class":72},[66,14819,14800],{"class":76},[66,14821,3019],{"class":72},[66,14823,13275],{"class":76},[66,14825,14826],{"class":758}," \u002F\u002F20\n",[66,14828,14829,14831,14833,14835,14837,14839,14841,14843],{"class":68,"line":3562},[66,14830,8340],{"class":76},[66,14832,3019],{"class":72},[66,14834,14815],{"class":356},[66,14836,3286],{"class":72},[66,14838,14800],{"class":76},[66,14840,3019],{"class":72},[66,14842,13275],{"class":76},[66,14844,14826],{"class":758},[66,14846,14847],{"class":68,"line":3579},[66,14848,109],{"emptyLinePlaceholder":108},[66,14850,14851,14853,14856,14858,14860,14862],{"class":68,"line":3584},[66,14852,7514],{"class":3793},[66,14854,14855],{"class":76},"() ",[66,14857,99],{"class":72},[66,14859,4822],{"class":102},[66,14861,2051],{"class":76},[66,14863,14864],{"class":758},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[66,14866,14867],{"class":68,"line":3589},[66,14868,109],{"emptyLinePlaceholder":108},[66,14870,14871,14873,14875,14877,14879,14881,14883,14885],{"class":68,"line":3594},[66,14872,8340],{"class":76},[66,14874,3019],{"class":72},[66,14876,14815],{"class":356},[66,14878,3286],{"class":72},[66,14880,14800],{"class":76},[66,14882,3019],{"class":72},[66,14884,13275],{"class":76},[66,14886,14887],{"class":758}," \u002F\u002F1000\n",[66,14889,14890,14892,14894,14896,14898,14900,14902,14904],{"class":68,"line":3608},[66,14891,8340],{"class":76},[66,14893,3019],{"class":72},[66,14895,14815],{"class":356},[66,14897,3286],{"class":72},[66,14899,14800],{"class":76},[66,14901,3019],{"class":72},[66,14903,13275],{"class":76},[66,14905,14887],{"class":758},[66,14907,14908],{"class":68,"line":3613},[66,14909,109],{"emptyLinePlaceholder":108},[66,14911,14912,14914,14916,14918],{"class":68,"line":4401},[66,14913,4129],{"class":3793},[66,14915,348],{"class":76},[66,14917,4134],{"class":356},[66,14919,4543],{"class":76},[66,14921,14922],{"class":68,"line":4415},[66,14923,109],{"emptyLinePlaceholder":108},[66,14925,14926,14928,14930],{"class":68,"line":4423},[66,14927,5907],{"class":72},[66,14929,962],{"class":102},[66,14931,3135],{"class":76},[66,14933,14934],{"class":68,"line":4428},[66,14935,3407],{"class":76},[14,14937,14939],{"id":14938},"_65引用的本质","6.5引用的本质",[19,14941,14942,14943],{},"本质：",[2141,14944,14945],{},"引用的本质在c++内部实现是一个指针常量.",[57,14947,14949],{"className":1989,"code":14948,"language":1991,"meta":62,"style":62},"\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",[23,14950,14951,14956,14972,14986,14990,14999,15011,15016,15021,15032,15045,15049,15065,15082,15086,15094,15102],{"__ignoreMap":62},[66,14952,14953],{"class":68,"line":69},[66,14954,14955],{"class":758},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[66,14957,14958,14960,14962,14964,14966,14969],{"class":68,"line":80},[66,14959,7176],{"class":72},[66,14961,13191],{"class":3793},[66,14963,348],{"class":76},[66,14965,14371],{"class":72},[66,14967,14968],{"class":1234}," ref",[66,14970,14971],{"class":76},"){\n",[66,14973,14974,14977,14979,14981,14983],{"class":68,"line":112},[66,14975,14976],{"class":76},"    ref ",[66,14978,99],{"class":72},[66,14980,212],{"class":102},[66,14982,2051],{"class":76},[66,14984,14985],{"class":758}," \u002F\u002F ref是引用，转换为*ref = 100\n",[66,14987,14988],{"class":68,"line":129},[66,14989,3407],{"class":76},[66,14991,14992,14994,14996],{"class":68,"line":138},[66,14993,2003],{"class":72},[66,14995,3803],{"class":3793},[66,14997,14998],{"class":76},"(){\n",[66,15000,15001,15003,15005,15007,15009],{"class":68,"line":227},[66,15002,3814],{"class":72},[66,15004,12675],{"class":76},[66,15006,99],{"class":72},[66,15008,1335],{"class":102},[66,15010,3135],{"class":76},[66,15012,15013],{"class":68,"line":236},[66,15014,15015],{"class":76},"    \n",[66,15017,15018],{"class":68,"line":241},[66,15019,15020],{"class":758},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[66,15022,15023,15025,15027,15029],{"class":68,"line":372},[66,15024,14736],{"class":72},[66,15026,14739],{"class":76},[66,15028,99],{"class":72},[66,15030,15031],{"class":76}," a; \n",[66,15033,15034,15036,15038,15040,15042],{"class":68,"line":377},[66,15035,14976],{"class":76},[66,15037,99],{"class":72},[66,15039,10761],{"class":102},[66,15041,2051],{"class":76},[66,15043,15044],{"class":758}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[66,15046,15047],{"class":68,"line":392},[66,15048,15015],{"class":76},[66,15050,15051,15053,15055,15057,15059,15061,15063],{"class":68,"line":405},[66,15052,8340],{"class":76},[66,15054,3019],{"class":72},[66,15056,14475],{"class":356},[66,15058,3286],{"class":72},[66,15060,12675],{"class":76},[66,15062,3019],{"class":72},[66,15064,10651],{"class":76},[66,15066,15067,15069,15071,15074,15076,15078,15080],{"class":68,"line":418},[66,15068,8340],{"class":76},[66,15070,3019],{"class":72},[66,15072,15073],{"class":356}," \"ref:\"",[66,15075,3286],{"class":72},[66,15077,14739],{"class":76},[66,15079,3019],{"class":72},[66,15081,10651],{"class":76},[66,15083,15084],{"class":68,"line":430},[66,15085,15015],{"class":76},[66,15087,15088,15091],{"class":68,"line":438},[66,15089,15090],{"class":3793},"    func",[66,15092,15093],{"class":76},"(a);\n",[66,15095,15096,15098,15100],{"class":68,"line":465},[66,15097,5907],{"class":72},[66,15099,962],{"class":102},[66,15101,3135],{"class":76},[66,15103,15104],{"class":68,"line":1805},[66,15105,3407],{"class":76},[19,15107,13138],{},[31,15109,15110,15113],{},[34,15111,15112],{},"引用的本质，就是一个指针常量",[34,15114,15115],{},"引用一旦初始化，就不可以发生改变",[14,15117,15119],{"id":15118},"_66常量引用","6.6常量引用",[19,15121,15122],{},"作用：常量引用主要用来修饰形参",[19,15124,15125,15126,15129],{},"在函数形参列表中，可以加",[2141,15127,15128],{},"const修饰形参","，防止形参改变实参",[57,15131,15133],{"className":1989,"code":15132,"language":1991,"meta":62,"style":62},"\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",[23,15134,15135,15140,15145,15164,15169,15182,15186,15190,15198,15202,15207,15212,15226,15230,15238,15250,15254,15259,15271,15278,15282,15292,15296,15304],{"__ignoreMap":62},[66,15136,15137],{"class":68,"line":69},[66,15138,15139],{"class":758},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[66,15141,15142],{"class":68,"line":80},[66,15143,15144],{"class":758},"\u002F\u002F加上const就不能修改实参的\n",[66,15146,15147,15149,15152,15154,15156,15159,15162],{"class":68,"line":112},[66,15148,7176],{"class":72},[66,15150,15151],{"class":3793}," showValue",[66,15153,348],{"class":76},[66,15155,8603],{"class":72},[66,15157,15158],{"class":72}," int&",[66,15160,15161],{"class":1234}," v",[66,15163,14247],{"class":76},[66,15165,15166],{"class":68,"line":129},[66,15167,15168],{"class":758},"    \u002F\u002Fv += 100;\n",[66,15170,15171,15173,15175,15178,15180],{"class":68,"line":138},[66,15172,8340],{"class":76},[66,15174,3019],{"class":72},[66,15176,15177],{"class":76}," v ",[66,15179,3019],{"class":72},[66,15181,10651],{"class":76},[66,15183,15184],{"class":68,"line":227},[66,15185,3407],{"class":76},[66,15187,15188],{"class":68,"line":236},[66,15189,109],{"emptyLinePlaceholder":108},[66,15191,15192,15194,15196],{"class":68,"line":241},[66,15193,2003],{"class":72},[66,15195,3803],{"class":3793},[66,15197,12659],{"class":76},[66,15199,15200],{"class":68,"line":372},[66,15201,109],{"emptyLinePlaceholder":108},[66,15203,15204],{"class":68,"line":377},[66,15205,15206],{"class":758},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[66,15208,15209],{"class":68,"line":392},[66,15210,15211],{"class":758},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[66,15213,15214,15216,15218,15220,15222,15224],{"class":68,"line":405},[66,15215,13027],{"class":72},[66,15217,15158],{"class":72},[66,15219,14739],{"class":76},[66,15221,99],{"class":72},[66,15223,1335],{"class":102},[66,15225,3135],{"class":76},[66,15227,15228],{"class":68,"line":418},[66,15229,109],{"emptyLinePlaceholder":108},[66,15231,15232,15235],{"class":68,"line":430},[66,15233,15234],{"class":758},"    \u002F\u002Fref = 100;",[66,15236,15237],{"class":758},"  \u002F\u002F加入const后不可以修改变量\n",[66,15239,15240,15242,15244,15246,15248],{"class":68,"line":438},[66,15241,8340],{"class":76},[66,15243,3019],{"class":72},[66,15245,14739],{"class":76},[66,15247,3019],{"class":72},[66,15249,10651],{"class":76},[66,15251,15252],{"class":68,"line":465},[66,15253,109],{"emptyLinePlaceholder":108},[66,15255,15256],{"class":68,"line":1805},[66,15257,15258],{"class":758},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[66,15260,15261,15263,15265,15267,15269],{"class":68,"line":1817},[66,15262,3814],{"class":72},[66,15264,12675],{"class":76},[66,15266,99],{"class":72},[66,15268,1335],{"class":102},[66,15270,3135],{"class":76},[66,15272,15273,15276],{"class":68,"line":1822},[66,15274,15275],{"class":3793},"    showValue",[66,15277,15093],{"class":76},[66,15279,15280],{"class":68,"line":1829},[66,15281,109],{"emptyLinePlaceholder":108},[66,15283,15284,15286,15288,15290],{"class":68,"line":3529},[66,15285,4129],{"class":3793},[66,15287,348],{"class":76},[66,15289,4134],{"class":356},[66,15291,4543],{"class":76},[66,15293,15294],{"class":68,"line":3557},[66,15295,109],{"emptyLinePlaceholder":108},[66,15297,15298,15300,15302],{"class":68,"line":3562},[66,15299,5907],{"class":72},[66,15301,962],{"class":102},[66,15303,3135],{"class":76},[66,15305,15306],{"class":68,"line":3579},[66,15307,3407],{"class":76},[1903,15309,15310],{},"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":62,"searchDepth":80,"depth":80,"links":15312},[15313,15314,15315,15316,15317,15318],{"id":13846,"depth":80,"text":13847},{"id":14025,"depth":80,"text":14026},{"id":14208,"depth":80,"text":14209},{"id":14611,"depth":80,"text":14612},{"id":14938,"depth":80,"text":14939},{"id":15118,"depth":80,"text":15119},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":13838,"description":62},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":15325,"title":15326,"body":15327,"description":62,"extension":1927,"meta":16408,"navigation":108,"path":16409,"seo":16410,"stem":16411,"__hash__":16412},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":15328,"toc":16400},[15329,15332,15336,15339,15344,15576,15578,15589,15593,15596,15604,15708,15711,15715,15718,15722,15725,15730,15752,15758,16085,16088,16092,16100,16397],[10,15330,15326],{"id":15331},"_7函数高级部分",[14,15333,15335],{"id":15334},"_71函数默认参数","7.1函数默认参数",[19,15337,15338],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,15340,55,15341],{},[23,15342,15343],{}," 返回值类型  函数名 （参数= 默认值）{}",[57,15345,15347],{"className":1989,"code":15346,"language":1991,"meta":62,"style":62},"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",[23,15348,15349,15384,15399,15403,15407,15412,15417,15446,15466,15476,15480,15484,15492,15496,15524,15546,15550,15560,15564,15572],{"__ignoreMap":62},[66,15350,15351,15353,15355,15357,15359,15361,15363,15365,15367,15370,15372,15374,15376,15378,15380,15382],{"class":68,"line":69},[66,15352,2003],{"class":72},[66,15354,13191],{"class":3793},[66,15356,348],{"class":76},[66,15358,2003],{"class":72},[66,15360,3240],{"class":1234},[66,15362,307],{"class":76},[66,15364,2003],{"class":72},[66,15366,4657],{"class":1234},[66,15368,15369],{"class":72}," =",[66,15371,1335],{"class":102},[66,15373,307],{"class":76},[66,15375,2003],{"class":72},[66,15377,4673],{"class":1234},[66,15379,15369],{"class":72},[66,15381,1335],{"class":102},[66,15383,14247],{"class":76},[66,15385,15386,15388,15390,15392,15394,15396],{"class":68,"line":80},[66,15387,5907],{"class":72},[66,15389,12675],{"class":76},[66,15391,1184],{"class":72},[66,15393,12688],{"class":76},[66,15395,1184],{"class":72},[66,15397,15398],{"class":76}," c;\n",[66,15400,15401],{"class":68,"line":112},[66,15402,3407],{"class":76},[66,15404,15405],{"class":68,"line":129},[66,15406,109],{"emptyLinePlaceholder":108},[66,15408,15409],{"class":68,"line":138},[66,15410,15411],{"class":758},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[66,15413,15414],{"class":68,"line":227},[66,15415,15416],{"class":758},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[66,15418,15419,15421,15424,15426,15428,15430,15432,15434,15436,15438,15440,15442,15444],{"class":68,"line":236},[66,15420,2003],{"class":72},[66,15422,15423],{"class":3793}," func2",[66,15425,348],{"class":76},[66,15427,2003],{"class":72},[66,15429,3240],{"class":1234},[66,15431,15369],{"class":72},[66,15433,1335],{"class":102},[66,15435,307],{"class":76},[66,15437,2003],{"class":72},[66,15439,4657],{"class":1234},[66,15441,15369],{"class":72},[66,15443,1335],{"class":102},[66,15445,4543],{"class":76},[66,15447,15448,15450,15452,15454,15456,15458,15460,15462,15464],{"class":68,"line":241},[66,15449,2003],{"class":72},[66,15451,15423],{"class":3793},[66,15453,348],{"class":76},[66,15455,2003],{"class":72},[66,15457,3240],{"class":1234},[66,15459,307],{"class":76},[66,15461,2003],{"class":72},[66,15463,4657],{"class":1234},[66,15465,14247],{"class":76},[66,15467,15468,15470,15472,15474],{"class":68,"line":372},[66,15469,5907],{"class":72},[66,15471,12675],{"class":76},[66,15473,1184],{"class":72},[66,15475,14268],{"class":76},[66,15477,15478],{"class":68,"line":377},[66,15479,3407],{"class":76},[66,15481,15482],{"class":68,"line":392},[66,15483,109],{"emptyLinePlaceholder":108},[66,15485,15486,15488,15490],{"class":68,"line":405},[66,15487,2003],{"class":72},[66,15489,3803],{"class":3793},[66,15491,12659],{"class":76},[66,15493,15494],{"class":68,"line":418},[66,15495,109],{"emptyLinePlaceholder":108},[66,15497,15498,15500,15502,15505,15507,15509,15511,15513,15515,15517,15520,15522],{"class":68,"line":430},[66,15499,8340],{"class":76},[66,15501,3019],{"class":72},[66,15503,15504],{"class":356}," \"ret = \"",[66,15506,3286],{"class":72},[66,15508,13191],{"class":3793},[66,15510,348],{"class":76},[66,15512,2679],{"class":102},[66,15514,307],{"class":76},[66,15516,2679],{"class":102},[66,15518,15519],{"class":76},") ",[66,15521,3019],{"class":72},[66,15523,10651],{"class":76},[66,15525,15526,15528,15530,15532,15534,15536,15538,15540,15542,15544],{"class":68,"line":438},[66,15527,8340],{"class":76},[66,15529,3019],{"class":72},[66,15531,15504],{"class":356},[66,15533,3286],{"class":72},[66,15535,13191],{"class":3793},[66,15537,348],{"class":76},[66,15539,310],{"class":102},[66,15541,15519],{"class":76},[66,15543,3019],{"class":72},[66,15545,10651],{"class":76},[66,15547,15548],{"class":68,"line":465},[66,15549,109],{"emptyLinePlaceholder":108},[66,15551,15552,15554,15556,15558],{"class":68,"line":1805},[66,15553,4129],{"class":3793},[66,15555,348],{"class":76},[66,15557,4134],{"class":356},[66,15559,4543],{"class":76},[66,15561,15562],{"class":68,"line":1817},[66,15563,109],{"emptyLinePlaceholder":108},[66,15565,15566,15568,15570],{"class":68,"line":1822},[66,15567,5907],{"class":72},[66,15569,962],{"class":102},[66,15571,3135],{"class":76},[66,15573,15574],{"class":68,"line":1829},[66,15575,3407],{"class":76},[19,15577,13138],{},[31,15579,15580,15583,15586],{},[34,15581,15582],{},"我传就用我；没传就用你",[34,15584,15585],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[34,15587,15588],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,15590,15592],{"id":15591},"_72函数的占位参数","7.2函数的占位参数",[19,15594,15595],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,15597,15598,15600,15601],{},[2141,15599,55],{}," ",[23,15602,15603],{},"返回值类型 函数名 (数据类型){}",[57,15605,15607],{"className":1989,"code":15606,"language":1991,"meta":62,"style":62},"\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",[23,15608,15609,15614,15632,15645,15649,15657,15661,15678,15682,15692,15696,15704],{"__ignoreMap":62},[66,15610,15611],{"class":68,"line":69},[66,15612,15613],{"class":758},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[66,15615,15616,15618,15620,15622,15624,15626,15628,15630],{"class":68,"line":80},[66,15617,7176],{"class":72},[66,15619,13191],{"class":3793},[66,15621,348],{"class":76},[66,15623,2003],{"class":72},[66,15625,3240],{"class":1234},[66,15627,307],{"class":76},[66,15629,2003],{"class":72},[66,15631,14247],{"class":76},[66,15633,15634,15636,15638,15641,15643],{"class":68,"line":112},[66,15635,8340],{"class":76},[66,15637,3019],{"class":72},[66,15639,15640],{"class":356}," \"this is func\"",[66,15642,3286],{"class":72},[66,15644,10651],{"class":76},[66,15646,15647],{"class":68,"line":129},[66,15648,3407],{"class":76},[66,15650,15651,15653,15655],{"class":68,"line":138},[66,15652,2003],{"class":72},[66,15654,3803],{"class":3793},[66,15656,12659],{"class":76},[66,15658,15659],{"class":68,"line":227},[66,15660,109],{"emptyLinePlaceholder":108},[66,15662,15663,15665,15667,15669,15671,15673,15675],{"class":68,"line":236},[66,15664,15090],{"class":3793},[66,15666,348],{"class":76},[66,15668,790],{"class":102},[66,15670,2362],{"class":76},[66,15672,790],{"class":102},[66,15674,7777],{"class":76},[66,15676,15677],{"class":758}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[66,15679,15680],{"class":68,"line":241},[66,15681,109],{"emptyLinePlaceholder":108},[66,15683,15684,15686,15688,15690],{"class":68,"line":372},[66,15685,4129],{"class":3793},[66,15687,348],{"class":76},[66,15689,4134],{"class":356},[66,15691,4543],{"class":76},[66,15693,15694],{"class":68,"line":377},[66,15695,109],{"emptyLinePlaceholder":108},[66,15697,15698,15700,15702],{"class":68,"line":392},[66,15699,5907],{"class":72},[66,15701,962],{"class":102},[66,15703,3135],{"class":76},[66,15705,15706],{"class":68,"line":405},[66,15707,3407],{"class":76},[19,15709,15710],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,15712,15714],{"id":15713},"_73函数重载","7.3函数重载",[19,15716,15717],{},"意思是函数名是可以相同的",[484,15719,15721],{"id":15720},"_731基本语法","7.3.1基本语法",[19,15723,15724],{},"作用：函数名可以相同，提高复用性",[19,15726,15727],{},[2141,15728,15729],{},"函数重载满足条件：",[2982,15731,15732,15735,15738],{},[34,15733,15734],{},"同一个作用域下",[34,15736,15737],{},"函数名称相同",[34,15739,15740,15741,15744,15745,15748,15749],{},"函数参数",[2141,15742,15743],{},"类型不同","  或者 ",[2141,15746,15747],{},"个数不同"," 或者 ",[2141,15750,15751],{},"顺序不同",[19,15753,15754,15757],{},[2141,15755,15756],{},"注意:","  函数的返回值不可以作为函数重载的条件",[57,15759,15761],{"className":11748,"code":15760,"language":11750,"meta":62,"style":62},"\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",[23,15762,15763,15768,15776,15780,15793,15797,15811,15815,15828,15832,15847,15851,15864,15868,15889,15893,15906,15910,15930,15934,15947,15951,15955,15960,15965,15970,15975,15980,15984,15988,15996,16000,16006,16016,16026,16040,16055,16059,16069,16073,16081],{"__ignoreMap":62},[66,15764,15765],{"class":68,"line":69},[66,15766,15767],{"class":758},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[66,15769,15770,15772,15774],{"class":68,"line":80},[66,15771,7176],{"class":72},[66,15773,13191],{"class":3793},[66,15775,1253],{"class":76},[66,15777,15778],{"class":68,"line":112},[66,15779,3388],{"class":76},[66,15781,15782,15784,15786,15789,15791],{"class":68,"line":129},[66,15783,8340],{"class":76},[66,15785,3019],{"class":72},[66,15787,15788],{"class":356}," \"func 的调用！\"",[66,15790,3286],{"class":72},[66,15792,10651],{"class":76},[66,15794,15795],{"class":68,"line":138},[66,15796,3407],{"class":76},[66,15798,15799,15801,15803,15805,15807,15809],{"class":68,"line":227},[66,15800,7176],{"class":72},[66,15802,13191],{"class":3793},[66,15804,348],{"class":76},[66,15806,2003],{"class":72},[66,15808,3240],{"class":1234},[66,15810,313],{"class":76},[66,15812,15813],{"class":68,"line":236},[66,15814,3388],{"class":76},[66,15816,15817,15819,15821,15824,15826],{"class":68,"line":241},[66,15818,8340],{"class":76},[66,15820,3019],{"class":72},[66,15822,15823],{"class":356}," \"func (int a) 的调用！\"",[66,15825,3286],{"class":72},[66,15827,10651],{"class":76},[66,15829,15830],{"class":68,"line":372},[66,15831,3407],{"class":76},[66,15833,15834,15836,15838,15840,15843,15845],{"class":68,"line":377},[66,15835,7176],{"class":72},[66,15837,13191],{"class":3793},[66,15839,348],{"class":76},[66,15841,15842],{"class":72},"double",[66,15844,3240],{"class":1234},[66,15846,313],{"class":76},[66,15848,15849],{"class":68,"line":392},[66,15850,3388],{"class":76},[66,15852,15853,15855,15857,15860,15862],{"class":68,"line":405},[66,15854,8340],{"class":76},[66,15856,3019],{"class":72},[66,15858,15859],{"class":356}," \"func (double a)的调用！\"",[66,15861,3286],{"class":72},[66,15863,10651],{"class":76},[66,15865,15866],{"class":68,"line":418},[66,15867,3407],{"class":76},[66,15869,15870,15872,15874,15876,15878,15880,15883,15885,15887],{"class":68,"line":430},[66,15871,7176],{"class":72},[66,15873,13191],{"class":3793},[66,15875,348],{"class":76},[66,15877,2003],{"class":72},[66,15879,3240],{"class":1234},[66,15881,15882],{"class":76}," ,",[66,15884,15842],{"class":72},[66,15886,4657],{"class":1234},[66,15888,313],{"class":76},[66,15890,15891],{"class":68,"line":438},[66,15892,3388],{"class":76},[66,15894,15895,15897,15899,15902,15904],{"class":68,"line":465},[66,15896,8340],{"class":76},[66,15898,3019],{"class":72},[66,15900,15901],{"class":356}," \"func (int a ,double b) 的调用！\"",[66,15903,3286],{"class":72},[66,15905,10651],{"class":76},[66,15907,15908],{"class":68,"line":1805},[66,15909,3407],{"class":76},[66,15911,15912,15914,15916,15918,15920,15922,15924,15926,15928],{"class":68,"line":1817},[66,15913,7176],{"class":72},[66,15915,13191],{"class":3793},[66,15917,348],{"class":76},[66,15919,15842],{"class":72},[66,15921,3240],{"class":1234},[66,15923,15882],{"class":76},[66,15925,2003],{"class":72},[66,15927,4657],{"class":1234},[66,15929,313],{"class":76},[66,15931,15932],{"class":68,"line":1822},[66,15933,3388],{"class":76},[66,15935,15936,15938,15940,15943,15945],{"class":68,"line":1829},[66,15937,8340],{"class":76},[66,15939,3019],{"class":72},[66,15941,15942],{"class":356}," \"func (double a ,int b)的调用！\"",[66,15944,3286],{"class":72},[66,15946,10651],{"class":76},[66,15948,15949],{"class":68,"line":3529},[66,15950,3407],{"class":76},[66,15952,15953],{"class":68,"line":3557},[66,15954,109],{"emptyLinePlaceholder":108},[66,15956,15957],{"class":68,"line":3562},[66,15958,15959],{"class":758},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[66,15961,15962],{"class":68,"line":3579},[66,15963,15964],{"class":758},"\u002F\u002Fint func(double a, int b)\n",[66,15966,15967],{"class":68,"line":3584},[66,15968,15969],{"class":758},"\u002F\u002F{\n",[66,15971,15972],{"class":68,"line":3589},[66,15973,15974],{"class":758},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[66,15976,15977],{"class":68,"line":3594},[66,15978,15979],{"class":758},"\u002F\u002F}\n",[66,15981,15982],{"class":68,"line":3608},[66,15983,109],{"emptyLinePlaceholder":108},[66,15985,15986],{"class":68,"line":3613},[66,15987,109],{"emptyLinePlaceholder":108},[66,15989,15990,15992,15994],{"class":68,"line":4401},[66,15991,2003],{"class":72},[66,15993,3803],{"class":3793},[66,15995,12659],{"class":76},[66,15997,15998],{"class":68,"line":4415},[66,15999,109],{"emptyLinePlaceholder":108},[66,16001,16002,16004],{"class":68,"line":4423},[66,16003,15090],{"class":3793},[66,16005,7448],{"class":76},[66,16007,16008,16010,16012,16014],{"class":68,"line":4428},[66,16009,15090],{"class":3793},[66,16011,348],{"class":76},[66,16013,790],{"class":102},[66,16015,4543],{"class":76},[66,16017,16018,16020,16022,16024],{"class":68,"line":4434},[66,16019,15090],{"class":3793},[66,16021,348],{"class":76},[66,16023,2046],{"class":102},[66,16025,4543],{"class":76},[66,16027,16028,16030,16032,16034,16036,16038],{"class":68,"line":4440},[66,16029,15090],{"class":3793},[66,16031,348],{"class":76},[66,16033,790],{"class":102},[66,16035,2362],{"class":76},[66,16037,2046],{"class":102},[66,16039,4543],{"class":76},[66,16041,16042,16044,16046,16048,16051,16053],{"class":68,"line":4445},[66,16043,15090],{"class":3793},[66,16045,348],{"class":76},[66,16047,2046],{"class":102},[66,16049,16050],{"class":76}," , ",[66,16052,790],{"class":102},[66,16054,4543],{"class":76},[66,16056,16057],{"class":68,"line":9759},[66,16058,15015],{"class":76},[66,16060,16061,16063,16065,16067],{"class":68,"line":9783},[66,16062,4129],{"class":3793},[66,16064,348],{"class":76},[66,16066,4134],{"class":356},[66,16068,4543],{"class":76},[66,16070,16071],{"class":68,"line":9788},[66,16072,109],{"emptyLinePlaceholder":108},[66,16074,16075,16077,16079],{"class":68,"line":9794},[66,16076,5907],{"class":72},[66,16078,962],{"class":102},[66,16080,3135],{"class":76},[66,16082,16083],{"class":68,"line":9821},[66,16084,3407],{"class":76},[19,16086,16087],{},"重点：函数返回值不可以作为函数重载条件！",[484,16089,16091],{"id":16090},"_732注意事项","7.3.2注意事项",[2982,16093,16094,16097],{},[34,16095,16096],{},"引用作为重载条件!!!",[34,16098,16099],{},"函数重载碰到函数默认参数",[57,16101,16103],{"className":1989,"code":16102,"language":1991,"meta":62,"style":62},"\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",[23,16104,16105,16110,16115,16119,16135,16139,16152,16156,16160,16178,16182,16195,16199,16203,16207,16212,16216,16240,16244,16257,16261,16265,16279,16283,16296,16300,16304,16312,16316,16328,16338,16351,16355,16359,16367,16371,16381,16385,16393],{"__ignoreMap":62},[66,16106,16107],{"class":68,"line":69},[66,16108,16109],{"class":758},"\u002F\u002F函数重载注意事项\n",[66,16111,16112],{"class":68,"line":80},[66,16113,16114],{"class":758},"\u002F\u002F1、引用作为重载条件\n",[66,16116,16117],{"class":68,"line":112},[66,16118,109],{"emptyLinePlaceholder":108},[66,16120,16121,16123,16125,16127,16129,16131,16133],{"class":68,"line":129},[66,16122,7176],{"class":72},[66,16124,13191],{"class":3793},[66,16126,348],{"class":76},[66,16128,2003],{"class":72},[66,16130,12390],{"class":72},[66,16132,2229],{"class":1234},[66,16134,313],{"class":76},[66,16136,16137],{"class":68,"line":138},[66,16138,3388],{"class":76},[66,16140,16141,16143,16145,16148,16150],{"class":68,"line":227},[66,16142,8340],{"class":76},[66,16144,3019],{"class":72},[66,16146,16147],{"class":356}," \"func (int &a) 调用 \"",[66,16149,3286],{"class":72},[66,16151,10651],{"class":76},[66,16153,16154],{"class":68,"line":236},[66,16155,3407],{"class":76},[66,16157,16158],{"class":68,"line":241},[66,16159,109],{"emptyLinePlaceholder":108},[66,16161,16162,16164,16166,16168,16170,16172,16174,16176],{"class":68,"line":372},[66,16163,7176],{"class":72},[66,16165,13191],{"class":3793},[66,16167,348],{"class":76},[66,16169,8603],{"class":72},[66,16171,345],{"class":72},[66,16173,12390],{"class":72},[66,16175,2229],{"class":1234},[66,16177,313],{"class":76},[66,16179,16180],{"class":68,"line":377},[66,16181,3388],{"class":76},[66,16183,16184,16186,16188,16191,16193],{"class":68,"line":392},[66,16185,8340],{"class":76},[66,16187,3019],{"class":72},[66,16189,16190],{"class":356}," \"func (const int &a) 调用 \"",[66,16192,3286],{"class":72},[66,16194,10651],{"class":76},[66,16196,16197],{"class":68,"line":405},[66,16198,3407],{"class":76},[66,16200,16201],{"class":68,"line":418},[66,16202,109],{"emptyLinePlaceholder":108},[66,16204,16205],{"class":68,"line":430},[66,16206,109],{"emptyLinePlaceholder":108},[66,16208,16209],{"class":68,"line":438},[66,16210,16211],{"class":758},"\u002F\u002F2、函数重载碰到函数默认参数\n",[66,16213,16214],{"class":68,"line":465},[66,16215,109],{"emptyLinePlaceholder":108},[66,16217,16218,16220,16222,16224,16226,16228,16230,16232,16234,16236,16238],{"class":68,"line":1805},[66,16219,7176],{"class":72},[66,16221,15423],{"class":3793},[66,16223,348],{"class":76},[66,16225,2003],{"class":72},[66,16227,3240],{"class":1234},[66,16229,307],{"class":76},[66,16231,2003],{"class":72},[66,16233,4657],{"class":1234},[66,16235,15369],{"class":72},[66,16237,1335],{"class":102},[66,16239,313],{"class":76},[66,16241,16242],{"class":68,"line":1817},[66,16243,3388],{"class":76},[66,16245,16246,16248,16250,16253,16255],{"class":68,"line":1822},[66,16247,8340],{"class":76},[66,16249,3019],{"class":72},[66,16251,16252],{"class":356}," \"func2(int a, int b = 10) 调用\"",[66,16254,3286],{"class":72},[66,16256,10651],{"class":76},[66,16258,16259],{"class":68,"line":1829},[66,16260,3407],{"class":76},[66,16262,16263],{"class":68,"line":3529},[66,16264,109],{"emptyLinePlaceholder":108},[66,16266,16267,16269,16271,16273,16275,16277],{"class":68,"line":3557},[66,16268,7176],{"class":72},[66,16270,15423],{"class":3793},[66,16272,348],{"class":76},[66,16274,2003],{"class":72},[66,16276,3240],{"class":1234},[66,16278,313],{"class":76},[66,16280,16281],{"class":68,"line":3562},[66,16282,3388],{"class":76},[66,16284,16285,16287,16289,16292,16294],{"class":68,"line":3579},[66,16286,8340],{"class":76},[66,16288,3019],{"class":72},[66,16290,16291],{"class":356}," \"func2(int a) 调用\"",[66,16293,3286],{"class":72},[66,16295,10651],{"class":76},[66,16297,16298],{"class":68,"line":3584},[66,16299,3407],{"class":76},[66,16301,16302],{"class":68,"line":3589},[66,16303,109],{"emptyLinePlaceholder":108},[66,16305,16306,16308,16310],{"class":68,"line":3594},[66,16307,2003],{"class":72},[66,16309,3803],{"class":3793},[66,16311,12659],{"class":76},[66,16313,16314],{"class":68,"line":3608},[66,16315,15015],{"class":76},[66,16317,16318,16320,16322,16324,16326],{"class":68,"line":3613},[66,16319,3814],{"class":72},[66,16321,12675],{"class":76},[66,16323,99],{"class":72},[66,16325,1335],{"class":102},[66,16327,3135],{"class":76},[66,16329,16330,16332,16335],{"class":68,"line":4401},[66,16331,15090],{"class":3793},[66,16333,16334],{"class":76},"(a);",[66,16336,16337],{"class":758}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[66,16339,16340,16342,16344,16346,16348],{"class":68,"line":4415},[66,16341,15090],{"class":3793},[66,16343,348],{"class":76},[66,16345,790],{"class":102},[66,16347,7777],{"class":76},[66,16349,16350],{"class":758},"\u002F\u002F调用有const   10是个常量\n",[66,16352,16353],{"class":68,"line":4423},[66,16354,109],{"emptyLinePlaceholder":108},[66,16356,16357],{"class":68,"line":4428},[66,16358,109],{"emptyLinePlaceholder":108},[66,16360,16361,16364],{"class":68,"line":4434},[66,16362,16363],{"class":758},"    \u002F\u002Ffunc2(10);",[66,16365,16366],{"class":758}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[66,16368,16369],{"class":68,"line":4440},[66,16370,109],{"emptyLinePlaceholder":108},[66,16372,16373,16375,16377,16379],{"class":68,"line":4445},[66,16374,4129],{"class":3793},[66,16376,348],{"class":76},[66,16378,4134],{"class":356},[66,16380,4543],{"class":76},[66,16382,16383],{"class":68,"line":9759},[66,16384,109],{"emptyLinePlaceholder":108},[66,16386,16387,16389,16391],{"class":68,"line":9783},[66,16388,5907],{"class":72},[66,16390,962],{"class":102},[66,16392,3135],{"class":76},[66,16394,16395],{"class":68,"line":9788},[66,16396,3407],{"class":76},[1903,16398,16399],{},"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":62,"searchDepth":80,"depth":80,"links":16401},[16402,16403,16404],{"id":15334,"depth":80,"text":15335},{"id":15591,"depth":80,"text":15592},{"id":15713,"depth":80,"text":15714,"children":16405},[16406,16407],{"id":15720,"depth":112,"text":15721},{"id":16090,"depth":112,"text":16091},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":15326,"description":62},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":16414,"title":16415,"body":16416,"description":25168,"extension":1927,"meta":25169,"navigation":108,"path":25170,"seo":25171,"stem":25172,"__hash__":25173},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":16417,"toc":25149},[16418,16421,16427,16434,16439,16442,16445,16448,16452,16456,16459,16462,16470,16475,16478,16485,16490,16648,16651,16904,16907,16910,16913,16918,16921,16924,16935,16939,17175,17179,17189,17192,17200,17347,17351,17354,17357,17361,17806,17810,17818,17826,18738,18745,18750,19378,19381,19384,19387,19506,19509,19596,19599,19725,19728,19822,19825,20178,20182,20190,20194,20201,20204,20207,20218,20224,20229,20241,20249,20269,20277,20294,20480,20483,20487,20490,20493,20496,20499,20502,20505,20508,20968,20974,20978,20981,20992,21579,21582,22071,22075,22078,22081,22084,22087,22090,22098,22494,22498,22501,22504,22951,22954,22957,22962,22965,22970,22973,22977,22980,22982,22988,22991,23297,23307,23348,23352,23355,23357,23390,23393,23700,23702,23717,23720,23743,23752,23758,23761,23765,23768,23771,23776,23787,23792,23800,23805,23935,23938,23941,24116,24121,24333,24337,24340,24454,24459,24698,24702,24706,24709,24712,24717,24822,24825,24828,24831,24835,24946,24949,24952,24957,25009,25012,25015,25020,25066,25069,25074,25142,25144,25147],[10,16419,16415],{"id":16420},"_8类和对象",[19,16422,16423,16424],{},"C++面向对象的三大特性为",[2141,16425,16426],{},"封装、继承、多态",[19,16428,16429,16430,16433],{},"C++认为",[2141,16431,16432],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,16435,16436],{},[2141,16437,16438],{},"例如：",[19,16440,16441],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,16443,16444],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,16446,16447],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,16449,16451],{"id":16450},"_81封装","8.1封装",[484,16453,16455],{"id":16454},"_811封装的意义","8.1.1封装的意义",[19,16457,16458],{},"封装是C++面向对象三大特性之一",[19,16460,16461],{},"封装的意义：",[2982,16463,16464,16467],{},[34,16465,16466],{},"将属性和行为作为一个整体，表现生活中的事物",[34,16468,16469],{},"将属性和行为加以权限控制",[19,16471,16472],{},[2141,16473,16474],{},"封装意义一：",[19,16476,16477],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,16479,16480,15600,16482],{},[2141,16481,55],{},[23,16483,16484],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[31,16486,16487],{},[34,16488,16489],{},"**示例1：**设计一个圆类，求圆的周长",[57,16491,16493],{"className":1989,"code":16492,"language":1991,"meta":62,"style":62},"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",[23,16494,16495,16503,16507,16512,16517,16522,16527,16534,16539,16549,16553,16570,16574,16578,16586,16590,16595,16600,16605,16610,16621,16644],{"__ignoreMap":62},[66,16496,16497,16500],{"class":68,"line":69},[66,16498,16499],{"class":72},"class",[66,16501,16502],{"class":3793}," Circle\n",[66,16504,16505],{"class":68,"line":80},[66,16506,3388],{"class":76},[66,16508,16509],{"class":68,"line":112},[66,16510,16511],{"class":758},"    \u002F\u002F访问权限\n",[66,16513,16514],{"class":68,"line":129},[66,16515,16516],{"class":758},"    \u002F\u002F公共权限\n",[66,16518,16519],{"class":68,"line":138},[66,16520,16521],{"class":72},"public:\n",[66,16523,16524],{"class":68,"line":227},[66,16525,16526],{"class":758},"    \u002F\u002F属性\n",[66,16528,16529,16531],{"class":68,"line":236},[66,16530,3814],{"class":72},[66,16532,16533],{"class":76}," m_r;\n",[66,16535,16536],{"class":68,"line":241},[66,16537,16538],{"class":758},"    \u002F\u002F行为\n",[66,16540,16541,16544,16547],{"class":68,"line":372},[66,16542,16543],{"class":72},"    double",[66,16545,16546],{"class":3793}," calculateZC",[66,16548,1253],{"class":76},[66,16550,16551],{"class":68,"line":377},[66,16552,3859],{"class":76},[66,16554,16555,16558,16560,16562,16565,16567],{"class":68,"line":392},[66,16556,16557],{"class":72},"        return",[66,16559,956],{"class":102},[66,16561,1208],{"class":72},[66,16563,16564],{"class":76},"PI",[66,16566,1208],{"class":72},[66,16568,16569],{"class":76},"m_r;\n",[66,16571,16572],{"class":68,"line":405},[66,16573,4013],{"class":76},[66,16575,16576],{"class":68,"line":418},[66,16577,5812],{"class":76},[66,16579,16580,16582,16584],{"class":68,"line":430},[66,16581,2003],{"class":72},[66,16583,3803],{"class":3793},[66,16585,1253],{"class":76},[66,16587,16588],{"class":68,"line":438},[66,16589,3388],{"class":76},[66,16591,16592],{"class":68,"line":465},[66,16593,16594],{"class":758},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[66,16596,16597],{"class":68,"line":1805},[66,16598,16599],{"class":758},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[66,16601,16602],{"class":68,"line":1817},[66,16603,16604],{"class":76},"    Circle c1;\n",[66,16606,16607],{"class":68,"line":1822},[66,16608,16609],{"class":758},"    \u002F\u002F给圆对象 的属性进行赋值\n",[66,16611,16612,16615,16617,16619],{"class":68,"line":1829},[66,16613,16614],{"class":76},"    c1.m_r",[66,16616,99],{"class":72},[66,16618,790],{"class":102},[66,16620,3135],{"class":76},[66,16622,16623,16625,16627,16630,16632,16635,16638,16640,16642],{"class":68,"line":3529},[66,16624,3393],{"class":76},[66,16626,3019],{"class":72},[66,16628,16629],{"class":356},"\"圆的周长\"",[66,16631,3019],{"class":72},[66,16633,16634],{"class":76},"c1.",[66,16636,16637],{"class":3793},"calculateZC",[66,16639,4251],{"class":76},[66,16641,3019],{"class":72},[66,16643,3041],{"class":76},[66,16645,16646],{"class":68,"line":3557},[66,16647,3407],{"class":76},[19,16649,16650],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[57,16652,16654],{"className":1989,"code":16653,"language":1991,"meta":62,"style":62},"#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",[23,16655,16656,16662,16672,16678,16684,16688,16692,16697,16704,16709,16727,16731,16741,16745,16750,16766,16770,16780,16784,16789,16797,16801,16833,16837,16841,16849,16853,16858,16863,16877,16891,16900],{"__ignoreMap":62},[66,16657,16658,16660],{"class":68,"line":69},[66,16659,3779],{"class":72},[66,16661,3782],{"class":356},[66,16663,16664,16666,16668,16670],{"class":68,"line":80},[66,16665,3787],{"class":72},[66,16667,3790],{"class":72},[66,16669,3794],{"class":3793},[66,16671,3135],{"class":76},[66,16673,16674,16676],{"class":68,"line":112},[66,16675,3779],{"class":72},[66,16677,9560],{"class":356},[66,16679,16680,16682],{"class":68,"line":129},[66,16681,16499],{"class":72},[66,16683,9573],{"class":3793},[66,16685,16686],{"class":68,"line":138},[66,16687,3388],{"class":76},[66,16689,16690],{"class":68,"line":227},[66,16691,16521],{"class":72},[66,16693,16694],{"class":68,"line":236},[66,16695,16696],{"class":76},"    string m_name;\n",[66,16698,16699,16701],{"class":68,"line":241},[66,16700,3814],{"class":72},[66,16702,16703],{"class":76}," m_id;\n",[66,16705,16706],{"class":68,"line":372},[66,16707,16708],{"class":758},"    \u002F\u002F赋值姓名\n",[66,16710,16711,16714,16717,16719,16722,16725],{"class":68,"line":377},[66,16712,16713],{"class":72},"    void",[66,16715,16716],{"class":3793}," setName",[66,16718,348],{"class":76},[66,16720,16721],{"class":3793},"string",[66,16723,16724],{"class":1234}," name",[66,16726,313],{"class":76},[66,16728,16729],{"class":68,"line":392},[66,16730,3859],{"class":76},[66,16732,16733,16736,16738],{"class":68,"line":405},[66,16734,16735],{"class":76},"        m_name",[66,16737,99],{"class":72},[66,16739,16740],{"class":76},"name;\n",[66,16742,16743],{"class":68,"line":418},[66,16744,4013],{"class":76},[66,16746,16747],{"class":68,"line":430},[66,16748,16749],{"class":758},"    \u002F\u002F赋值学号\n",[66,16751,16752,16754,16757,16759,16761,16764],{"class":68,"line":438},[66,16753,16713],{"class":72},[66,16755,16756],{"class":3793}," setId",[66,16758,348],{"class":76},[66,16760,2003],{"class":72},[66,16762,16763],{"class":1234}," id",[66,16765,313],{"class":76},[66,16767,16768],{"class":68,"line":465},[66,16769,3859],{"class":76},[66,16771,16772,16775,16777],{"class":68,"line":1805},[66,16773,16774],{"class":76},"        m_id",[66,16776,99],{"class":72},[66,16778,16779],{"class":76},"id;\n",[66,16781,16782],{"class":68,"line":1817},[66,16783,4013],{"class":76},[66,16785,16786],{"class":68,"line":1822},[66,16787,16788],{"class":758},"    \u002F\u002F打印学生信息\n",[66,16790,16791,16793,16795],{"class":68,"line":1829},[66,16792,16713],{"class":72},[66,16794,11422],{"class":3793},[66,16796,1253],{"class":76},[66,16798,16799],{"class":68,"line":3529},[66,16800,3859],{"class":76},[66,16802,16803,16805,16807,16810,16812,16815,16817,16819,16821,16824,16826,16829,16831],{"class":68,"line":3557},[66,16804,5269],{"class":76},[66,16806,3019],{"class":72},[66,16808,16809],{"class":356},"\"姓名：\"",[66,16811,3019],{"class":72},[66,16813,16814],{"class":76},"m_name",[66,16816,3019],{"class":72},[66,16818,6175],{"class":356},[66,16820,3019],{"class":72},[66,16822,16823],{"class":356},"\"学号：\"",[66,16825,3019],{"class":72},[66,16827,16828],{"class":76},"m_id",[66,16830,3019],{"class":72},[66,16832,3041],{"class":76},[66,16834,16835],{"class":68,"line":3562},[66,16836,4013],{"class":76},[66,16838,16839],{"class":68,"line":3579},[66,16840,5812],{"class":76},[66,16842,16843,16845,16847],{"class":68,"line":3584},[66,16844,2003],{"class":72},[66,16846,3803],{"class":3793},[66,16848,1253],{"class":76},[66,16850,16851],{"class":68,"line":3589},[66,16852,3388],{"class":76},[66,16854,16855],{"class":68,"line":3594},[66,16856,16857],{"class":758},"    \u002F\u002F实例化\n",[66,16859,16860],{"class":68,"line":3608},[66,16861,16862],{"class":76},"    Student s1;\n",[66,16864,16865,16868,16871,16873,16875],{"class":68,"line":3613},[66,16866,16867],{"class":76},"    s1.",[66,16869,16870],{"class":3793},"setName",[66,16872,348],{"class":76},[66,16874,9727],{"class":356},[66,16876,4543],{"class":76},[66,16878,16879,16881,16884,16886,16889],{"class":68,"line":4401},[66,16880,16867],{"class":76},[66,16882,16883],{"class":3793},"setId",[66,16885,348],{"class":76},[66,16887,16888],{"class":102},"123456",[66,16890,4543],{"class":76},[66,16892,16893,16895,16898],{"class":68,"line":4415},[66,16894,16867],{"class":76},[66,16896,16897],{"class":3793},"printInfo",[66,16899,7448],{"class":76},[66,16901,16902],{"class":68,"line":4423},[66,16903,3407],{"class":76},[19,16905,16906],{},"类中的属性和行为统称为成员",[19,16908,16909],{},"属性：成员属性(成员变量)",[19,16911,16912],{},"方法：成员函数(成员方法)",[19,16914,16915],{},[2141,16916,16917],{},"封装意义二：",[19,16919,16920],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,16922,16923],{},"访问权限有三种：",[31,16925,16926,16929,16932],{},[34,16927,16928],{},"public        公共权限",[34,16930,16931],{},"protected 保护权限",[34,16933,16934],{},"private      私有权限",[19,16936,16937],{},[2141,16938,86],{},[57,16940,16942],{"className":11748,"code":16941,"language":11750,"meta":62,"style":62},"\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",[23,16943,16944,16949,16954,16959,16964,16968,16975,16979,16984,16988,16993,16997,17002,17007,17012,17016,17021,17026,17033,17037,17041,17049,17053,17064,17076,17088,17092,17096,17100,17108,17112,17117,17129,17137,17145,17149,17159,17163,17171],{"__ignoreMap":62},[66,16945,16946],{"class":68,"line":69},[66,16947,16948],{"class":758},"\u002F\u002F三种权限\n",[66,16950,16951],{"class":68,"line":80},[66,16952,16953],{"class":758},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[66,16955,16956],{"class":68,"line":112},[66,16957,16958],{"class":758},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[66,16960,16961],{"class":68,"line":129},[66,16962,16963],{"class":758},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[66,16965,16966],{"class":68,"line":138},[66,16967,109],{"emptyLinePlaceholder":108},[66,16969,16970,16972],{"class":68,"line":227},[66,16971,16499],{"class":72},[66,16973,16974],{"class":3793}," Person\n",[66,16976,16977],{"class":68,"line":236},[66,16978,3388],{"class":76},[66,16980,16981],{"class":68,"line":241},[66,16982,16983],{"class":758},"    \u002F\u002F姓名  公共权限\n",[66,16985,16986],{"class":68,"line":372},[66,16987,16521],{"class":72},[66,16989,16990],{"class":68,"line":377},[66,16991,16992],{"class":76},"    string m_Name;\n",[66,16994,16995],{"class":68,"line":392},[66,16996,109],{"emptyLinePlaceholder":108},[66,16998,16999],{"class":68,"line":405},[66,17000,17001],{"class":758},"    \u002F\u002F汽车  保护权限\n",[66,17003,17004],{"class":68,"line":418},[66,17005,17006],{"class":72},"protected:\n",[66,17008,17009],{"class":68,"line":430},[66,17010,17011],{"class":76},"    string m_Car;\n",[66,17013,17014],{"class":68,"line":438},[66,17015,109],{"emptyLinePlaceholder":108},[66,17017,17018],{"class":68,"line":465},[66,17019,17020],{"class":758},"    \u002F\u002F银行卡密码  私有权限\n",[66,17022,17023],{"class":68,"line":1805},[66,17024,17025],{"class":72},"private:\n",[66,17027,17028,17030],{"class":68,"line":1817},[66,17029,3814],{"class":72},[66,17031,17032],{"class":76}," m_Password;\n",[66,17034,17035],{"class":68,"line":1822},[66,17036,109],{"emptyLinePlaceholder":108},[66,17038,17039],{"class":68,"line":1829},[66,17040,16521],{"class":72},[66,17042,17043,17045,17047],{"class":68,"line":3529},[66,17044,16713],{"class":72},[66,17046,13191],{"class":3793},[66,17048,1253],{"class":76},[66,17050,17051],{"class":68,"line":3557},[66,17052,3859],{"class":76},[66,17054,17055,17058,17060,17062],{"class":68,"line":3562},[66,17056,17057],{"class":76},"        m_Name ",[66,17059,99],{"class":72},[66,17061,10749],{"class":356},[66,17063,3135],{"class":76},[66,17065,17066,17069,17071,17074],{"class":68,"line":3579},[66,17067,17068],{"class":76},"        m_Car ",[66,17070,99],{"class":72},[66,17072,17073],{"class":356}," \"拖拉机\"",[66,17075,3135],{"class":76},[66,17077,17078,17081,17083,17086],{"class":68,"line":3584},[66,17079,17080],{"class":76},"        m_Password ",[66,17082,99],{"class":72},[66,17084,17085],{"class":102}," 123456",[66,17087,3135],{"class":76},[66,17089,17090],{"class":68,"line":3589},[66,17091,4013],{"class":76},[66,17093,17094],{"class":68,"line":3594},[66,17095,5812],{"class":76},[66,17097,17098],{"class":68,"line":3608},[66,17099,109],{"emptyLinePlaceholder":108},[66,17101,17102,17104,17106],{"class":68,"line":3613},[66,17103,2003],{"class":72},[66,17105,3803],{"class":3793},[66,17107,12659],{"class":76},[66,17109,17110],{"class":68,"line":4401},[66,17111,109],{"emptyLinePlaceholder":108},[66,17113,17114],{"class":68,"line":4415},[66,17115,17116],{"class":76},"    Person p;\n",[66,17118,17119,17122,17124,17127],{"class":68,"line":4423},[66,17120,17121],{"class":76},"    p.m_Name ",[66,17123,99],{"class":72},[66,17125,17126],{"class":356}," \"李四\"",[66,17128,3135],{"class":76},[66,17130,17131,17134],{"class":68,"line":4428},[66,17132,17133],{"class":758},"    \u002F\u002Fp.m_Car = \"奔驰\";",[66,17135,17136],{"class":758},"  \u002F\u002F保护权限类外访问不到\n",[66,17138,17139,17142],{"class":68,"line":4434},[66,17140,17141],{"class":758},"    \u002F\u002Fp.m_Password = 123;",[66,17143,17144],{"class":758}," \u002F\u002F私有权限类外访问不到\n",[66,17146,17147],{"class":68,"line":4440},[66,17148,109],{"emptyLinePlaceholder":108},[66,17150,17151,17153,17155,17157],{"class":68,"line":4445},[66,17152,4129],{"class":3793},[66,17154,348],{"class":76},[66,17156,4134],{"class":356},[66,17158,4543],{"class":76},[66,17160,17161],{"class":68,"line":9759},[66,17162,109],{"emptyLinePlaceholder":108},[66,17164,17165,17167,17169],{"class":68,"line":9783},[66,17166,5907],{"class":72},[66,17168,962],{"class":102},[66,17170,3135],{"class":76},[66,17172,17173],{"class":68,"line":9788},[66,17174,3407],{"class":76},[484,17176,17178],{"id":17177},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,17180,17181,17182,17185,17186],{},"在C++中 struct和class唯一的",[2141,17183,17184],{},"区别","就在于 ",[2141,17187,17188],{},"默认的访问权限不同",[19,17190,17191],{},"区别：",[2982,17193,17194,17197],{},[34,17195,17196],{},"struct 默认权限为公共",[34,17198,17199],{},"class   默认权限为私有",[57,17201,17203],{"className":11748,"code":17202,"language":11750,"meta":62,"style":62},"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",[23,17204,17205,17212,17216,17226,17230,17234,17241,17245,17255,17259,17263,17271,17275,17280,17294,17298,17303,17317,17321,17331,17335,17343],{"__ignoreMap":62},[66,17206,17207,17209],{"class":68,"line":69},[66,17208,16499],{"class":72},[66,17210,17211],{"class":3793}," C1\n",[66,17213,17214],{"class":68,"line":80},[66,17215,3388],{"class":76},[66,17217,17218,17220,17223],{"class":68,"line":112},[66,17219,3814],{"class":72},[66,17221,17222],{"class":76},"  m_A;",[66,17224,17225],{"class":758}," \u002F\u002F默认是私有权限\n",[66,17227,17228],{"class":68,"line":129},[66,17229,5812],{"class":76},[66,17231,17232],{"class":68,"line":138},[66,17233,109],{"emptyLinePlaceholder":108},[66,17235,17236,17238],{"class":68,"line":227},[66,17237,9570],{"class":72},[66,17239,17240],{"class":3793}," C2\n",[66,17242,17243],{"class":68,"line":236},[66,17244,3388],{"class":76},[66,17246,17247,17249,17252],{"class":68,"line":241},[66,17248,3814],{"class":72},[66,17250,17251],{"class":76}," m_A;",[66,17253,17254],{"class":758},"  \u002F\u002F默认是公共权限\n",[66,17256,17257],{"class":68,"line":372},[66,17258,5812],{"class":76},[66,17260,17261],{"class":68,"line":377},[66,17262,109],{"emptyLinePlaceholder":108},[66,17264,17265,17267,17269],{"class":68,"line":392},[66,17266,2003],{"class":72},[66,17268,3803],{"class":3793},[66,17270,12659],{"class":76},[66,17272,17273],{"class":68,"line":405},[66,17274,109],{"emptyLinePlaceholder":108},[66,17276,17277],{"class":68,"line":418},[66,17278,17279],{"class":76},"    C1 c1;\n",[66,17281,17282,17285,17287,17289,17291],{"class":68,"line":430},[66,17283,17284],{"class":76},"    c1.m_A ",[66,17286,99],{"class":72},[66,17288,1335],{"class":102},[66,17290,2051],{"class":76},[66,17292,17293],{"class":758}," \u002F\u002F错误，访问权限是私有\n",[66,17295,17296],{"class":68,"line":438},[66,17297,109],{"emptyLinePlaceholder":108},[66,17299,17300],{"class":68,"line":465},[66,17301,17302],{"class":76},"    C2 c2;\n",[66,17304,17305,17308,17310,17312,17314],{"class":68,"line":1805},[66,17306,17307],{"class":76},"    c2.m_A ",[66,17309,99],{"class":72},[66,17311,1335],{"class":102},[66,17313,2051],{"class":76},[66,17315,17316],{"class":758}," \u002F\u002F正确，访问权限是公共\n",[66,17318,17319],{"class":68,"line":1817},[66,17320,109],{"emptyLinePlaceholder":108},[66,17322,17323,17325,17327,17329],{"class":68,"line":1822},[66,17324,4129],{"class":3793},[66,17326,348],{"class":76},[66,17328,4134],{"class":356},[66,17330,4543],{"class":76},[66,17332,17333],{"class":68,"line":1829},[66,17334,109],{"emptyLinePlaceholder":108},[66,17336,17337,17339,17341],{"class":68,"line":3529},[66,17338,5907],{"class":72},[66,17340,962],{"class":102},[66,17342,3135],{"class":76},[66,17344,17345],{"class":68,"line":3557},[66,17346,3407],{"class":76},[484,17348,17350],{"id":17349},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,17352,17353],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,17355,17356],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,17358,17359],{},[2141,17360,86],{},[57,17362,17364],{"className":11748,"code":17363,"language":11750,"meta":62,"style":62},"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",[23,17365,17366,17376,17380,17384,17389,17403,17412,17416,17426,17430,17437,17441,17445,17449,17454,17463,17470,17474,17479,17495,17518,17531,17538,17542,17551,17555,17559,17564,17580,17590,17594,17598,17602,17610,17614,17624,17628,17636,17640,17644,17652,17656,17660,17665,17678,17701,17705,17710,17723,17745,17749,17754,17768,17776,17780,17790,17794,17802],{"__ignoreMap":62},[66,17367,17368,17370,17373],{"class":68,"line":69},[66,17369,16499],{"class":72},[66,17371,17372],{"class":3793}," Person",[66,17374,17375],{"class":76}," {\n",[66,17377,17378],{"class":68,"line":80},[66,17379,16521],{"class":72},[66,17381,17382],{"class":68,"line":112},[66,17383,109],{"emptyLinePlaceholder":108},[66,17385,17386],{"class":68,"line":129},[66,17387,17388],{"class":758},"    \u002F\u002F姓名设置可读可写\n",[66,17390,17391,17393,17395,17397,17399,17401],{"class":68,"line":138},[66,17392,16713],{"class":72},[66,17394,16716],{"class":3793},[66,17396,348],{"class":76},[66,17398,16721],{"class":3793},[66,17400,16724],{"class":1234},[66,17402,14247],{"class":76},[66,17404,17405,17407,17409],{"class":68,"line":227},[66,17406,17057],{"class":76},[66,17408,99],{"class":72},[66,17410,17411],{"class":76}," name;\n",[66,17413,17414],{"class":68,"line":236},[66,17415,4013],{"class":76},[66,17417,17418,17421,17424],{"class":68,"line":241},[66,17419,17420],{"class":3793},"    string",[66,17422,17423],{"class":3793}," getName",[66,17425,1253],{"class":76},[66,17427,17428],{"class":68,"line":372},[66,17429,3859],{"class":76},[66,17431,17432,17434],{"class":68,"line":377},[66,17433,16557],{"class":72},[66,17435,17436],{"class":76}," m_Name;\n",[66,17438,17439],{"class":68,"line":392},[66,17440,4013],{"class":76},[66,17442,17443],{"class":68,"line":405},[66,17444,109],{"emptyLinePlaceholder":108},[66,17446,17447],{"class":68,"line":418},[66,17448,109],{"emptyLinePlaceholder":108},[66,17450,17451],{"class":68,"line":430},[66,17452,17453],{"class":758},"    \u002F\u002F获取年龄 \n",[66,17455,17456,17458,17461],{"class":68,"line":438},[66,17457,3814],{"class":72},[66,17459,17460],{"class":3793}," getAge",[66,17462,12659],{"class":76},[66,17464,17465,17467],{"class":68,"line":465},[66,17466,16557],{"class":72},[66,17468,17469],{"class":76}," m_Age;\n",[66,17471,17472],{"class":68,"line":1805},[66,17473,4013],{"class":76},[66,17475,17476],{"class":68,"line":1817},[66,17477,17478],{"class":758},"    \u002F\u002F设置年龄\n",[66,17480,17481,17483,17486,17488,17490,17493],{"class":68,"line":1822},[66,17482,16713],{"class":72},[66,17484,17485],{"class":3793}," setAge",[66,17487,348],{"class":76},[66,17489,2003],{"class":72},[66,17491,17492],{"class":1234}," age",[66,17494,14247],{"class":76},[66,17496,17497,17499,17502,17504,17506,17508,17511,17513,17516],{"class":68,"line":1829},[66,17498,4321],{"class":72},[66,17500,17501],{"class":76}," (age ",[66,17503,413],{"class":72},[66,17505,962],{"class":102},[66,17507,5074],{"class":72},[66,17509,17510],{"class":76}," age ",[66,17512,386],{"class":72},[66,17514,17515],{"class":102}," 150",[66,17517,14247],{"class":76},[66,17519,17520,17522,17524,17527,17529],{"class":68,"line":3529},[66,17521,11526],{"class":76},[66,17523,3019],{"class":72},[66,17525,17526],{"class":356}," \"你个老妖精!\"",[66,17528,3286],{"class":72},[66,17530,10651],{"class":76},[66,17532,17533,17536],{"class":68,"line":3557},[66,17534,17535],{"class":72},"            return",[66,17537,3135],{"class":76},[66,17539,17540],{"class":68,"line":3562},[66,17541,4353],{"class":76},[66,17543,17544,17547,17549],{"class":68,"line":3579},[66,17545,17546],{"class":76},"        m_Age ",[66,17548,99],{"class":72},[66,17550,9608],{"class":76},[66,17552,17553],{"class":68,"line":3584},[66,17554,4013],{"class":76},[66,17556,17557],{"class":68,"line":3589},[66,17558,109],{"emptyLinePlaceholder":108},[66,17560,17561],{"class":68,"line":3594},[66,17562,17563],{"class":758},"    \u002F\u002F情人设置为只写\n",[66,17565,17566,17568,17571,17573,17575,17578],{"class":68,"line":3608},[66,17567,16713],{"class":72},[66,17569,17570],{"class":3793}," setLover",[66,17572,348],{"class":76},[66,17574,16721],{"class":3793},[66,17576,17577],{"class":1234}," lover",[66,17579,14247],{"class":76},[66,17581,17582,17585,17587],{"class":68,"line":3613},[66,17583,17584],{"class":76},"        m_Lover ",[66,17586,99],{"class":72},[66,17588,17589],{"class":76}," lover;\n",[66,17591,17592],{"class":68,"line":4401},[66,17593,4013],{"class":76},[66,17595,17596],{"class":68,"line":4415},[66,17597,109],{"emptyLinePlaceholder":108},[66,17599,17600],{"class":68,"line":4423},[66,17601,17025],{"class":72},[66,17603,17604,17607],{"class":68,"line":4428},[66,17605,17606],{"class":76},"    string m_Name;",[66,17608,17609],{"class":758}," \u002F\u002F可读可写  姓名\n",[66,17611,17612],{"class":68,"line":4434},[66,17613,15015],{"class":76},[66,17615,17616,17618,17621],{"class":68,"line":4440},[66,17617,3814],{"class":72},[66,17619,17620],{"class":76}," m_Age;",[66,17622,17623],{"class":758}," \u002F\u002F只读  年龄\n",[66,17625,17626],{"class":68,"line":4445},[66,17627,109],{"emptyLinePlaceholder":108},[66,17629,17630,17633],{"class":68,"line":9759},[66,17631,17632],{"class":76},"    string m_Lover;",[66,17634,17635],{"class":758}," \u002F\u002F只写  情人\n",[66,17637,17638],{"class":68,"line":9783},[66,17639,5812],{"class":76},[66,17641,17642],{"class":68,"line":9788},[66,17643,109],{"emptyLinePlaceholder":108},[66,17645,17646,17648,17650],{"class":68,"line":9794},[66,17647,2003],{"class":72},[66,17649,3803],{"class":3793},[66,17651,12659],{"class":76},[66,17653,17654],{"class":68,"line":9821},[66,17655,109],{"emptyLinePlaceholder":108},[66,17657,17658],{"class":68,"line":9826},[66,17659,17116],{"class":76},[66,17661,17662],{"class":68,"line":9832},[66,17663,17664],{"class":758},"    \u002F\u002F姓名设置\n",[66,17666,17667,17670,17672,17674,17676],{"class":68,"line":9844},[66,17668,17669],{"class":76},"    p.",[66,17671,16870],{"class":3793},[66,17673,348],{"class":76},[66,17675,9727],{"class":356},[66,17677,4543],{"class":76},[66,17679,17680,17682,17684,17687,17689,17692,17695,17697,17699],{"class":68,"line":9856},[66,17681,8340],{"class":76},[66,17683,3019],{"class":72},[66,17685,17686],{"class":356}," \"姓名： \"",[66,17688,3286],{"class":72},[66,17690,17691],{"class":76}," p.",[66,17693,17694],{"class":3793},"getName",[66,17696,14855],{"class":76},[66,17698,3019],{"class":72},[66,17700,10651],{"class":76},[66,17702,17703],{"class":68,"line":9868},[66,17704,109],{"emptyLinePlaceholder":108},[66,17706,17707],{"class":68,"line":11523},[66,17708,17709],{"class":758},"    \u002F\u002F年龄设置\n",[66,17711,17712,17714,17717,17719,17721],{"class":68,"line":11548},[66,17713,17669],{"class":76},[66,17715,17716],{"class":3793},"setAge",[66,17718,348],{"class":76},[66,17720,2635],{"class":102},[66,17722,4543],{"class":76},[66,17724,17725,17727,17729,17732,17734,17736,17739,17741,17743],{"class":68,"line":11571},[66,17726,8340],{"class":76},[66,17728,3019],{"class":72},[66,17730,17731],{"class":356}," \"年龄： \"",[66,17733,3286],{"class":72},[66,17735,17691],{"class":76},[66,17737,17738],{"class":3793},"getAge",[66,17740,14855],{"class":76},[66,17742,3019],{"class":72},[66,17744,10651],{"class":76},[66,17746,17747],{"class":68,"line":11595},[66,17748,109],{"emptyLinePlaceholder":108},[66,17750,17751],{"class":68,"line":11600},[66,17752,17753],{"class":758},"    \u002F\u002F情人设置\n",[66,17755,17756,17758,17761,17763,17766],{"class":68,"line":11605},[66,17757,17669],{"class":76},[66,17759,17760],{"class":3793},"setLover",[66,17762,348],{"class":76},[66,17764,17765],{"class":356},"\"苍井\"",[66,17767,4543],{"class":76},[66,17769,17770,17773],{"class":68,"line":11610},[66,17771,17772],{"class":758},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[66,17774,17775],{"class":758},"  \u002F\u002F只写属性，不可以读取\n",[66,17777,17778],{"class":68,"line":11619},[66,17779,109],{"emptyLinePlaceholder":108},[66,17781,17782,17784,17786,17788],{"class":68,"line":11624},[66,17783,4129],{"class":3793},[66,17785,348],{"class":76},[66,17787,4134],{"class":356},[66,17789,4543],{"class":76},[66,17791,17792],{"class":68,"line":11630},[66,17793,109],{"emptyLinePlaceholder":108},[66,17795,17796,17798,17800],{"class":68,"line":11651},[66,17797,5907],{"class":72},[66,17799,962],{"class":102},[66,17801,3135],{"class":76},[66,17803,17804],{"class":68,"line":11657},[66,17805,3407],{"class":76},[484,17807,17809],{"id":17808},"_814封装案例","8.1.4封装案例",[31,17811,17812],{},[34,17813,17814,17817],{},[2141,17815,17816],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[2982,17819,17820,17823],{},[34,17821,17822],{},"求出立方体的面积和体积",[34,17824,17825],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[57,17827,17829],{"className":1989,"code":17828,"language":1991,"meta":62,"style":62},"#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",[23,17830,17831,17837,17847,17854,17858,17862,17867,17897,17901,17911,17921,17931,17935,17944,17948,17984,17988,17997,18001,18017,18021,18026,18035,18039,18046,18050,18059,18063,18070,18074,18083,18087,18094,18098,18103,18120,18124,18170,18174,18183,18187,18191,18195,18204,18208,18212,18217,18221,18227,18233,18239,18243,18247,18252,18274,18278,18332,18336,18344,18348,18353,18358,18371,18378,18394,18405,18411,18434,18440,18463,18477,18497,18503,18514,18537,18559,18564,18570,18584,18597,18602,18616,18621,18627,18632,18646,18651,18656,18670,18682,18687,18700,18705,18710,18715,18728,18733],{"__ignoreMap":62},[66,17832,17833,17835],{"class":68,"line":69},[66,17834,3779],{"class":72},[66,17836,3782],{"class":356},[66,17838,17839,17841,17843,17845],{"class":68,"line":80},[66,17840,3787],{"class":72},[66,17842,3790],{"class":72},[66,17844,3794],{"class":3793},[66,17846,3135],{"class":76},[66,17848,17849,17851],{"class":68,"line":112},[66,17850,16499],{"class":72},[66,17852,17853],{"class":3793}," Cube\n",[66,17855,17856],{"class":68,"line":129},[66,17857,3388],{"class":76},[66,17859,17860],{"class":68,"line":138},[66,17861,16521],{"class":72},[66,17863,17864],{"class":68,"line":227},[66,17865,17866],{"class":758},"    \u002F\u002F输入长宽高\n",[66,17868,17869,17871,17874,17876,17878,17881,17883,17885,17888,17890,17892,17895],{"class":68,"line":236},[66,17870,16713],{"class":72},[66,17872,17873],{"class":3793}," setLwh",[66,17875,348],{"class":76},[66,17877,2003],{"class":72},[66,17879,17880],{"class":1234}," l",[66,17882,2362],{"class":76},[66,17884,2003],{"class":72},[66,17886,17887],{"class":1234}," w",[66,17889,2362],{"class":76},[66,17891,2003],{"class":72},[66,17893,17894],{"class":1234}," h",[66,17896,313],{"class":76},[66,17898,17899],{"class":68,"line":241},[66,17900,3859],{"class":76},[66,17902,17903,17906,17908],{"class":68,"line":372},[66,17904,17905],{"class":76},"        m_L",[66,17907,99],{"class":72},[66,17909,17910],{"class":76},"l;\n",[66,17912,17913,17916,17918],{"class":68,"line":377},[66,17914,17915],{"class":76},"        m_W",[66,17917,99],{"class":72},[66,17919,17920],{"class":76},"w;\n",[66,17922,17923,17926,17928],{"class":68,"line":392},[66,17924,17925],{"class":76},"        m_H",[66,17927,99],{"class":72},[66,17929,17930],{"class":76},"h;\n",[66,17932,17933],{"class":68,"line":405},[66,17934,4013],{"class":76},[66,17936,17937,17939,17942],{"class":68,"line":418},[66,17938,3814],{"class":72},[66,17940,17941],{"class":3793}," mianji",[66,17943,1253],{"class":76},[66,17945,17946],{"class":68,"line":430},[66,17947,3859],{"class":76},[66,17949,17950,17952,17954,17956,17959,17961,17964,17966,17969,17971,17974,17976,17979,17981],{"class":68,"line":438},[66,17951,16557],{"class":72},[66,17953,956],{"class":102},[66,17955,1208],{"class":72},[66,17957,17958],{"class":76},"(m_L",[66,17960,1208],{"class":72},[66,17962,17963],{"class":76},"m_W ",[66,17965,1184],{"class":72},[66,17967,17968],{"class":76}," m_L",[66,17970,1208],{"class":72},[66,17972,17973],{"class":76},"m_H ",[66,17975,1184],{"class":72},[66,17977,17978],{"class":76}," m_W",[66,17980,1208],{"class":72},[66,17982,17983],{"class":76},"m_H);\n",[66,17985,17986],{"class":68,"line":465},[66,17987,4013],{"class":76},[66,17989,17990,17992,17995],{"class":68,"line":1805},[66,17991,3814],{"class":72},[66,17993,17994],{"class":3793}," tiji",[66,17996,1253],{"class":76},[66,17998,17999],{"class":68,"line":1817},[66,18000,3859],{"class":76},[66,18002,18003,18005,18007,18009,18012,18014],{"class":68,"line":1822},[66,18004,16557],{"class":72},[66,18006,17968],{"class":76},[66,18008,1208],{"class":72},[66,18010,18011],{"class":76},"m_W",[66,18013,1208],{"class":72},[66,18015,18016],{"class":76},"m_H;\n",[66,18018,18019],{"class":68,"line":1829},[66,18020,4013],{"class":76},[66,18022,18023],{"class":68,"line":3529},[66,18024,18025],{"class":758},"    \u002F\u002F获取长宽高\n",[66,18027,18028,18030,18033],{"class":68,"line":3557},[66,18029,3814],{"class":72},[66,18031,18032],{"class":3793}," getLength",[66,18034,1253],{"class":76},[66,18036,18037],{"class":68,"line":3562},[66,18038,3859],{"class":76},[66,18040,18041,18043],{"class":68,"line":3579},[66,18042,16557],{"class":72},[66,18044,18045],{"class":76}," m_L;\n",[66,18047,18048],{"class":68,"line":3584},[66,18049,4013],{"class":76},[66,18051,18052,18054,18057],{"class":68,"line":3589},[66,18053,3814],{"class":72},[66,18055,18056],{"class":3793}," getWidth",[66,18058,1253],{"class":76},[66,18060,18061],{"class":68,"line":3594},[66,18062,3859],{"class":76},[66,18064,18065,18067],{"class":68,"line":3608},[66,18066,16557],{"class":72},[66,18068,18069],{"class":76}," m_W;\n",[66,18071,18072],{"class":68,"line":3613},[66,18073,4013],{"class":76},[66,18075,18076,18078,18081],{"class":68,"line":4401},[66,18077,3814],{"class":72},[66,18079,18080],{"class":3793}," getHeight",[66,18082,1253],{"class":76},[66,18084,18085],{"class":68,"line":4415},[66,18086,3859],{"class":76},[66,18088,18089,18091],{"class":68,"line":4423},[66,18090,16557],{"class":72},[66,18092,18093],{"class":76}," m_H;\n",[66,18095,18096],{"class":68,"line":4428},[66,18097,4013],{"class":76},[66,18099,18100],{"class":68,"line":4434},[66,18101,18102],{"class":758},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[66,18104,18105,18108,18111,18113,18116,18118],{"class":68,"line":4440},[66,18106,18107],{"class":72},"    bool",[66,18109,18110],{"class":3793}," isEqual",[66,18112,348],{"class":76},[66,18114,18115],{"class":3793},"Cube",[66,18117,4673],{"class":1234},[66,18119,313],{"class":76},[66,18121,18122],{"class":68,"line":4445},[66,18123,3859],{"class":76},[66,18125,18126,18128,18131,18134,18136,18138,18141,18143,18146,18149,18151,18153,18156,18158,18160,18163,18165,18167],{"class":68,"line":9759},[66,18127,4321],{"class":72},[66,18129,18130],{"class":76}," (c.",[66,18132,18133],{"class":3793},"getLength",[66,18135,14855],{"class":76},[66,18137,531],{"class":72},[66,18139,18140],{"class":76}," m_L ",[66,18142,3545],{"class":72},[66,18144,18145],{"class":76}," c.",[66,18147,18148],{"class":3793},"getWidth",[66,18150,14855],{"class":76},[66,18152,531],{"class":72},[66,18154,18155],{"class":76}," m_W ",[66,18157,3545],{"class":72},[66,18159,18145],{"class":76},[66,18161,18162],{"class":3793},"getHeight",[66,18164,14855],{"class":76},[66,18166,531],{"class":72},[66,18168,18169],{"class":76}," m_H)\n",[66,18171,18172],{"class":68,"line":9783},[66,18173,4334],{"class":76},[66,18175,18176,18178,18181],{"class":68,"line":9788},[66,18177,17535],{"class":72},[66,18179,18180],{"class":102}," true",[66,18182,3135],{"class":76},[66,18184,18185],{"class":68,"line":9794},[66,18186,4353],{"class":76},[66,18188,18189],{"class":68,"line":9821},[66,18190,4394],{"class":72},[66,18192,18193],{"class":68,"line":9826},[66,18194,4334],{"class":76},[66,18196,18197,18199,18202],{"class":68,"line":9832},[66,18198,17535],{"class":72},[66,18200,18201],{"class":102}," false",[66,18203,3135],{"class":76},[66,18205,18206],{"class":68,"line":9844},[66,18207,4353],{"class":76},[66,18209,18210],{"class":68,"line":9856},[66,18211,4013],{"class":76},[66,18213,18214],{"class":68,"line":9868},[66,18215,18216],{"class":758},"    \u002F\u002F私有属性\n",[66,18218,18219],{"class":68,"line":11523},[66,18220,17025],{"class":72},[66,18222,18223,18225],{"class":68,"line":11548},[66,18224,3814],{"class":72},[66,18226,18045],{"class":76},[66,18228,18229,18231],{"class":68,"line":11571},[66,18230,3814],{"class":72},[66,18232,18069],{"class":76},[66,18234,18235,18237],{"class":68,"line":11595},[66,18236,3814],{"class":72},[66,18238,18093],{"class":76},[66,18240,18241],{"class":68,"line":11600},[66,18242,109],{"emptyLinePlaceholder":108},[66,18244,18245],{"class":68,"line":11605},[66,18246,5812],{"class":76},[66,18248,18249],{"class":68,"line":11610},[66,18250,18251],{"class":758},"\u002F\u002F全局函数判断两个立方体是否相等\n",[66,18253,18254,18256,18258,18260,18262,18265,18267,18269,18272],{"class":68,"line":11619},[66,18255,3196],{"class":72},[66,18257,18110],{"class":3793},[66,18259,348],{"class":76},[66,18261,18115],{"class":3793},[66,18263,18264],{"class":1234}," c1",[66,18266,2362],{"class":76},[66,18268,18115],{"class":3793},[66,18270,18271],{"class":1234}," c2",[66,18273,313],{"class":76},[66,18275,18276],{"class":68,"line":11624},[66,18277,3388],{"class":76},[66,18279,18280,18282,18285,18287,18289,18291,18294,18296,18299,18301,18303,18305,18307,18309,18311,18313,18315,18317,18319,18321,18323,18325,18327,18329],{"class":68,"line":11630},[66,18281,5907],{"class":72},[66,18283,18284],{"class":76}," (c1.",[66,18286,18133],{"class":3793},[66,18288,14855],{"class":76},[66,18290,531],{"class":72},[66,18292,18293],{"class":76}," c2.",[66,18295,18133],{"class":3793},[66,18297,18298],{"class":76},"()) ",[66,18300,3545],{"class":72},[66,18302,18284],{"class":76},[66,18304,18148],{"class":3793},[66,18306,14855],{"class":76},[66,18308,531],{"class":72},[66,18310,18293],{"class":76},[66,18312,18148],{"class":3793},[66,18314,18298],{"class":76},[66,18316,3545],{"class":72},[66,18318,18284],{"class":76},[66,18320,18162],{"class":3793},[66,18322,14855],{"class":76},[66,18324,531],{"class":72},[66,18326,18293],{"class":76},[66,18328,18162],{"class":3793},[66,18330,18331],{"class":76},"());\n",[66,18333,18334],{"class":68,"line":11651},[66,18335,3407],{"class":76},[66,18337,18338,18340,18342],{"class":68,"line":11657},[66,18339,2003],{"class":72},[66,18341,3803],{"class":3793},[66,18343,1253],{"class":76},[66,18345,18346],{"class":68,"line":11671},[66,18347,3388],{"class":76},[66,18349,18350],{"class":68,"line":11677},[66,18351,18352],{"class":76},"    Cube c1;\n",[66,18354,18355],{"class":68,"line":11704},[66,18356,18357],{"class":758},"    \u002F\u002F输入立方体的长宽高\n",[66,18359,18360,18362,18364,18367,18369],{"class":68,"line":11713},[66,18361,3393],{"class":76},[66,18363,3019],{"class":72},[66,18365,18366],{"class":356},"\"请输入第一个立方体的长、宽、高：\"",[66,18368,3019],{"class":72},[66,18370,3041],{"class":76},[66,18372,18373,18375],{"class":68,"line":11719},[66,18374,3814],{"class":72},[66,18376,18377],{"class":76}," l,w,h,l1,w1,h1;\n",[66,18379,18380,18382,18384,18386,18388,18390,18392],{"class":68,"line":11727},[66,18381,3841],{"class":76},[66,18383,3271],{"class":72},[66,18385,2497],{"class":76},[66,18387,3271],{"class":72},[66,18389,2774],{"class":76},[66,18391,3271],{"class":72},[66,18393,17930],{"class":76},[66,18395,18396,18399,18402],{"class":68,"line":11732},[66,18397,18398],{"class":76},"    c1.",[66,18400,18401],{"class":3793},"setLwh",[66,18403,18404],{"class":76},"(l,w,h);\n",[66,18406,18408],{"class":68,"line":18407},66,[66,18409,18410],{"class":758},"    \u002F\u002F面积\n",[66,18412,18414,18416,18418,18421,18423,18425,18428,18430,18432],{"class":68,"line":18413},67,[66,18415,3393],{"class":76},[66,18417,3019],{"class":72},[66,18419,18420],{"class":356},"\"立方体的表面积为：\"",[66,18422,3019],{"class":72},[66,18424,16634],{"class":76},[66,18426,18427],{"class":3793},"mianji",[66,18429,4251],{"class":76},[66,18431,3019],{"class":72},[66,18433,3041],{"class":76},[66,18435,18437],{"class":68,"line":18436},68,[66,18438,18439],{"class":758},"    \u002F\u002F体积\n",[66,18441,18443,18445,18447,18450,18452,18454,18457,18459,18461],{"class":68,"line":18442},69,[66,18444,3393],{"class":76},[66,18446,3019],{"class":72},[66,18448,18449],{"class":356},"\"立方体的体积为：\"",[66,18451,3019],{"class":72},[66,18453,16634],{"class":76},[66,18455,18456],{"class":3793},"tiji",[66,18458,4251],{"class":76},[66,18460,3019],{"class":72},[66,18462,3041],{"class":76},[66,18464,18466,18468,18470,18473,18475],{"class":68,"line":18465},70,[66,18467,3393],{"class":76},[66,18469,3019],{"class":72},[66,18471,18472],{"class":356},"\"请输入第二个立方体的长、宽、高：\"",[66,18474,3019],{"class":72},[66,18476,3041],{"class":76},[66,18478,18480,18482,18484,18487,18489,18492,18494],{"class":68,"line":18479},71,[66,18481,3841],{"class":76},[66,18483,3271],{"class":72},[66,18485,18486],{"class":76},"l1",[66,18488,3271],{"class":72},[66,18490,18491],{"class":76},"w1",[66,18493,3271],{"class":72},[66,18495,18496],{"class":76},"h1;\n",[66,18498,18500],{"class":68,"line":18499},72,[66,18501,18502],{"class":76},"    Cube c2;\n",[66,18504,18506,18509,18511],{"class":68,"line":18505},73,[66,18507,18508],{"class":76},"    c2.",[66,18510,18401],{"class":3793},[66,18512,18513],{"class":76},"(l1,w1,h1);\n",[66,18515,18517,18519,18521,18524,18526,18529,18531,18533,18535],{"class":68,"line":18516},74,[66,18518,3393],{"class":76},[66,18520,3019],{"class":72},[66,18522,18523],{"class":356},"\"第二个立方体的表面积为：\"",[66,18525,3019],{"class":72},[66,18527,18528],{"class":76},"c2.",[66,18530,18427],{"class":3793},[66,18532,4251],{"class":76},[66,18534,3019],{"class":72},[66,18536,3041],{"class":76},[66,18538,18540,18542,18544,18547,18549,18551,18553,18555,18557],{"class":68,"line":18539},75,[66,18541,3393],{"class":76},[66,18543,3019],{"class":72},[66,18545,18546],{"class":356},"\"第二个立方体的体积为：\"",[66,18548,3019],{"class":72},[66,18550,18528],{"class":76},[66,18552,18456],{"class":3793},[66,18554,4251],{"class":76},[66,18556,3019],{"class":72},[66,18558,3041],{"class":76},[66,18560,18562],{"class":68,"line":18561},76,[66,18563,109],{"emptyLinePlaceholder":108},[66,18565,18567],{"class":68,"line":18566},77,[66,18568,18569],{"class":758},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[66,18571,18573,18575,18577,18580,18582],{"class":68,"line":18572},78,[66,18574,3393],{"class":76},[66,18576,3019],{"class":72},[66,18578,18579],{"class":356},"\"内部函数判断结果：\"",[66,18581,3019],{"class":72},[66,18583,3041],{"class":76},[66,18585,18587,18589,18591,18594],{"class":68,"line":18586},79,[66,18588,380],{"class":72},[66,18590,18284],{"class":76},[66,18592,18593],{"class":3793},"isEqual",[66,18595,18596],{"class":76},"(c2))\n",[66,18598,18600],{"class":68,"line":18599},80,[66,18601,3859],{"class":76},[66,18603,18605,18607,18609,18612,18614],{"class":68,"line":18604},81,[66,18606,5269],{"class":76},[66,18608,3019],{"class":72},[66,18610,18611],{"class":356},"\"两个立方体相等\"",[66,18613,3019],{"class":72},[66,18615,3041],{"class":76},[66,18617,18619],{"class":68,"line":18618},82,[66,18620,4013],{"class":76},[66,18622,18624],{"class":68,"line":18623},83,[66,18625,18626],{"class":72},"    else\n",[66,18628,18630],{"class":68,"line":18629},84,[66,18631,3859],{"class":76},[66,18633,18635,18637,18639,18642,18644],{"class":68,"line":18634},85,[66,18636,5269],{"class":76},[66,18638,3019],{"class":72},[66,18640,18641],{"class":356},"\"两个立方体不相等\"",[66,18643,3019],{"class":72},[66,18645,3041],{"class":76},[66,18647,18649],{"class":68,"line":18648},86,[66,18650,4013],{"class":76},[66,18652,18654],{"class":68,"line":18653},87,[66,18655,109],{"emptyLinePlaceholder":108},[66,18657,18659,18661,18663,18666,18668],{"class":68,"line":18658},88,[66,18660,3393],{"class":76},[66,18662,3019],{"class":72},[66,18664,18665],{"class":356},"\"全局函数判断结果：\"",[66,18667,3019],{"class":72},[66,18669,3041],{"class":76},[66,18671,18673,18675,18677,18679],{"class":68,"line":18672},89,[66,18674,380],{"class":72},[66,18676,3492],{"class":76},[66,18678,18593],{"class":3793},[66,18680,18681],{"class":76},"(c1, c2))\n",[66,18683,18685],{"class":68,"line":18684},90,[66,18686,3859],{"class":76},[66,18688,18690,18692,18694,18696,18698],{"class":68,"line":18689},91,[66,18691,5269],{"class":76},[66,18693,3019],{"class":72},[66,18695,18611],{"class":356},[66,18697,3019],{"class":72},[66,18699,3041],{"class":76},[66,18701,18703],{"class":68,"line":18702},92,[66,18704,4013],{"class":76},[66,18706,18708],{"class":68,"line":18707},93,[66,18709,18626],{"class":72},[66,18711,18713],{"class":68,"line":18712},94,[66,18714,3859],{"class":76},[66,18716,18718,18720,18722,18724,18726],{"class":68,"line":18717},95,[66,18719,5269],{"class":76},[66,18721,3019],{"class":72},[66,18723,18641],{"class":356},[66,18725,3019],{"class":72},[66,18727,3041],{"class":76},[66,18729,18731],{"class":68,"line":18730},96,[66,18732,4013],{"class":76},[66,18734,18736],{"class":68,"line":18735},97,[66,18737,3407],{"class":76},[31,18739,18740],{"start":80},[34,18741,18742],{},[2141,18743,18744],{},"练习案例2：点和圆的关系",[2982,18746,18747],{},[34,18748,18749],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[57,18751,18753],{"className":1989,"code":18752,"language":1991,"meta":62,"style":62},"#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",[23,18754,18755,18761,18771,18778,18785,18789,18793,18798,18832,18837,18853,18867,18871,18875,18882,18889,18893,18899,18903,18907,18911,18933,18956,18961,18975,18990,18994,18998,19004,19009,19014,19018,19044,19048,19078,19106,19134,19151,19155,19168,19172,19176,19180,19193,19197,19201,19209,19213,19217,19221,19226,19230,19241,19248,19257,19267,19278,19285,19298,19309,19319,19330,19337,19351,19356,19366,19374],{"__ignoreMap":62},[66,18756,18757,18759],{"class":68,"line":69},[66,18758,3779],{"class":72},[66,18760,3782],{"class":356},[66,18762,18763,18765,18767,18769],{"class":68,"line":80},[66,18764,3787],{"class":72},[66,18766,3790],{"class":72},[66,18768,3794],{"class":3793},[66,18770,3135],{"class":76},[66,18772,18773,18775],{"class":68,"line":112},[66,18774,3779],{"class":72},[66,18776,18777],{"class":356},"\u003Ccmath>\n",[66,18779,18780,18782],{"class":68,"line":129},[66,18781,16499],{"class":72},[66,18783,18784],{"class":3793}," Point\n",[66,18786,18787],{"class":68,"line":138},[66,18788,3388],{"class":76},[66,18790,18791],{"class":68,"line":227},[66,18792,16521],{"class":72},[66,18794,18795],{"class":68,"line":236},[66,18796,18797],{"class":758},"    \u002F\u002F赋值\n",[66,18799,18800,18802,18805,18807,18809,18812,18814,18816,18819,18822,18824,18827,18829],{"class":68,"line":241},[66,18801,16713],{"class":72},[66,18803,18804],{"class":3793}," setPoint",[66,18806,348],{"class":76},[66,18808,15842],{"class":72},[66,18810,18811],{"class":1234}," x",[66,18813,307],{"class":76},[66,18815,15842],{"class":72},[66,18817,18818],{"class":1234}," y",[66,18820,18821],{"class":76},") { m_x ",[66,18823,99],{"class":72},[66,18825,18826],{"class":76}," x; m_y ",[66,18828,99],{"class":72},[66,18830,18831],{"class":76}," y; }\n",[66,18833,18834],{"class":68,"line":372},[66,18835,18836],{"class":758},"    \u002F\u002F获取坐标\n",[66,18838,18839,18841,18844,18847,18850],{"class":68,"line":377},[66,18840,16543],{"class":72},[66,18842,18843],{"class":3793}," getX",[66,18845,18846],{"class":76},"() { ",[66,18848,18849],{"class":72},"return",[66,18851,18852],{"class":76}," m_x; }\n",[66,18854,18855,18857,18860,18862,18864],{"class":68,"line":392},[66,18856,16543],{"class":72},[66,18858,18859],{"class":3793}," getY",[66,18861,18846],{"class":76},[66,18863,18849],{"class":72},[66,18865,18866],{"class":76}," m_y; }\n",[66,18868,18869],{"class":68,"line":405},[66,18870,109],{"emptyLinePlaceholder":108},[66,18872,18873],{"class":68,"line":418},[66,18874,17025],{"class":72},[66,18876,18877,18879],{"class":68,"line":430},[66,18878,16543],{"class":72},[66,18880,18881],{"class":76}," m_x;\n",[66,18883,18884,18886],{"class":68,"line":438},[66,18885,16543],{"class":72},[66,18887,18888],{"class":76}," m_y;\n",[66,18890,18891],{"class":68,"line":465},[66,18892,5812],{"class":76},[66,18894,18895,18897],{"class":68,"line":1805},[66,18896,16499],{"class":72},[66,18898,16502],{"class":3793},[66,18900,18901],{"class":68,"line":1817},[66,18902,3388],{"class":76},[66,18904,18905],{"class":68,"line":1822},[66,18906,16521],{"class":72},[66,18908,18909],{"class":68,"line":1829},[66,18910,18797],{"class":758},[66,18912,18913,18915,18918,18920,18922,18925,18928,18930],{"class":68,"line":3529},[66,18914,16713],{"class":72},[66,18916,18917],{"class":3793}," setRadius",[66,18919,348],{"class":76},[66,18921,15842],{"class":72},[66,18923,18924],{"class":1234}," r",[66,18926,18927],{"class":76},") { m_r ",[66,18929,99],{"class":72},[66,18931,18932],{"class":76}," r; }\n",[66,18934,18935,18937,18940,18942,18945,18948,18951,18953],{"class":68,"line":3557},[66,18936,16713],{"class":72},[66,18938,18939],{"class":3793}," setCenter",[66,18941,348],{"class":76},[66,18943,18944],{"class":3793},"Point",[66,18946,18947],{"class":1234}," center",[66,18949,18950],{"class":76},") { m_center ",[66,18952,99],{"class":72},[66,18954,18955],{"class":76}," center; }\n",[66,18957,18958],{"class":68,"line":3562},[66,18959,18960],{"class":758},"    \u002F\u002F获取属性\n",[66,18962,18963,18965,18968,18970,18972],{"class":68,"line":3579},[66,18964,16543],{"class":72},[66,18966,18967],{"class":3793}," getRadius",[66,18969,18846],{"class":76},[66,18971,18849],{"class":72},[66,18973,18974],{"class":76}," m_r; }\n",[66,18976,18977,18980,18983,18985,18987],{"class":68,"line":3584},[66,18978,18979],{"class":3793},"    Point",[66,18981,18982],{"class":3793}," getCenter",[66,18984,18846],{"class":76},[66,18986,18849],{"class":72},[66,18988,18989],{"class":76}," m_center; }\n",[66,18991,18992],{"class":68,"line":3589},[66,18993,109],{"emptyLinePlaceholder":108},[66,18995,18996],{"class":68,"line":3594},[66,18997,17025],{"class":72},[66,18999,19000,19002],{"class":68,"line":3608},[66,19001,16543],{"class":72},[66,19003,16533],{"class":76},[66,19005,19006],{"class":68,"line":3613},[66,19007,19008],{"class":758},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[66,19010,19011],{"class":68,"line":4401},[66,19012,19013],{"class":76},"    Point m_center;\n",[66,19015,19016],{"class":68,"line":4415},[66,19017,5812],{"class":76},[66,19019,19020,19022,19025,19027,19030,19032,19034,19036,19038,19040,19042],{"class":68,"line":4423},[66,19021,7176],{"class":72},[66,19023,19024],{"class":3793}," isInCircle",[66,19026,348],{"class":76},[66,19028,19029],{"class":3793},"Circle",[66,19031,12390],{"class":72},[66,19033,2278],{"class":1234},[66,19035,2362],{"class":76},[66,19037,18944],{"class":3793},[66,19039,12390],{"class":72},[66,19041,19],{"class":1234},[66,19043,313],{"class":76},[66,19045,19046],{"class":68,"line":4428},[66,19047,3388],{"class":76},[66,19049,19050,19052,19055,19057,19059,19062,19065,19068,19070,19072,19074,19076],{"class":68,"line":4434},[66,19051,16543],{"class":72},[66,19053,19054],{"class":76}," dx ",[66,19056,99],{"class":72},[66,19058,18145],{"class":76},[66,19060,19061],{"class":3793},"getCenter",[66,19063,19064],{"class":76},"().",[66,19066,19067],{"class":3793},"getX",[66,19069,14855],{"class":76},[66,19071,2511],{"class":72},[66,19073,17691],{"class":76},[66,19075,19067],{"class":3793},[66,19077,7448],{"class":76},[66,19079,19080,19082,19085,19087,19089,19091,19093,19096,19098,19100,19102,19104],{"class":68,"line":4440},[66,19081,16543],{"class":72},[66,19083,19084],{"class":76}," dy ",[66,19086,99],{"class":72},[66,19088,18145],{"class":76},[66,19090,19061],{"class":3793},[66,19092,19064],{"class":76},[66,19094,19095],{"class":3793},"getY",[66,19097,14855],{"class":76},[66,19099,2511],{"class":72},[66,19101,17691],{"class":76},[66,19103,19095],{"class":3793},[66,19105,7448],{"class":76},[66,19107,19108,19110,19113,19115,19118,19121,19123,19125,19127,19129,19131],{"class":68,"line":4445},[66,19109,16543],{"class":72},[66,19111,19112],{"class":76}," distance ",[66,19114,99],{"class":72},[66,19116,19117],{"class":3793}," sqrt",[66,19119,19120],{"class":76},"(dx ",[66,19122,1208],{"class":72},[66,19124,19054],{"class":76},[66,19126,1184],{"class":72},[66,19128,19084],{"class":76},[66,19130,1208],{"class":72},[66,19132,19133],{"class":76}," dy);\n",[66,19135,19136,19138,19141,19143,19145,19148],{"class":68,"line":9759},[66,19137,380],{"class":72},[66,19139,19140],{"class":76}," (distance ",[66,19142,413],{"class":72},[66,19144,18145],{"class":76},[66,19146,19147],{"class":3793},"getRadius",[66,19149,19150],{"class":76},"())\n",[66,19152,19153],{"class":68,"line":9783},[66,19154,3859],{"class":76},[66,19156,19157,19159,19161,19164,19166],{"class":68,"line":9788},[66,19158,11476],{"class":76},[66,19160,3019],{"class":72},[66,19162,19163],{"class":356}," \"点在圆内\"",[66,19165,3286],{"class":72},[66,19167,10651],{"class":76},[66,19169,19170],{"class":68,"line":9794},[66,19171,4013],{"class":76},[66,19173,19174],{"class":68,"line":9821},[66,19175,18626],{"class":72},[66,19177,19178],{"class":68,"line":9826},[66,19179,3859],{"class":76},[66,19181,19182,19184,19186,19189,19191],{"class":68,"line":9832},[66,19183,11476],{"class":76},[66,19185,3019],{"class":72},[66,19187,19188],{"class":356}," \"点在圆外\"",[66,19190,3286],{"class":72},[66,19192,10651],{"class":76},[66,19194,19195],{"class":68,"line":9844},[66,19196,4013],{"class":76},[66,19198,19199],{"class":68,"line":9856},[66,19200,3407],{"class":76},[66,19202,19203,19205,19207],{"class":68,"line":9868},[66,19204,2003],{"class":72},[66,19206,3803],{"class":3793},[66,19208,1253],{"class":76},[66,19210,19211],{"class":68,"line":11523},[66,19212,3388],{"class":76},[66,19214,19215],{"class":68,"line":11548},[66,19216,16857],{"class":758},[66,19218,19219],{"class":68,"line":11571},[66,19220,16604],{"class":76},[66,19222,19223],{"class":68,"line":11595},[66,19224,19225],{"class":76},"    Point p1;\n",[66,19227,19228],{"class":68,"line":11600},[66,19229,18797],{"class":758},[66,19231,19232,19234,19236,19239],{"class":68,"line":11605},[66,19233,3393],{"class":76},[66,19235,3019],{"class":72},[66,19237,19238],{"class":356},"\"请输入圆的半径：\"",[66,19240,3135],{"class":76},[66,19242,19243,19245],{"class":68,"line":11610},[66,19244,16543],{"class":72},[66,19246,19247],{"class":76}," r;\n",[66,19249,19250,19252,19254],{"class":68,"line":11619},[66,19251,3841],{"class":76},[66,19253,3271],{"class":72},[66,19255,19256],{"class":76},"r;\n",[66,19258,19259,19261,19264],{"class":68,"line":11624},[66,19260,18398],{"class":76},[66,19262,19263],{"class":3793},"setRadius",[66,19265,19266],{"class":76},"(r);\n",[66,19268,19269,19271,19273,19276],{"class":68,"line":11630},[66,19270,3393],{"class":76},[66,19272,3019],{"class":72},[66,19274,19275],{"class":356},"\"请输入圆心坐标：\"",[66,19277,3135],{"class":76},[66,19279,19280,19282],{"class":68,"line":11651},[66,19281,16543],{"class":72},[66,19283,19284],{"class":76}," x, y;\n",[66,19286,19287,19289,19291,19293,19295],{"class":68,"line":11657},[66,19288,3841],{"class":76},[66,19290,3271],{"class":72},[66,19292,2799],{"class":76},[66,19294,3271],{"class":72},[66,19296,19297],{"class":76},"y;\n",[66,19299,19300,19303,19306],{"class":68,"line":11671},[66,19301,19302],{"class":76},"    p1.",[66,19304,19305],{"class":3793},"setPoint",[66,19307,19308],{"class":76},"(x, y);\n",[66,19310,19311,19313,19316],{"class":68,"line":11677},[66,19312,18398],{"class":76},[66,19314,19315],{"class":3793},"setCenter",[66,19317,19318],{"class":76},"(p1);\n",[66,19320,19321,19323,19325,19328],{"class":68,"line":11704},[66,19322,3393],{"class":76},[66,19324,3019],{"class":72},[66,19326,19327],{"class":356},"\"请输入测试点坐标：\"",[66,19329,3135],{"class":76},[66,19331,19332,19334],{"class":68,"line":11713},[66,19333,16543],{"class":72},[66,19335,19336],{"class":76}," x1, y1;\n",[66,19338,19339,19341,19343,19346,19348],{"class":68,"line":11719},[66,19340,3841],{"class":76},[66,19342,3271],{"class":72},[66,19344,19345],{"class":76},"x1",[66,19347,3271],{"class":72},[66,19349,19350],{"class":76},"y1;\n",[66,19352,19353],{"class":68,"line":11727},[66,19354,19355],{"class":76},"    Point p2;\n",[66,19357,19358,19361,19363],{"class":68,"line":11732},[66,19359,19360],{"class":76},"    p2.",[66,19362,19305],{"class":3793},[66,19364,19365],{"class":76},"(x1, y1);\n",[66,19367,19368,19371],{"class":68,"line":18407},[66,19369,19370],{"class":3793},"    isInCircle",[66,19372,19373],{"class":76},"(c1, p2);\n",[66,19375,19376],{"class":68,"line":18413},[66,19377,3407],{"class":76},[19,19379,19380],{},"在类中可以让另一个类作为本来的成员",[19,19382,19383],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,19385,19386],{},"创建point.h",[57,19388,19390],{"className":1989,"code":19389,"language":1991,"meta":62,"style":62},"#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",[23,19391,19392,19403,19409,19419,19425,19429,19434,19438,19442,19462,19466,19474,19482,19486,19490,19496,19502],{"__ignoreMap":62},[66,19393,19394,19397,19400],{"class":68,"line":69},[66,19395,19396],{"class":72},"#pragma",[66,19398,19399],{"class":3793}," once",[66,19401,19402],{"class":758}," \u002F\u002F防止头文件重复包含\n",[66,19404,19405,19407],{"class":68,"line":80},[66,19406,3779],{"class":72},[66,19408,3782],{"class":356},[66,19410,19411,19413,19415,19417],{"class":68,"line":112},[66,19412,3787],{"class":72},[66,19414,3790],{"class":72},[66,19416,3794],{"class":3793},[66,19418,3135],{"class":76},[66,19420,19421,19423],{"class":68,"line":129},[66,19422,16499],{"class":72},[66,19424,18784],{"class":3793},[66,19426,19427],{"class":68,"line":138},[66,19428,3388],{"class":76},[66,19430,19431],{"class":68,"line":227},[66,19432,19433],{"class":758},"\u002F\u002F做好声明与变量定义就可以\n",[66,19435,19436],{"class":68,"line":236},[66,19437,16521],{"class":72},[66,19439,19440],{"class":68,"line":241},[66,19441,18797],{"class":758},[66,19443,19444,19446,19448,19450,19452,19454,19456,19458,19460],{"class":68,"line":372},[66,19445,16713],{"class":72},[66,19447,18804],{"class":3793},[66,19449,348],{"class":76},[66,19451,15842],{"class":72},[66,19453,18811],{"class":1234},[66,19455,307],{"class":76},[66,19457,15842],{"class":72},[66,19459,18818],{"class":1234},[66,19461,4543],{"class":76},[66,19463,19464],{"class":68,"line":377},[66,19465,18836],{"class":758},[66,19467,19468,19470,19472],{"class":68,"line":392},[66,19469,16543],{"class":72},[66,19471,18843],{"class":3793},[66,19473,7448],{"class":76},[66,19475,19476,19478,19480],{"class":68,"line":405},[66,19477,16543],{"class":72},[66,19479,18859],{"class":3793},[66,19481,7448],{"class":76},[66,19483,19484],{"class":68,"line":418},[66,19485,109],{"emptyLinePlaceholder":108},[66,19487,19488],{"class":68,"line":430},[66,19489,17025],{"class":72},[66,19491,19492,19494],{"class":68,"line":438},[66,19493,16543],{"class":72},[66,19495,18881],{"class":76},[66,19497,19498,19500],{"class":68,"line":465},[66,19499,16543],{"class":72},[66,19501,18888],{"class":76},[66,19503,19504],{"class":68,"line":1805},[66,19505,5812],{"class":76},[19,19507,19508],{},"创建point.cpp",[57,19510,19512],{"className":1989,"code":19511,"language":1991,"meta":62,"style":62},"#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",[23,19513,19514,19521,19526,19560,19564,19580],{"__ignoreMap":62},[66,19515,19516,19518],{"class":68,"line":69},[66,19517,3779],{"class":72},[66,19519,19520],{"class":356},"\u003Cpoint.h>\n",[66,19522,19523],{"class":68,"line":80},[66,19524,19525],{"class":758},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[66,19527,19528,19530,19533,19536,19538,19540,19542,19544,19546,19548,19550,19552,19554,19556,19558],{"class":68,"line":112},[66,19529,16713],{"class":72},[66,19531,19532],{"class":3793}," Point",[66,19534,19535],{"class":76},"::",[66,19537,19305],{"class":3793},[66,19539,348],{"class":76},[66,19541,15842],{"class":72},[66,19543,18811],{"class":1234},[66,19545,307],{"class":76},[66,19547,15842],{"class":72},[66,19549,18818],{"class":1234},[66,19551,18821],{"class":76},[66,19553,99],{"class":72},[66,19555,18826],{"class":76},[66,19557,99],{"class":72},[66,19559,18831],{"class":76},[66,19561,19562],{"class":68,"line":129},[66,19563,18836],{"class":758},[66,19565,19566,19568,19570,19572,19574,19576,19578],{"class":68,"line":138},[66,19567,16543],{"class":72},[66,19569,19532],{"class":3793},[66,19571,19535],{"class":76},[66,19573,19067],{"class":3793},[66,19575,18846],{"class":76},[66,19577,18849],{"class":72},[66,19579,18852],{"class":76},[66,19581,19582,19584,19586,19588,19590,19592,19594],{"class":68,"line":227},[66,19583,16543],{"class":72},[66,19585,19532],{"class":3793},[66,19587,19535],{"class":76},[66,19589,19095],{"class":3793},[66,19591,18846],{"class":76},[66,19593,18849],{"class":72},[66,19595,18866],{"class":76},[19,19597,19598],{},"创建circle.h",[57,19600,19602],{"className":1989,"code":19601,"language":1991,"meta":62,"style":62},"#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",[23,19603,19604,19611,19617,19627,19633,19639,19643,19647,19651,19665,19679,19683,19691,19699,19703,19707,19713,19717,19721],{"__ignoreMap":62},[66,19605,19606,19608],{"class":68,"line":69},[66,19607,19396],{"class":72},[66,19609,19610],{"class":3793}," once\n",[66,19612,19613,19615],{"class":68,"line":80},[66,19614,3779],{"class":72},[66,19616,3782],{"class":356},[66,19618,19619,19621,19623,19625],{"class":68,"line":112},[66,19620,3787],{"class":72},[66,19622,3790],{"class":72},[66,19624,3794],{"class":3793},[66,19626,3135],{"class":76},[66,19628,19629,19631],{"class":68,"line":129},[66,19630,3779],{"class":72},[66,19632,19520],{"class":356},[66,19634,19635,19637],{"class":68,"line":138},[66,19636,16499],{"class":72},[66,19638,16502],{"class":3793},[66,19640,19641],{"class":68,"line":227},[66,19642,3388],{"class":76},[66,19644,19645],{"class":68,"line":236},[66,19646,16521],{"class":72},[66,19648,19649],{"class":68,"line":241},[66,19650,18797],{"class":758},[66,19652,19653,19655,19657,19659,19661,19663],{"class":68,"line":372},[66,19654,16713],{"class":72},[66,19656,18917],{"class":3793},[66,19658,348],{"class":76},[66,19660,15842],{"class":72},[66,19662,18924],{"class":1234},[66,19664,4543],{"class":76},[66,19666,19667,19669,19671,19673,19675,19677],{"class":68,"line":377},[66,19668,16713],{"class":72},[66,19670,18939],{"class":3793},[66,19672,348],{"class":76},[66,19674,18944],{"class":3793},[66,19676,18947],{"class":1234},[66,19678,4543],{"class":76},[66,19680,19681],{"class":68,"line":392},[66,19682,18960],{"class":758},[66,19684,19685,19687,19689],{"class":68,"line":405},[66,19686,16543],{"class":72},[66,19688,18967],{"class":3793},[66,19690,7448],{"class":76},[66,19692,19693,19695,19697],{"class":68,"line":418},[66,19694,18979],{"class":3793},[66,19696,18982],{"class":3793},[66,19698,7448],{"class":76},[66,19700,19701],{"class":68,"line":430},[66,19702,109],{"emptyLinePlaceholder":108},[66,19704,19705],{"class":68,"line":438},[66,19706,17025],{"class":72},[66,19708,19709,19711],{"class":68,"line":465},[66,19710,16543],{"class":72},[66,19712,16533],{"class":76},[66,19714,19715],{"class":68,"line":1805},[66,19716,19008],{"class":758},[66,19718,19719],{"class":68,"line":1817},[66,19720,19013],{"class":76},[66,19722,19723],{"class":68,"line":1822},[66,19724,5812],{"class":76},[19,19726,19727],{},"创建circle.cpp",[57,19729,19731],{"className":1989,"code":19730,"language":1991,"meta":62,"style":62},"#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",[23,19732,19733,19740,19763,19785,19790,19806],{"__ignoreMap":62},[66,19734,19735,19737],{"class":68,"line":69},[66,19736,3779],{"class":72},[66,19738,19739],{"class":356},"\u003Ccircle.h>\n",[66,19741,19742,19744,19747,19749,19751,19753,19755,19757,19759,19761],{"class":68,"line":80},[66,19743,7176],{"class":72},[66,19745,19746],{"class":3793}," Circle",[66,19748,19535],{"class":76},[66,19750,19263],{"class":3793},[66,19752,348],{"class":76},[66,19754,15842],{"class":72},[66,19756,18924],{"class":1234},[66,19758,18927],{"class":76},[66,19760,99],{"class":72},[66,19762,18932],{"class":76},[66,19764,19765,19767,19769,19771,19773,19775,19777,19779,19781,19783],{"class":68,"line":112},[66,19766,7176],{"class":72},[66,19768,19746],{"class":3793},[66,19770,19535],{"class":76},[66,19772,19315],{"class":3793},[66,19774,348],{"class":76},[66,19776,18944],{"class":3793},[66,19778,18947],{"class":1234},[66,19780,18950],{"class":76},[66,19782,99],{"class":72},[66,19784,18955],{"class":76},[66,19786,19787],{"class":68,"line":129},[66,19788,19789],{"class":758},"\u002F\u002F获取属性\n",[66,19791,19792,19794,19796,19798,19800,19802,19804],{"class":68,"line":138},[66,19793,15842],{"class":72},[66,19795,19746],{"class":3793},[66,19797,19535],{"class":76},[66,19799,19147],{"class":3793},[66,19801,18846],{"class":76},[66,19803,18849],{"class":72},[66,19805,18974],{"class":76},[66,19807,19808,19810,19812,19814,19816,19818,19820],{"class":68,"line":227},[66,19809,18944],{"class":3793},[66,19811,19746],{"class":3793},[66,19813,19535],{"class":76},[66,19815,19061],{"class":3793},[66,19817,18846],{"class":76},[66,19819,18849],{"class":72},[66,19821,18989],{"class":76},[19,19823,19824],{},"使用封装的类",[57,19826,19828],{"className":1989,"code":19827,"language":1991,"meta":62,"style":62},"#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",[23,19829,19830,19836,19846,19852,19858,19882,19886,19912,19938,19962,19976,19980,19992,19996,20000,20004,20016,20020,20024,20032,20036,20040,20044,20048,20052,20062,20068,20076,20084,20094,20100,20112,20120,20128,20138,20144,20156,20160,20168,20174],{"__ignoreMap":62},[66,19831,19832,19834],{"class":68,"line":69},[66,19833,3779],{"class":72},[66,19835,3782],{"class":356},[66,19837,19838,19840,19842,19844],{"class":68,"line":80},[66,19839,3787],{"class":72},[66,19841,3790],{"class":72},[66,19843,3794],{"class":3793},[66,19845,3135],{"class":76},[66,19847,19848,19850],{"class":68,"line":112},[66,19849,3779],{"class":72},[66,19851,19739],{"class":356},[66,19853,19854,19856],{"class":68,"line":129},[66,19855,3779],{"class":72},[66,19857,19520],{"class":356},[66,19859,19860,19862,19864,19866,19868,19870,19872,19874,19876,19878,19880],{"class":68,"line":138},[66,19861,7176],{"class":72},[66,19863,19024],{"class":3793},[66,19865,348],{"class":76},[66,19867,19029],{"class":3793},[66,19869,12390],{"class":72},[66,19871,2278],{"class":1234},[66,19873,2362],{"class":76},[66,19875,18944],{"class":3793},[66,19877,12390],{"class":72},[66,19879,19],{"class":1234},[66,19881,313],{"class":76},[66,19883,19884],{"class":68,"line":227},[66,19885,3388],{"class":76},[66,19887,19888,19890,19892,19894,19896,19898,19900,19902,19904,19906,19908,19910],{"class":68,"line":236},[66,19889,16543],{"class":72},[66,19891,19054],{"class":76},[66,19893,99],{"class":72},[66,19895,18145],{"class":76},[66,19897,19061],{"class":3793},[66,19899,19064],{"class":76},[66,19901,19067],{"class":3793},[66,19903,14855],{"class":76},[66,19905,2511],{"class":72},[66,19907,17691],{"class":76},[66,19909,19067],{"class":3793},[66,19911,7448],{"class":76},[66,19913,19914,19916,19918,19920,19922,19924,19926,19928,19930,19932,19934,19936],{"class":68,"line":241},[66,19915,16543],{"class":72},[66,19917,19084],{"class":76},[66,19919,99],{"class":72},[66,19921,18145],{"class":76},[66,19923,19061],{"class":3793},[66,19925,19064],{"class":76},[66,19927,19095],{"class":3793},[66,19929,14855],{"class":76},[66,19931,2511],{"class":72},[66,19933,17691],{"class":76},[66,19935,19095],{"class":3793},[66,19937,7448],{"class":76},[66,19939,19940,19942,19944,19946,19948,19950,19952,19954,19956,19958,19960],{"class":68,"line":372},[66,19941,16543],{"class":72},[66,19943,19112],{"class":76},[66,19945,99],{"class":72},[66,19947,19117],{"class":3793},[66,19949,19120],{"class":76},[66,19951,1208],{"class":72},[66,19953,19054],{"class":76},[66,19955,1184],{"class":72},[66,19957,19084],{"class":76},[66,19959,1208],{"class":72},[66,19961,19133],{"class":76},[66,19963,19964,19966,19968,19970,19972,19974],{"class":68,"line":377},[66,19965,380],{"class":72},[66,19967,19140],{"class":76},[66,19969,413],{"class":72},[66,19971,18145],{"class":76},[66,19973,19147],{"class":3793},[66,19975,19150],{"class":76},[66,19977,19978],{"class":68,"line":392},[66,19979,3859],{"class":76},[66,19981,19982,19984,19986,19988,19990],{"class":68,"line":405},[66,19983,11476],{"class":76},[66,19985,3019],{"class":72},[66,19987,19163],{"class":356},[66,19989,3286],{"class":72},[66,19991,10651],{"class":76},[66,19993,19994],{"class":68,"line":418},[66,19995,4013],{"class":76},[66,19997,19998],{"class":68,"line":430},[66,19999,18626],{"class":72},[66,20001,20002],{"class":68,"line":438},[66,20003,3859],{"class":76},[66,20005,20006,20008,20010,20012,20014],{"class":68,"line":465},[66,20007,11476],{"class":76},[66,20009,3019],{"class":72},[66,20011,19188],{"class":356},[66,20013,3286],{"class":72},[66,20015,10651],{"class":76},[66,20017,20018],{"class":68,"line":1805},[66,20019,4013],{"class":76},[66,20021,20022],{"class":68,"line":1817},[66,20023,3407],{"class":76},[66,20025,20026,20028,20030],{"class":68,"line":1822},[66,20027,2003],{"class":72},[66,20029,3803],{"class":3793},[66,20031,1253],{"class":76},[66,20033,20034],{"class":68,"line":1829},[66,20035,3388],{"class":76},[66,20037,20038],{"class":68,"line":3529},[66,20039,16857],{"class":758},[66,20041,20042],{"class":68,"line":3557},[66,20043,16604],{"class":76},[66,20045,20046],{"class":68,"line":3562},[66,20047,19225],{"class":76},[66,20049,20050],{"class":68,"line":3579},[66,20051,18797],{"class":758},[66,20053,20054,20056,20058,20060],{"class":68,"line":3584},[66,20055,3393],{"class":76},[66,20057,3019],{"class":72},[66,20059,19238],{"class":356},[66,20061,3135],{"class":76},[66,20063,20064,20066],{"class":68,"line":3589},[66,20065,16543],{"class":72},[66,20067,19247],{"class":76},[66,20069,20070,20072,20074],{"class":68,"line":3594},[66,20071,3841],{"class":76},[66,20073,3271],{"class":72},[66,20075,19256],{"class":76},[66,20077,20078,20080,20082],{"class":68,"line":3608},[66,20079,18398],{"class":76},[66,20081,19263],{"class":3793},[66,20083,19266],{"class":76},[66,20085,20086,20088,20090,20092],{"class":68,"line":3613},[66,20087,3393],{"class":76},[66,20089,3019],{"class":72},[66,20091,19275],{"class":356},[66,20093,3135],{"class":76},[66,20095,20096,20098],{"class":68,"line":4401},[66,20097,16543],{"class":72},[66,20099,19284],{"class":76},[66,20101,20102,20104,20106,20108,20110],{"class":68,"line":4415},[66,20103,3841],{"class":76},[66,20105,3271],{"class":72},[66,20107,2799],{"class":76},[66,20109,3271],{"class":72},[66,20111,19297],{"class":76},[66,20113,20114,20116,20118],{"class":68,"line":4423},[66,20115,19302],{"class":76},[66,20117,19305],{"class":3793},[66,20119,19308],{"class":76},[66,20121,20122,20124,20126],{"class":68,"line":4428},[66,20123,18398],{"class":76},[66,20125,19315],{"class":3793},[66,20127,19318],{"class":76},[66,20129,20130,20132,20134,20136],{"class":68,"line":4434},[66,20131,3393],{"class":76},[66,20133,3019],{"class":72},[66,20135,19327],{"class":356},[66,20137,3135],{"class":76},[66,20139,20140,20142],{"class":68,"line":4440},[66,20141,16543],{"class":72},[66,20143,19336],{"class":76},[66,20145,20146,20148,20150,20152,20154],{"class":68,"line":4445},[66,20147,3841],{"class":76},[66,20149,3271],{"class":72},[66,20151,19345],{"class":76},[66,20153,3271],{"class":72},[66,20155,19350],{"class":76},[66,20157,20158],{"class":68,"line":9759},[66,20159,19355],{"class":76},[66,20161,20162,20164,20166],{"class":68,"line":9783},[66,20163,19360],{"class":76},[66,20165,19305],{"class":3793},[66,20167,19365],{"class":76},[66,20169,20170,20172],{"class":68,"line":9788},[66,20171,19370],{"class":3793},[66,20173,19373],{"class":76},[66,20175,20176],{"class":68,"line":9794},[66,20177,3407],{"class":76},[14,20179,20181],{"id":20180},"_82对象的初始化清理","8.2对象的初始化清理",[2982,20183,20184,20187],{},[34,20185,20186],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[34,20188,20189],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[484,20191,20193],{"id":20192},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,20195,20196,20197,20200],{},"对象的",[2141,20198,20199],{},"初始化和清理","也是两个非常重要的安全问题",[19,20202,20203],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,20205,20206],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,20208,20209,20210,20213,20214,20217],{},"c++利用了",[2141,20211,20212],{},"构造函数","和",[2141,20215,20216],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,20219,20220,20221],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[2141,20222,20223],{},"我们不提供构造和析构，编译器会提供",[19,20225,20226],{},[2141,20227,20228],{},"编译器提供的构造函数和析构函数是空实现。",[2982,20230,20231,20234],{},[34,20232,20233],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[34,20235,20236,20237,20240],{},"析构函数：主要作用在于对象",[2141,20238,20239],{},"销毁前","系统自动调用，执行一些清理工作。",[19,20242,20243,20246],{},[2141,20244,20245],{},"构造函数语法：",[23,20247,20248],{},"类名(){}",[31,20250,20251,20254,20257,20260,20263],{},[34,20252,20253],{},"构造函数，没有返回值也不写void",[34,20255,20256],{},"函数名称与类名相同",[34,20258,20259],{},"构造函数可以有参数，因此可以发生重载",[34,20261,20262],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[34,20264,20265,20266,2413],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[23,20267,20268],{},"Person(){}",[19,20270,20271,15600,20274],{},[2141,20272,20273],{},"析构函数语法：",[23,20275,20276],{},"~类名(){}",[31,20278,20279,20282,20285,20291],{},[34,20280,20281],{},"析构函数，没有返回值也不写void",[34,20283,20284],{},"函数名称与类名相同,在名称前加上符号  ~",[34,20286,20287,20288],{},"析构函数不可以有参数，因此",[2141,20289,20290],{},"不可以发生重载",[34,20292,20293],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[57,20295,20297],{"className":1989,"code":20296,"language":1991,"meta":62,"style":62},"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",[23,20298,20299,20305,20309,20313,20318,20325,20329,20342,20346,20351,20358,20362,20375,20379,20383,20387,20391,20399,20403,20411,20415,20419,20427,20431,20436,20440,20447,20451,20464,20468,20476],{"__ignoreMap":62},[66,20300,20301,20303],{"class":68,"line":69},[66,20302,16499],{"class":72},[66,20304,16974],{"class":3793},[66,20306,20307],{"class":68,"line":80},[66,20308,3388],{"class":76},[66,20310,20311],{"class":68,"line":112},[66,20312,16521],{"class":72},[66,20314,20315],{"class":68,"line":129},[66,20316,20317],{"class":758},"    \u002F\u002F构造函数\n",[66,20319,20320,20323],{"class":68,"line":138},[66,20321,20322],{"class":3793},"    Person",[66,20324,1253],{"class":76},[66,20326,20327],{"class":68,"line":227},[66,20328,3859],{"class":76},[66,20330,20331,20333,20335,20338,20340],{"class":68,"line":236},[66,20332,11476],{"class":76},[66,20334,3019],{"class":72},[66,20336,20337],{"class":356}," \"Person的构造函数调用\"",[66,20339,3286],{"class":72},[66,20341,10651],{"class":76},[66,20343,20344],{"class":68,"line":241},[66,20345,4013],{"class":76},[66,20347,20348],{"class":68,"line":372},[66,20349,20350],{"class":758},"    \u002F\u002F析构函数\n",[66,20352,20353,20356],{"class":68,"line":377},[66,20354,20355],{"class":3793},"    ~Person",[66,20357,1253],{"class":76},[66,20359,20360],{"class":68,"line":392},[66,20361,3859],{"class":76},[66,20363,20364,20366,20368,20371,20373],{"class":68,"line":405},[66,20365,11476],{"class":76},[66,20367,3019],{"class":72},[66,20369,20370],{"class":356}," \"Person的析构函数调用\"",[66,20372,3286],{"class":72},[66,20374,10651],{"class":76},[66,20376,20377],{"class":68,"line":418},[66,20378,4013],{"class":76},[66,20380,20381],{"class":68,"line":430},[66,20382,109],{"emptyLinePlaceholder":108},[66,20384,20385],{"class":68,"line":438},[66,20386,5812],{"class":76},[66,20388,20389],{"class":68,"line":465},[66,20390,109],{"emptyLinePlaceholder":108},[66,20392,20393,20395,20397],{"class":68,"line":1805},[66,20394,7176],{"class":72},[66,20396,7400],{"class":3793},[66,20398,1253],{"class":76},[66,20400,20401],{"class":68,"line":1817},[66,20402,3388],{"class":76},[66,20404,20405,20408],{"class":68,"line":1822},[66,20406,20407],{"class":76},"    Person p;",[66,20409,20410],{"class":758},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[66,20412,20413],{"class":68,"line":1829},[66,20414,3407],{"class":76},[66,20416,20417],{"class":68,"line":3529},[66,20418,109],{"emptyLinePlaceholder":108},[66,20420,20421,20423,20425],{"class":68,"line":3557},[66,20422,2003],{"class":72},[66,20424,3803],{"class":3793},[66,20426,12659],{"class":76},[66,20428,20429],{"class":68,"line":3562},[66,20430,15015],{"class":76},[66,20432,20433],{"class":68,"line":3579},[66,20434,20435],{"class":758},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[66,20437,20438],{"class":68,"line":3584},[66,20439,109],{"emptyLinePlaceholder":108},[66,20441,20442,20444],{"class":68,"line":3589},[66,20443,20407],{"class":76},[66,20445,20446],{"class":758},"\u002F\u002F只有构造函数\n",[66,20448,20449],{"class":68,"line":3594},[66,20450,109],{"emptyLinePlaceholder":108},[66,20452,20453,20455,20457,20459,20461],{"class":68,"line":3608},[66,20454,4129],{"class":3793},[66,20456,348],{"class":76},[66,20458,4134],{"class":356},[66,20460,7777],{"class":76},[66,20462,20463],{"class":758},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[66,20465,20466],{"class":68,"line":3613},[66,20467,109],{"emptyLinePlaceholder":108},[66,20469,20470,20472,20474],{"class":68,"line":4401},[66,20471,5907],{"class":72},[66,20473,962],{"class":102},[66,20475,3135],{"class":76},[66,20477,20478],{"class":68,"line":4415},[66,20479,3407],{"class":76},[19,20481,20482],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[484,20484,20486],{"id":20485},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,20488,20489],{},"两种分类方式：",[19,20491,20492],{},"​\t按参数分为： 有参构造和无参构造",[19,20494,20495],{},"​\t按类型分为： 普通构造和拷贝构造",[19,20497,20498],{},"三种调用方式：",[19,20500,20501],{},"​\t括号法",[19,20503,20504],{},"​\t显示法",[19,20506,20507],{},"​\t隐式转换法",[57,20509,20511],{"className":1989,"code":20510,"language":1991,"meta":62,"style":62},"#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",[23,20512,20513,20519,20529,20534,20539,20544,20549,20553,20561,20565,20569,20573,20579,20583,20596,20600,20612,20616,20625,20638,20642,20646,20652,20656,20669,20673,20678,20694,20698,20703,20712,20725,20729,20735,20739,20744,20752,20756,20761,20765,20773,20777,20782,20787,20792,20797,20802,20806,20811,20816,20821,20826,20830,20835,20840,20856,20868,20873,20877,20882,20887,20892,20896,20901,20915,20928,20932,20940,20944,20950,20956,20964],{"__ignoreMap":62},[66,20514,20515,20517],{"class":68,"line":69},[66,20516,3779],{"class":72},[66,20518,3782],{"class":356},[66,20520,20521,20523,20525,20527],{"class":68,"line":80},[66,20522,3787],{"class":72},[66,20524,3790],{"class":72},[66,20526,3794],{"class":3793},[66,20528,3135],{"class":76},[66,20530,20531],{"class":68,"line":112},[66,20532,20533],{"class":758},"\u002F\u002F1.构造函数的分类及调用\n",[66,20535,20536],{"class":68,"line":129},[66,20537,20538],{"class":758},"\u002F\u002F分类\n",[66,20540,20541],{"class":68,"line":138},[66,20542,20543],{"class":758},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[66,20545,20546],{"class":68,"line":227},[66,20547,20548],{"class":758},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[66,20550,20551],{"class":68,"line":236},[66,20552,109],{"emptyLinePlaceholder":108},[66,20554,20555,20557,20559],{"class":68,"line":241},[66,20556,16499],{"class":72},[66,20558,17372],{"class":3793},[66,20560,4498],{"class":76},[66,20562,20563],{"class":68,"line":372},[66,20564,3388],{"class":76},[66,20566,20567],{"class":68,"line":377},[66,20568,16521],{"class":72},[66,20570,20571],{"class":68,"line":392},[66,20572,20317],{"class":758},[66,20574,20575,20577],{"class":68,"line":405},[66,20576,20322],{"class":3793},[66,20578,1253],{"class":76},[66,20580,20581],{"class":68,"line":418},[66,20582,3859],{"class":76},[66,20584,20585,20587,20589,20592,20594],{"class":68,"line":430},[66,20586,5269],{"class":76},[66,20588,3019],{"class":72},[66,20590,20591],{"class":356},"\"Person构造函数无参构造\"",[66,20593,3019],{"class":72},[66,20595,3041],{"class":76},[66,20597,20598],{"class":68,"line":438},[66,20599,4013],{"class":76},[66,20601,20602,20604,20606,20608,20610],{"class":68,"line":465},[66,20603,20322],{"class":3793},[66,20605,348],{"class":76},[66,20607,2003],{"class":72},[66,20609,3240],{"class":1234},[66,20611,313],{"class":76},[66,20613,20614],{"class":68,"line":1805},[66,20615,3859],{"class":76},[66,20617,20618,20621,20623],{"class":68,"line":1817},[66,20619,20620],{"class":76},"        age",[66,20622,99],{"class":72},[66,20624,8008],{"class":76},[66,20626,20627,20629,20631,20634,20636],{"class":68,"line":1822},[66,20628,5269],{"class":76},[66,20630,3019],{"class":72},[66,20632,20633],{"class":356},"\"Person构造函数有参构造\"",[66,20635,3019],{"class":72},[66,20637,3041],{"class":76},[66,20639,20640],{"class":68,"line":1829},[66,20641,4013],{"class":76},[66,20643,20644],{"class":68,"line":3529},[66,20645,20350],{"class":758},[66,20647,20648,20650],{"class":68,"line":3557},[66,20649,20355],{"class":3793},[66,20651,1253],{"class":76},[66,20653,20654],{"class":68,"line":3562},[66,20655,3859],{"class":76},[66,20657,20658,20660,20662,20665,20667],{"class":68,"line":3579},[66,20659,5269],{"class":76},[66,20661,3019],{"class":72},[66,20663,20664],{"class":356},"\"Person析构函数被调用\"",[66,20666,3019],{"class":72},[66,20668,3041],{"class":76},[66,20670,20671],{"class":68,"line":3584},[66,20672,4013],{"class":76},[66,20674,20675],{"class":68,"line":3589},[66,20676,20677],{"class":758},"    \u002F\u002F拷贝构造函数\n",[66,20679,20680,20682,20684,20686,20688,20690,20692],{"class":68,"line":3594},[66,20681,20322],{"class":3793},[66,20683,348],{"class":76},[66,20685,8603],{"class":72},[66,20687,17372],{"class":3793},[66,20689,12390],{"class":72},[66,20691,19],{"class":1234},[66,20693,313],{"class":76},[66,20695,20696],{"class":68,"line":3608},[66,20697,3859],{"class":76},[66,20699,20700],{"class":68,"line":3613},[66,20701,20702],{"class":758},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[66,20704,20705,20707,20709],{"class":68,"line":4401},[66,20706,20620],{"class":76},[66,20708,99],{"class":72},[66,20710,20711],{"class":76},"p.age;\n",[66,20713,20714,20716,20718,20721,20723],{"class":68,"line":4415},[66,20715,5269],{"class":76},[66,20717,3019],{"class":72},[66,20719,20720],{"class":356},"\"Person拷贝构造函数被调用\"",[66,20722,3019],{"class":72},[66,20724,3041],{"class":76},[66,20726,20727],{"class":68,"line":4423},[66,20728,4013],{"class":76},[66,20730,20731,20733],{"class":68,"line":4428},[66,20732,3814],{"class":72},[66,20734,9608],{"class":76},[66,20736,20737],{"class":68,"line":4434},[66,20738,5812],{"class":76},[66,20740,20741],{"class":68,"line":4440},[66,20742,20743],{"class":758},"\u002F\u002F调用\n",[66,20745,20746,20748,20750],{"class":68,"line":4445},[66,20747,7176],{"class":72},[66,20749,7400],{"class":3793},[66,20751,1253],{"class":76},[66,20753,20754],{"class":68,"line":9759},[66,20755,3388],{"class":76},[66,20757,20758],{"class":68,"line":9783},[66,20759,20760],{"class":758},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[66,20762,20763],{"class":68,"line":9788},[66,20764,3407],{"class":76},[66,20766,20767,20769,20771],{"class":68,"line":9794},[66,20768,7176],{"class":72},[66,20770,7469],{"class":3793},[66,20772,1253],{"class":76},[66,20774,20775],{"class":68,"line":9821},[66,20776,3388],{"class":76},[66,20778,20779],{"class":68,"line":9826},[66,20780,20781],{"class":758},"    \u002F\u002F1.括号法\n",[66,20783,20784],{"class":68,"line":9832},[66,20785,20786],{"class":758},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[66,20788,20789],{"class":68,"line":9844},[66,20790,20791],{"class":758},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[66,20793,20794],{"class":68,"line":9856},[66,20795,20796],{"class":758},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[66,20798,20799],{"class":68,"line":9868},[66,20800,20801],{"class":758},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[66,20803,20804],{"class":68,"line":11523},[66,20805,109],{"emptyLinePlaceholder":108},[66,20807,20808],{"class":68,"line":11548},[66,20809,20810],{"class":758},"    \u002F\u002F注意事项\n",[66,20812,20813],{"class":68,"line":11571},[66,20814,20815],{"class":758},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[66,20817,20818],{"class":68,"line":11595},[66,20819,20820],{"class":758},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[66,20822,20823],{"class":68,"line":11600},[66,20824,20825],{"class":758},"    \u002F\u002F Person p4();\n",[66,20827,20828],{"class":68,"line":11605},[66,20829,109],{"emptyLinePlaceholder":108},[66,20831,20832],{"class":68,"line":11610},[66,20833,20834],{"class":758},"    \u002F\u002F2.显示法\n",[66,20836,20837],{"class":68,"line":11619},[66,20838,20839],{"class":76},"    Person p1;\n",[66,20841,20842,20845,20847,20850,20852,20854],{"class":68,"line":11624},[66,20843,20844],{"class":76},"    Person p2",[66,20846,99],{"class":72},[66,20848,20849],{"class":3793},"Person",[66,20851,348],{"class":76},[66,20853,790],{"class":102},[66,20855,4543],{"class":76},[66,20857,20858,20861,20863,20865],{"class":68,"line":11630},[66,20859,20860],{"class":76},"    Person p3",[66,20862,99],{"class":72},[66,20864,20849],{"class":3793},[66,20866,20867],{"class":76},"(p2);\n",[66,20869,20870],{"class":68,"line":11651},[66,20871,20872],{"class":758},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[66,20874,20875],{"class":68,"line":11657},[66,20876,109],{"emptyLinePlaceholder":108},[66,20878,20879],{"class":68,"line":11671},[66,20880,20881],{"class":758},"    \u002F\u002F 注意事项2\n",[66,20883,20884],{"class":68,"line":11677},[66,20885,20886],{"class":758},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[66,20888,20889],{"class":68,"line":11704},[66,20890,20891],{"class":758},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[66,20893,20894],{"class":68,"line":11713},[66,20895,109],{"emptyLinePlaceholder":108},[66,20897,20898],{"class":68,"line":11719},[66,20899,20900],{"class":758},"    \u002F\u002F3.隐士转换法\n",[66,20902,20903,20906,20908,20910,20912],{"class":68,"line":11727},[66,20904,20905],{"class":76},"    Person p4",[66,20907,99],{"class":72},[66,20909,790],{"class":102},[66,20911,2051],{"class":76},[66,20913,20914],{"class":758},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[66,20916,20917,20920,20922,20925],{"class":68,"line":11732},[66,20918,20919],{"class":76},"    Person p5",[66,20921,99],{"class":72},[66,20923,20924],{"class":76},"p4;",[66,20926,20927],{"class":758}," \u002F\u002F 这里会调用拷贝构造函数\n",[66,20929,20930],{"class":68,"line":18407},[66,20931,3407],{"class":76},[66,20933,20934,20936,20938],{"class":68,"line":18413},[66,20935,2003],{"class":72},[66,20937,3803],{"class":3793},[66,20939,1253],{"class":76},[66,20941,20942],{"class":68,"line":18436},[66,20943,3388],{"class":76},[66,20945,20946,20948],{"class":68,"line":18442},[66,20947,7445],{"class":3793},[66,20949,7448],{"class":76},[66,20951,20952,20954],{"class":68,"line":18465},[66,20953,7514],{"class":3793},[66,20955,7448],{"class":76},[66,20957,20958,20960,20962],{"class":68,"line":18479},[66,20959,5907],{"class":72},[66,20961,962],{"class":102},[66,20963,3135],{"class":76},[66,20965,20966],{"class":68,"line":18499},[66,20967,3407],{"class":76},[19,20969,20970,20973],{},[2141,20971,20972],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[484,20975,20977],{"id":20976},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,20979,20980],{},"C++中拷贝构造函数调用时机通常有三种情况",[2982,20982,20983,20986,20989],{},[34,20984,20985],{},"使用一个已经创建完毕的对象来初始化一个新对象",[34,20987,20988],{},"值传递的方式给函数参数传值",[34,20990,20991],{},"以值方式返回局部对象",[57,20993,20995],{"className":1989,"code":20994,"language":1991,"meta":62,"style":62},"#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",[23,20996,20997,21003,21013,21017,21022,21026,21031,21036,21041,21047,21051,21055,21061,21065,21078,21082,21087,21099,21103,21111,21124,21128,21132,21148,21152,21161,21174,21178,21184,21188,21200,21204,21210,21214,21218,21226,21230,21243,21251,21269,21273,21278,21283,21298,21302,21315,21319,21327,21331,21335,21343,21347,21352,21361,21365,21369,21394,21404,21408,21416,21420,21431,21456,21460,21464,21468,21476,21480,21485,21490,21497,21502,21507,21512,21517,21521,21526,21530,21535,21539,21544,21549,21553,21557,21562,21567,21575],{"__ignoreMap":62},[66,20998,20999,21001],{"class":68,"line":69},[66,21000,3779],{"class":72},[66,21002,3782],{"class":356},[66,21004,21005,21007,21009,21011],{"class":68,"line":80},[66,21006,3787],{"class":72},[66,21008,3790],{"class":72},[66,21010,3794],{"class":3793},[66,21012,3135],{"class":76},[66,21014,21015],{"class":68,"line":112},[66,21016,109],{"emptyLinePlaceholder":108},[66,21018,21019],{"class":68,"line":129},[66,21020,21021],{"class":758},"\u002F\u002F拷贝构造函数调用时机\n",[66,21023,21024],{"class":68,"line":138},[66,21025,109],{"emptyLinePlaceholder":108},[66,21027,21028],{"class":68,"line":227},[66,21029,21030],{"class":758},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[66,21032,21033],{"class":68,"line":236},[66,21034,21035],{"class":758},"\u002F\u002F2.值传递的方式给函数参数传值\n",[66,21037,21038],{"class":68,"line":241},[66,21039,21040],{"class":758},"\u002F\u002F3.以值方式返回局部对象\n",[66,21042,21043,21045],{"class":68,"line":372},[66,21044,16499],{"class":72},[66,21046,16974],{"class":3793},[66,21048,21049],{"class":68,"line":377},[66,21050,3388],{"class":76},[66,21052,21053],{"class":68,"line":392},[66,21054,16521],{"class":72},[66,21056,21057,21059],{"class":68,"line":405},[66,21058,20322],{"class":3793},[66,21060,1253],{"class":76},[66,21062,21063],{"class":68,"line":418},[66,21064,3859],{"class":76},[66,21066,21067,21069,21071,21074,21076],{"class":68,"line":430},[66,21068,11476],{"class":76},[66,21070,3019],{"class":72},[66,21072,21073],{"class":356}," \"Person的默认构造函数调用\"",[66,21075,3286],{"class":72},[66,21077,10651],{"class":76},[66,21079,21080],{"class":68,"line":438},[66,21081,4013],{"class":76},[66,21083,21084],{"class":68,"line":465},[66,21085,21086],{"class":758},"    \u002F\u002F有参构造\n",[66,21088,21089,21091,21093,21095,21097],{"class":68,"line":1805},[66,21090,20322],{"class":3793},[66,21092,348],{"class":76},[66,21094,2003],{"class":72},[66,21096,17492],{"class":1234},[66,21098,313],{"class":76},[66,21100,21101],{"class":68,"line":1817},[66,21102,3859],{"class":76},[66,21104,21105,21107,21109],{"class":68,"line":1822},[66,21106,17546],{"class":76},[66,21108,99],{"class":72},[66,21110,9608],{"class":76},[66,21112,21113,21115,21117,21120,21122],{"class":68,"line":1829},[66,21114,11476],{"class":76},[66,21116,3019],{"class":72},[66,21118,21119],{"class":356}," \"Person的有参构造函数调用\"",[66,21121,3286],{"class":72},[66,21123,10651],{"class":76},[66,21125,21126],{"class":68,"line":3529},[66,21127,4013],{"class":76},[66,21129,21130],{"class":68,"line":3557},[66,21131,20677],{"class":758},[66,21133,21134,21136,21138,21140,21142,21144,21146],{"class":68,"line":3562},[66,21135,20322],{"class":3793},[66,21137,348],{"class":76},[66,21139,8603],{"class":72},[66,21141,17372],{"class":3793},[66,21143,12390],{"class":72},[66,21145,19],{"class":1234},[66,21147,313],{"class":76},[66,21149,21150],{"class":68,"line":3579},[66,21151,3859],{"class":76},[66,21153,21154,21156,21158],{"class":68,"line":3584},[66,21155,17546],{"class":76},[66,21157,99],{"class":72},[66,21159,21160],{"class":76}," p.m_Age;\n",[66,21162,21163,21165,21167,21170,21172],{"class":68,"line":3589},[66,21164,11476],{"class":76},[66,21166,3019],{"class":72},[66,21168,21169],{"class":356}," \"Person的拷贝构造函数调用\"",[66,21171,3286],{"class":72},[66,21173,10651],{"class":76},[66,21175,21176],{"class":68,"line":3594},[66,21177,4013],{"class":76},[66,21179,21180,21182],{"class":68,"line":3608},[66,21181,20355],{"class":3793},[66,21183,1253],{"class":76},[66,21185,21186],{"class":68,"line":3613},[66,21187,3859],{"class":76},[66,21189,21190,21192,21194,21196,21198],{"class":68,"line":4401},[66,21191,11476],{"class":76},[66,21193,3019],{"class":72},[66,21195,20370],{"class":356},[66,21197,3286],{"class":72},[66,21199,10651],{"class":76},[66,21201,21202],{"class":68,"line":4415},[66,21203,4013],{"class":76},[66,21205,21206,21208],{"class":68,"line":4423},[66,21207,3814],{"class":72},[66,21209,17469],{"class":76},[66,21211,21212],{"class":68,"line":4428},[66,21213,5812],{"class":76},[66,21215,21216],{"class":68,"line":4434},[66,21217,21030],{"class":758},[66,21219,21220,21222,21224],{"class":68,"line":4440},[66,21221,7176],{"class":72},[66,21223,7400],{"class":3793},[66,21225,1253],{"class":76},[66,21227,21228],{"class":68,"line":4445},[66,21229,3388],{"class":76},[66,21231,21232,21235,21237,21239,21241],{"class":68,"line":9759},[66,21233,21234],{"class":76},"    Person ",[66,21236,8941],{"class":3793},[66,21238,348],{"class":76},[66,21240,2679],{"class":102},[66,21242,4543],{"class":76},[66,21244,21245,21247,21249],{"class":68,"line":9783},[66,21246,21234],{"class":76},[66,21248,8844],{"class":3793},[66,21250,19318],{"class":76},[66,21252,21253,21255,21257,21260,21262,21265,21267],{"class":68,"line":9788},[66,21254,3393],{"class":76},[66,21256,3019],{"class":72},[66,21258,21259],{"class":356},"\"P2的年龄为：\"",[66,21261,3019],{"class":72},[66,21263,21264],{"class":76},"p2.m_Age",[66,21266,3019],{"class":72},[66,21268,3041],{"class":76},[66,21270,21271],{"class":68,"line":9794},[66,21272,3407],{"class":76},[66,21274,21275],{"class":68,"line":9821},[66,21276,21277],{"class":758},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[66,21279,21280],{"class":68,"line":9826},[66,21281,21282],{"class":758},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[66,21284,21285,21287,21290,21292,21294,21296],{"class":68,"line":9832},[66,21286,7176],{"class":72},[66,21288,21289],{"class":3793}," doWork",[66,21291,348],{"class":76},[66,21293,20849],{"class":3793},[66,21295,8636],{"class":1234},[66,21297,313],{"class":76},[66,21299,21300],{"class":68,"line":9844},[66,21301,3388],{"class":76},[66,21303,21304,21306,21308,21311,21313],{"class":68,"line":9856},[66,21305,8340],{"class":76},[66,21307,3019],{"class":72},[66,21309,21310],{"class":356}," \"doWork函数调用\"",[66,21312,3286],{"class":72},[66,21314,10651],{"class":76},[66,21316,21317],{"class":68,"line":9868},[66,21318,3407],{"class":76},[66,21320,21321,21323,21325],{"class":68,"line":11523},[66,21322,7176],{"class":72},[66,21324,7469],{"class":3793},[66,21326,1253],{"class":76},[66,21328,21329],{"class":68,"line":11548},[66,21330,3388],{"class":76},[66,21332,21333],{"class":68,"line":11571},[66,21334,17116],{"class":76},[66,21336,21337,21340],{"class":68,"line":11595},[66,21338,21339],{"class":3793},"    doWork",[66,21341,21342],{"class":76},"(p);\n",[66,21344,21345],{"class":68,"line":11600},[66,21346,3407],{"class":76},[66,21348,21349],{"class":68,"line":11605},[66,21350,21351],{"class":758},"\u002F\u002F 3.以值方式返回局部对象\n",[66,21353,21354,21356,21359],{"class":68,"line":11610},[66,21355,20849],{"class":3793},[66,21357,21358],{"class":3793}," doWork2",[66,21360,1253],{"class":76},[66,21362,21363],{"class":68,"line":11619},[66,21364,3388],{"class":76},[66,21366,21367],{"class":68,"line":11624},[66,21368,20839],{"class":76},[66,21370,21371,21373,21375,21377,21379,21381,21383,21385,21387,21389,21391],{"class":68,"line":11630},[66,21372,3393],{"class":76},[66,21374,3019],{"class":72},[66,21376,348],{"class":76},[66,21378,2003],{"class":72},[66,21380,8329],{"class":72},[66,21382,2413],{"class":76},[66,21384,2337],{"class":72},[66,21386,8941],{"class":76},[66,21388,3019],{"class":72},[66,21390,3083],{"class":76},[66,21392,21393],{"class":758},"\u002F\u002F打印p1的地址\n",[66,21395,21396,21398,21401],{"class":68,"line":11651},[66,21397,5907],{"class":72},[66,21399,21400],{"class":76}," p1;",[66,21402,21403],{"class":758},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[66,21405,21406],{"class":68,"line":11657},[66,21407,3407],{"class":76},[66,21409,21410,21412,21414],{"class":68,"line":11671},[66,21411,7176],{"class":72},[66,21413,7541],{"class":3793},[66,21415,1253],{"class":76},[66,21417,21418],{"class":68,"line":11677},[66,21419,3388],{"class":76},[66,21421,21422,21425,21427,21429],{"class":68,"line":11704},[66,21423,21424],{"class":76},"    Person p ",[66,21426,99],{"class":72},[66,21428,21358],{"class":3793},[66,21430,7448],{"class":76},[66,21432,21433,21435,21437,21439,21441,21443,21445,21447,21449,21451,21453],{"class":68,"line":11713},[66,21434,3393],{"class":76},[66,21436,3019],{"class":72},[66,21438,348],{"class":76},[66,21440,2003],{"class":72},[66,21442,8329],{"class":72},[66,21444,2413],{"class":76},[66,21446,2337],{"class":72},[66,21448,19],{"class":76},[66,21450,3019],{"class":72},[66,21452,3083],{"class":76},[66,21454,21455],{"class":758},"\u002F\u002F打印p的地址\n",[66,21457,21458],{"class":68,"line":11719},[66,21459,3407],{"class":76},[66,21461,21462],{"class":68,"line":11727},[66,21463,109],{"emptyLinePlaceholder":108},[66,21465,21466],{"class":68,"line":11732},[66,21467,109],{"emptyLinePlaceholder":108},[66,21469,21470,21472,21474],{"class":68,"line":18407},[66,21471,2003],{"class":72},[66,21473,3803],{"class":3793},[66,21475,1253],{"class":76},[66,21477,21478],{"class":68,"line":18413},[66,21479,3388],{"class":76},[66,21481,21482],{"class":68,"line":18436},[66,21483,21484],{"class":758},"    \u002F\u002F test01();\n",[66,21486,21487],{"class":68,"line":18442},[66,21488,21489],{"class":758},"    \u002F\u002F test02();\n",[66,21491,21492,21495],{"class":68,"line":18465},[66,21493,21494],{"class":3793},"    test03",[66,21496,7448],{"class":76},[66,21498,21499],{"class":68,"line":18479},[66,21500,21501],{"class":758},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[66,21503,21504],{"class":68,"line":18499},[66,21505,21506],{"class":758},"\u002F\u002F 输出结果如下：\n",[66,21508,21509],{"class":68,"line":18505},[66,21510,21511],{"class":758},"\u002F\u002F Person的默认构造函数调用\n",[66,21513,21514],{"class":68,"line":18516},[66,21515,21516],{"class":758},"\u002F\u002F 0x7fffffffceec\n",[66,21518,21519],{"class":68,"line":18539},[66,21520,21516],{"class":758},[66,21522,21523],{"class":68,"line":18561},[66,21524,21525],{"class":758},"\u002F\u002F Person的析构函数调用\n",[66,21527,21528],{"class":68,"line":18566},[66,21529,109],{"emptyLinePlaceholder":108},[66,21531,21532],{"class":68,"line":18572},[66,21533,21534],{"class":758},"\u002F\u002F 之前的输出结果如下：\n",[66,21536,21537],{"class":68,"line":18586},[66,21538,21511],{"class":758},[66,21540,21541],{"class":68,"line":18599},[66,21542,21543],{"class":758},"\u002F\u002F 地址\n",[66,21545,21546],{"class":68,"line":18604},[66,21547,21548],{"class":758},"\u002F\u002F Person的拷贝构造函数调用\n",[66,21550,21551],{"class":68,"line":18618},[66,21552,21525],{"class":758},[66,21554,21555],{"class":68,"line":18623},[66,21556,21543],{"class":758},[66,21558,21559],{"class":68,"line":18629},[66,21560,21561],{"class":758},"\u002F\u002F (这两次输出的地址也是不同的) \n",[66,21563,21564],{"class":68,"line":18634},[66,21565,21566],{"class":758},"\u002F\u002F Person的析构函数调用     \n",[66,21568,21569,21571,21573],{"class":68,"line":18648},[66,21570,5907],{"class":72},[66,21572,962],{"class":102},[66,21574,3135],{"class":76},[66,21576,21577],{"class":68,"line":18653},[66,21578,3407],{"class":76},[19,21580,21581],{},"简化版理解",[57,21583,21585],{"className":1989,"code":21584,"language":1991,"meta":62,"style":62},"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",[23,21586,21587,21595,21599,21605,21618,21629,21633,21645,21658,21666,21670,21686,21699,21708,21712,21717,21723,21736,21740,21744,21751,21755,21759,21764,21772,21776,21792,21805,21818,21822,21827,21835,21839,21843,21848,21853,21869,21877,21884,21890,21894,21898,21903,21911,21915,21919,21942,21949,21953,21957,21965,21969,21979,22001,22005,22009,22013,22021,22025,22030,22035,22041,22045,22055,22059,22067],{"__ignoreMap":62},[66,21588,21589,21591,21593],{"class":68,"line":69},[66,21590,16499],{"class":72},[66,21592,17372],{"class":3793},[66,21594,17375],{"class":76},[66,21596,21597],{"class":68,"line":80},[66,21598,16521],{"class":72},[66,21600,21601,21603],{"class":68,"line":112},[66,21602,20322],{"class":3793},[66,21604,12659],{"class":76},[66,21606,21607,21609,21611,21614,21616],{"class":68,"line":129},[66,21608,11476],{"class":76},[66,21610,3019],{"class":72},[66,21612,21613],{"class":356}," \"无参构造函数!\"",[66,21615,3286],{"class":72},[66,21617,10651],{"class":76},[66,21619,21620,21623,21625,21627],{"class":68,"line":138},[66,21621,21622],{"class":76},"        mAge ",[66,21624,99],{"class":72},[66,21626,962],{"class":102},[66,21628,3135],{"class":76},[66,21630,21631],{"class":68,"line":227},[66,21632,4013],{"class":76},[66,21634,21635,21637,21639,21641,21643],{"class":68,"line":236},[66,21636,20322],{"class":3793},[66,21638,348],{"class":76},[66,21640,2003],{"class":72},[66,21642,17492],{"class":1234},[66,21644,14247],{"class":76},[66,21646,21647,21649,21651,21654,21656],{"class":68,"line":241},[66,21648,11476],{"class":76},[66,21650,3019],{"class":72},[66,21652,21653],{"class":356}," \"有参构造函数!\"",[66,21655,3286],{"class":72},[66,21657,10651],{"class":76},[66,21659,21660,21662,21664],{"class":68,"line":372},[66,21661,21622],{"class":76},[66,21663,99],{"class":72},[66,21665,9608],{"class":76},[66,21667,21668],{"class":68,"line":377},[66,21669,4013],{"class":76},[66,21671,21672,21674,21676,21678,21680,21682,21684],{"class":68,"line":392},[66,21673,20322],{"class":3793},[66,21675,348],{"class":76},[66,21677,8603],{"class":72},[66,21679,17372],{"class":3793},[66,21681,2337],{"class":72},[66,21683,8636],{"class":1234},[66,21685,14247],{"class":76},[66,21687,21688,21690,21692,21695,21697],{"class":68,"line":405},[66,21689,11476],{"class":76},[66,21691,3019],{"class":72},[66,21693,21694],{"class":356}," \"拷贝构造函数!\"",[66,21696,3286],{"class":72},[66,21698,10651],{"class":76},[66,21700,21701,21703,21705],{"class":68,"line":418},[66,21702,21622],{"class":76},[66,21704,99],{"class":72},[66,21706,21707],{"class":76}," p.mAge;\n",[66,21709,21710],{"class":68,"line":430},[66,21711,4013],{"class":76},[66,21713,21714],{"class":68,"line":438},[66,21715,21716],{"class":758},"    \u002F\u002F析构函数在释放内存之前调用\n",[66,21718,21719,21721],{"class":68,"line":465},[66,21720,20355],{"class":3793},[66,21722,12659],{"class":76},[66,21724,21725,21727,21729,21732,21734],{"class":68,"line":1805},[66,21726,11476],{"class":76},[66,21728,3019],{"class":72},[66,21730,21731],{"class":356}," \"析构函数!\"",[66,21733,3286],{"class":72},[66,21735,10651],{"class":76},[66,21737,21738],{"class":68,"line":1817},[66,21739,4013],{"class":76},[66,21741,21742],{"class":68,"line":1822},[66,21743,16521],{"class":72},[66,21745,21746,21748],{"class":68,"line":1829},[66,21747,3814],{"class":72},[66,21749,21750],{"class":76}," mAge;\n",[66,21752,21753],{"class":68,"line":3529},[66,21754,5812],{"class":76},[66,21756,21757],{"class":68,"line":3557},[66,21758,109],{"emptyLinePlaceholder":108},[66,21760,21761],{"class":68,"line":3562},[66,21762,21763],{"class":758},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[66,21765,21766,21768,21770],{"class":68,"line":3579},[66,21767,7176],{"class":72},[66,21769,7400],{"class":3793},[66,21771,12659],{"class":76},[66,21773,21774],{"class":68,"line":3584},[66,21775,109],{"emptyLinePlaceholder":108},[66,21777,21778,21780,21783,21785,21787,21789],{"class":68,"line":3589},[66,21779,21234],{"class":76},[66,21781,21782],{"class":3793},"man",[66,21784,348],{"class":76},[66,21786,310],{"class":102},[66,21788,7777],{"class":76},[66,21790,21791],{"class":758}," \u002F\u002Fp对象已经创建完毕\n",[66,21793,21794,21796,21799,21802],{"class":68,"line":3594},[66,21795,21234],{"class":76},[66,21797,21798],{"class":3793},"newman",[66,21800,21801],{"class":76},"(man);",[66,21803,21804],{"class":758}," \u002F\u002F调用拷贝构造函数\n",[66,21806,21807,21810,21812,21815],{"class":68,"line":3608},[66,21808,21809],{"class":76},"    Person newman2 ",[66,21811,99],{"class":72},[66,21813,21814],{"class":76}," man;",[66,21816,21817],{"class":758}," \u002F\u002F拷贝构造\n",[66,21819,21820],{"class":68,"line":3613},[66,21821,109],{"emptyLinePlaceholder":108},[66,21823,21824],{"class":68,"line":4401},[66,21825,21826],{"class":758},"    \u002F\u002FPerson newman3;\n",[66,21828,21829,21832],{"class":68,"line":4415},[66,21830,21831],{"class":758},"    \u002F\u002Fnewman3 = man;",[66,21833,21834],{"class":758}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[66,21836,21837],{"class":68,"line":4423},[66,21838,3407],{"class":76},[66,21840,21841],{"class":68,"line":4428},[66,21842,109],{"emptyLinePlaceholder":108},[66,21844,21845],{"class":68,"line":4434},[66,21846,21847],{"class":758},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[66,21849,21850],{"class":68,"line":4440},[66,21851,21852],{"class":758},"\u002F\u002F相当于Person p1 = p;\n",[66,21854,21855,21857,21859,21861,21863,21866],{"class":68,"line":4445},[66,21856,7176],{"class":72},[66,21858,21289],{"class":3793},[66,21860,348],{"class":76},[66,21862,20849],{"class":3793},[66,21864,21865],{"class":1234}," p1",[66,21867,21868],{"class":76},") {}\n",[66,21870,21871,21873,21875],{"class":68,"line":9759},[66,21872,7176],{"class":72},[66,21874,7469],{"class":3793},[66,21876,12659],{"class":76},[66,21878,21879,21881],{"class":68,"line":9783},[66,21880,20407],{"class":76},[66,21882,21883],{"class":758}," \u002F\u002F无参构造函数\n",[66,21885,21886,21888],{"class":68,"line":9788},[66,21887,21339],{"class":3793},[66,21889,21342],{"class":76},[66,21891,21892],{"class":68,"line":9794},[66,21893,3407],{"class":76},[66,21895,21896],{"class":68,"line":9821},[66,21897,109],{"emptyLinePlaceholder":108},[66,21899,21900],{"class":68,"line":9826},[66,21901,21902],{"class":758},"\u002F\u002F3. 以值方式返回局部对象\n",[66,21904,21905,21907,21909],{"class":68,"line":9832},[66,21906,20849],{"class":3793},[66,21908,21358],{"class":3793},[66,21910,1253],{"class":76},[66,21912,21913],{"class":68,"line":9844},[66,21914,3388],{"class":76},[66,21916,21917],{"class":68,"line":9856},[66,21918,20839],{"class":76},[66,21920,21921,21923,21925,21927,21929,21931,21933,21935,21938,21940],{"class":68,"line":9868},[66,21922,8340],{"class":76},[66,21924,3019],{"class":72},[66,21926,3492],{"class":76},[66,21928,2003],{"class":72},[66,21930,8329],{"class":72},[66,21932,2413],{"class":76},[66,21934,2337],{"class":72},[66,21936,21937],{"class":76},"p1 ",[66,21939,3019],{"class":72},[66,21941,10651],{"class":76},[66,21943,21944,21946],{"class":68,"line":11523},[66,21945,5907],{"class":72},[66,21947,21948],{"class":76}," p1;\n",[66,21950,21951],{"class":68,"line":11548},[66,21952,3407],{"class":76},[66,21954,21955],{"class":68,"line":11571},[66,21956,109],{"emptyLinePlaceholder":108},[66,21958,21959,21961,21963],{"class":68,"line":11595},[66,21960,7176],{"class":72},[66,21962,7541],{"class":3793},[66,21964,1253],{"class":76},[66,21966,21967],{"class":68,"line":11600},[66,21968,3388],{"class":76},[66,21970,21971,21973,21975,21977],{"class":68,"line":11605},[66,21972,21424],{"class":76},[66,21974,99],{"class":72},[66,21976,21358],{"class":3793},[66,21978,7448],{"class":76},[66,21980,21981,21983,21985,21987,21989,21991,21993,21995,21997,21999],{"class":68,"line":11610},[66,21982,8340],{"class":76},[66,21984,3019],{"class":72},[66,21986,3492],{"class":76},[66,21988,2003],{"class":72},[66,21990,8329],{"class":72},[66,21992,2413],{"class":76},[66,21994,2337],{"class":72},[66,21996,13254],{"class":76},[66,21998,3019],{"class":72},[66,22000,10651],{"class":76},[66,22002,22003],{"class":68,"line":11619},[66,22004,3407],{"class":76},[66,22006,22007],{"class":68,"line":11624},[66,22008,109],{"emptyLinePlaceholder":108},[66,22010,22011],{"class":68,"line":11630},[66,22012,109],{"emptyLinePlaceholder":108},[66,22014,22015,22017,22019],{"class":68,"line":11651},[66,22016,2003],{"class":72},[66,22018,3803],{"class":3793},[66,22020,12659],{"class":76},[66,22022,22023],{"class":68,"line":11657},[66,22024,109],{"emptyLinePlaceholder":108},[66,22026,22027],{"class":68,"line":11671},[66,22028,22029],{"class":758},"    \u002F\u002Ftest01();\n",[66,22031,22032],{"class":68,"line":11677},[66,22033,22034],{"class":758},"    \u002F\u002Ftest02();\n",[66,22036,22037,22039],{"class":68,"line":11704},[66,22038,21494],{"class":3793},[66,22040,7448],{"class":76},[66,22042,22043],{"class":68,"line":11713},[66,22044,109],{"emptyLinePlaceholder":108},[66,22046,22047,22049,22051,22053],{"class":68,"line":11719},[66,22048,4129],{"class":3793},[66,22050,348],{"class":76},[66,22052,4134],{"class":356},[66,22054,4543],{"class":76},[66,22056,22057],{"class":68,"line":11727},[66,22058,109],{"emptyLinePlaceholder":108},[66,22060,22061,22063,22065],{"class":68,"line":11732},[66,22062,5907],{"class":72},[66,22064,962],{"class":102},[66,22066,3135],{"class":76},[66,22068,22069],{"class":68,"line":18407},[66,22070,3407],{"class":76},[484,22072,22074],{"id":22073},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,22076,22077],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,22079,22080],{},"1．默认构造函数(无参，函数体为空)",[19,22082,22083],{},"2．默认析构函数(无参，函数体为空)",[19,22085,22086],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,22088,22089],{},"构造函数调用规则如下：",[2982,22091,22092,22095],{},[34,22093,22094],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[34,22096,22097],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[57,22099,22101],{"className":1989,"code":22100,"language":1991,"meta":62,"style":62},"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",[23,22102,22103,22111,22115,22120,22126,22138,22142,22147,22159,22168,22180,22184,22188,22204,22213,22225,22229,22233,22239,22251,22255,22259,22265,22269,22273,22281,22285,22297,22302,22310,22314,22332,22336,22340,22348,22352,22357,22365,22380,22393,22397,22402,22409,22425,22438,22442,22446,22454,22458,22464,22468,22478,22482,22490],{"__ignoreMap":62},[66,22104,22105,22107,22109],{"class":68,"line":69},[66,22106,16499],{"class":72},[66,22108,17372],{"class":3793},[66,22110,17375],{"class":76},[66,22112,22113],{"class":68,"line":80},[66,22114,16521],{"class":72},[66,22116,22117],{"class":68,"line":112},[66,22118,22119],{"class":758},"    \u002F\u002F无参（默认）构造函数\n",[66,22121,22122,22124],{"class":68,"line":129},[66,22123,20322],{"class":3793},[66,22125,12659],{"class":76},[66,22127,22128,22130,22132,22134,22136],{"class":68,"line":138},[66,22129,11476],{"class":76},[66,22131,3019],{"class":72},[66,22133,21613],{"class":356},[66,22135,3286],{"class":72},[66,22137,10651],{"class":76},[66,22139,22140],{"class":68,"line":227},[66,22141,4013],{"class":76},[66,22143,22144],{"class":68,"line":236},[66,22145,22146],{"class":758},"    \u002F\u002F有参构造函数\n",[66,22148,22149,22151,22153,22155,22157],{"class":68,"line":241},[66,22150,20322],{"class":3793},[66,22152,348],{"class":76},[66,22154,2003],{"class":72},[66,22156,3240],{"class":1234},[66,22158,14247],{"class":76},[66,22160,22161,22164,22166],{"class":68,"line":372},[66,22162,22163],{"class":76},"        age ",[66,22165,99],{"class":72},[66,22167,3274],{"class":76},[66,22169,22170,22172,22174,22176,22178],{"class":68,"line":377},[66,22171,11476],{"class":76},[66,22173,3019],{"class":72},[66,22175,21653],{"class":356},[66,22177,3286],{"class":72},[66,22179,10651],{"class":76},[66,22181,22182],{"class":68,"line":392},[66,22183,4013],{"class":76},[66,22185,22186],{"class":68,"line":405},[66,22187,20677],{"class":758},[66,22189,22190,22192,22194,22196,22198,22200,22202],{"class":68,"line":418},[66,22191,20322],{"class":3793},[66,22193,348],{"class":76},[66,22195,8603],{"class":72},[66,22197,17372],{"class":3793},[66,22199,2337],{"class":72},[66,22201,8636],{"class":1234},[66,22203,14247],{"class":76},[66,22205,22206,22208,22210],{"class":68,"line":430},[66,22207,22163],{"class":76},[66,22209,99],{"class":72},[66,22211,22212],{"class":76}," p.age;\n",[66,22214,22215,22217,22219,22221,22223],{"class":68,"line":438},[66,22216,11476],{"class":76},[66,22218,3019],{"class":72},[66,22220,21694],{"class":356},[66,22222,3286],{"class":72},[66,22224,10651],{"class":76},[66,22226,22227],{"class":68,"line":465},[66,22228,4013],{"class":76},[66,22230,22231],{"class":68,"line":1805},[66,22232,20350],{"class":758},[66,22234,22235,22237],{"class":68,"line":1817},[66,22236,20355],{"class":3793},[66,22238,12659],{"class":76},[66,22240,22241,22243,22245,22247,22249],{"class":68,"line":1822},[66,22242,11476],{"class":76},[66,22244,3019],{"class":72},[66,22246,21731],{"class":356},[66,22248,3286],{"class":72},[66,22250,10651],{"class":76},[66,22252,22253],{"class":68,"line":1829},[66,22254,4013],{"class":76},[66,22256,22257],{"class":68,"line":3529},[66,22258,16521],{"class":72},[66,22260,22261,22263],{"class":68,"line":3557},[66,22262,3814],{"class":72},[66,22264,9608],{"class":76},[66,22266,22267],{"class":68,"line":3562},[66,22268,5812],{"class":76},[66,22270,22271],{"class":68,"line":3579},[66,22272,109],{"emptyLinePlaceholder":108},[66,22274,22275,22277,22279],{"class":68,"line":3584},[66,22276,7176],{"class":72},[66,22278,7400],{"class":3793},[66,22280,1253],{"class":76},[66,22282,22283],{"class":68,"line":3589},[66,22284,3388],{"class":76},[66,22286,22287,22289,22291,22293,22295],{"class":68,"line":3594},[66,22288,21234],{"class":76},[66,22290,8941],{"class":3793},[66,22292,348],{"class":76},[66,22294,2629],{"class":102},[66,22296,4543],{"class":76},[66,22298,22299],{"class":68,"line":3608},[66,22300,22301],{"class":758},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[66,22303,22304,22306,22308],{"class":68,"line":3613},[66,22305,21234],{"class":76},[66,22307,8844],{"class":3793},[66,22309,19318],{"class":76},[66,22311,22312],{"class":68,"line":4401},[66,22313,109],{"emptyLinePlaceholder":108},[66,22315,22316,22318,22320,22323,22325,22328,22330],{"class":68,"line":4415},[66,22317,8340],{"class":76},[66,22319,3019],{"class":72},[66,22321,22322],{"class":356}," \"p2的年龄为： \"",[66,22324,3286],{"class":72},[66,22326,22327],{"class":76}," p2.age ",[66,22329,3019],{"class":72},[66,22331,10651],{"class":76},[66,22333,22334],{"class":68,"line":4423},[66,22335,3407],{"class":76},[66,22337,22338],{"class":68,"line":4428},[66,22339,109],{"emptyLinePlaceholder":108},[66,22341,22342,22344,22346],{"class":68,"line":4434},[66,22343,7176],{"class":72},[66,22345,7469],{"class":3793},[66,22347,1253],{"class":76},[66,22349,22350],{"class":68,"line":4440},[66,22351,3388],{"class":76},[66,22353,22354],{"class":68,"line":4445},[66,22355,22356],{"class":758},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[66,22358,22359,22362],{"class":68,"line":9759},[66,22360,22361],{"class":76},"    Person p1;",[66,22363,22364],{"class":758}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[66,22366,22367,22369,22371,22373,22375,22377],{"class":68,"line":9783},[66,22368,21234],{"class":76},[66,22370,8844],{"class":3793},[66,22372,348],{"class":76},[66,22374,790],{"class":102},[66,22376,7777],{"class":76},[66,22378,22379],{"class":758}," \u002F\u002F用户提供的有参\n",[66,22381,22382,22384,22387,22390],{"class":68,"line":9788},[66,22383,21234],{"class":76},[66,22385,22386],{"class":3793},"p3",[66,22388,22389],{"class":76},"(p2);",[66,22391,22392],{"class":758}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[66,22394,22395],{"class":68,"line":9794},[66,22396,109],{"emptyLinePlaceholder":108},[66,22398,22399],{"class":68,"line":9821},[66,22400,22401],{"class":758},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[66,22403,22404,22407],{"class":68,"line":9826},[66,22405,22406],{"class":76},"    Person p4;",[66,22408,22364],{"class":758},[66,22410,22411,22413,22416,22418,22420,22422],{"class":68,"line":9832},[66,22412,21234],{"class":76},[66,22414,22415],{"class":3793},"p5",[66,22417,348],{"class":76},[66,22419,790],{"class":102},[66,22421,7777],{"class":76},[66,22423,22424],{"class":758}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[66,22426,22427,22429,22432,22435],{"class":68,"line":9844},[66,22428,21234],{"class":76},[66,22430,22431],{"class":3793},"p6",[66,22433,22434],{"class":76},"(p5);",[66,22436,22437],{"class":758}," \u002F\u002F用户自己提供拷贝构造\n",[66,22439,22440],{"class":68,"line":9856},[66,22441,3407],{"class":76},[66,22443,22444],{"class":68,"line":9868},[66,22445,109],{"emptyLinePlaceholder":108},[66,22447,22448,22450,22452],{"class":68,"line":11523},[66,22449,2003],{"class":72},[66,22451,3803],{"class":3793},[66,22453,12659],{"class":76},[66,22455,22456],{"class":68,"line":11548},[66,22457,109],{"emptyLinePlaceholder":108},[66,22459,22460,22462],{"class":68,"line":11571},[66,22461,7445],{"class":3793},[66,22463,7448],{"class":76},[66,22465,22466],{"class":68,"line":11595},[66,22467,109],{"emptyLinePlaceholder":108},[66,22469,22470,22472,22474,22476],{"class":68,"line":11600},[66,22471,4129],{"class":3793},[66,22473,348],{"class":76},[66,22475,4134],{"class":356},[66,22477,4543],{"class":76},[66,22479,22480],{"class":68,"line":11605},[66,22481,109],{"emptyLinePlaceholder":108},[66,22483,22484,22486,22488],{"class":68,"line":11610},[66,22485,5907],{"class":72},[66,22487,962],{"class":102},[66,22489,3135],{"class":76},[66,22491,22492],{"class":68,"line":11619},[66,22493,3407],{"class":76},[484,22495,22497],{"id":22496},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,22499,22500],{},"浅拷贝：简单的赋值拷贝操作",[19,22502,22503],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[57,22505,22507],{"className":1989,"code":22506,"language":1991,"meta":62,"style":62},"#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",[23,22508,22509,22515,22525,22531,22535,22539,22544,22550,22554,22567,22571,22575,22582,22586,22596,22611,22624,22628,22633,22638,22654,22658,22671,22676,22681,22686,22695,22700,22715,22719,22723,22727,22733,22737,22742,22757,22761,22772,22786,22790,22799,22803,22809,22821,22825,22833,22837,22854,22885,22893,22921,22925,22929,22937,22941,22947],{"__ignoreMap":62},[66,22510,22511,22513],{"class":68,"line":69},[66,22512,3779],{"class":72},[66,22514,3782],{"class":356},[66,22516,22517,22519,22521,22523],{"class":68,"line":80},[66,22518,3787],{"class":72},[66,22520,3790],{"class":72},[66,22522,3794],{"class":3793},[66,22524,3135],{"class":76},[66,22526,22527,22529],{"class":68,"line":112},[66,22528,16499],{"class":72},[66,22530,16974],{"class":3793},[66,22532,22533],{"class":68,"line":129},[66,22534,3388],{"class":76},[66,22536,22537],{"class":68,"line":138},[66,22538,16521],{"class":72},[66,22540,22541],{"class":68,"line":227},[66,22542,22543],{"class":758},"    \u002F\u002F默认构造函数\n",[66,22545,22546,22548],{"class":68,"line":236},[66,22547,20322],{"class":3793},[66,22549,1253],{"class":76},[66,22551,22552],{"class":68,"line":241},[66,22553,3859],{"class":76},[66,22555,22556,22558,22560,22563,22565],{"class":68,"line":372},[66,22557,5269],{"class":76},[66,22559,3019],{"class":72},[66,22561,22562],{"class":356},"\"默认构造函数\"",[66,22564,3019],{"class":72},[66,22566,3041],{"class":76},[66,22568,22569],{"class":68,"line":377},[66,22570,4013],{"class":76},[66,22572,22573],{"class":68,"line":392},[66,22574,22146],{"class":758},[66,22576,22577,22579],{"class":68,"line":405},[66,22578,20355],{"class":3793},[66,22580,22581],{"class":76},"(int age,int height)\n",[66,22583,22584],{"class":68,"line":418},[66,22585,3859],{"class":76},[66,22587,22588,22591,22593],{"class":68,"line":430},[66,22589,22590],{"class":76},"        m_Age",[66,22592,99],{"class":72},[66,22594,22595],{"class":76},"age;\n",[66,22597,22598,22601,22603,22605,22608],{"class":68,"line":438},[66,22599,22600],{"class":76},"        m_Height",[66,22602,13523],{"class":72},[66,22604,345],{"class":72},[66,22606,22607],{"class":76},"(height);",[66,22609,22610],{"class":758},"\u002F\u002F放到堆区\n",[66,22612,22613,22615,22617,22620,22622],{"class":68,"line":465},[66,22614,5269],{"class":76},[66,22616,3019],{"class":72},[66,22618,22619],{"class":356},"\"有参构造函数\"",[66,22621,3019],{"class":72},[66,22623,3041],{"class":76},[66,22625,22626],{"class":68,"line":1805},[66,22627,4013],{"class":76},[66,22629,22630],{"class":68,"line":1817},[66,22631,22632],{"class":758},"    \u002F\u002F深拷贝解决上述问题\n",[66,22634,22635],{"class":68,"line":1822},[66,22636,22637],{"class":758},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[66,22639,22640,22642,22644,22646,22648,22650,22652],{"class":68,"line":1829},[66,22641,20322],{"class":3793},[66,22643,348],{"class":76},[66,22645,8603],{"class":72},[66,22647,17372],{"class":3793},[66,22649,12390],{"class":72},[66,22651,19],{"class":1234},[66,22653,313],{"class":76},[66,22655,22656],{"class":68,"line":3529},[66,22657,3859],{"class":76},[66,22659,22660,22662,22664,22667,22669],{"class":68,"line":3557},[66,22661,5269],{"class":76},[66,22663,3019],{"class":72},[66,22665,22666],{"class":356},"\"拷贝构造函数\"",[66,22668,3019],{"class":72},[66,22670,3041],{"class":76},[66,22672,22673],{"class":68,"line":3562},[66,22674,22675],{"class":758},"        \u002F\u002F编译器默认的写如下注释部分\n",[66,22677,22678],{"class":68,"line":3579},[66,22679,22680],{"class":758},"        \u002F\u002Fm_Age=p.m_Age;\n",[66,22682,22683],{"class":68,"line":3584},[66,22684,22685],{"class":758},"        \u002F\u002Fm_Height=p.m_Height;\n",[66,22687,22688,22690,22692],{"class":68,"line":3589},[66,22689,22590],{"class":76},[66,22691,99],{"class":72},[66,22693,22694],{"class":76},"p.m_Age;\n",[66,22696,22697],{"class":68,"line":3594},[66,22698,22699],{"class":758},"        \u002F\u002F深拷贝操作\n",[66,22701,22702,22704,22706,22708,22710,22712],{"class":68,"line":3608},[66,22703,22600],{"class":76},[66,22705,13523],{"class":72},[66,22707,345],{"class":72},[66,22709,348],{"class":76},[66,22711,1208],{"class":72},[66,22713,22714],{"class":76},"p.m_Height);\n",[66,22716,22717],{"class":68,"line":3613},[66,22718,4013],{"class":76},[66,22720,22721],{"class":68,"line":4401},[66,22722,109],{"emptyLinePlaceholder":108},[66,22724,22725],{"class":68,"line":4415},[66,22726,20350],{"class":758},[66,22728,22729,22731],{"class":68,"line":4423},[66,22730,20355],{"class":3793},[66,22732,1253],{"class":76},[66,22734,22735],{"class":68,"line":4428},[66,22736,3859],{"class":76},[66,22738,22739],{"class":68,"line":4434},[66,22740,22741],{"class":758},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[66,22743,22744,22746,22749,22752,22755],{"class":68,"line":4440},[66,22745,4321],{"class":72},[66,22747,22748],{"class":76},"(m_Height ",[66,22750,22751],{"class":72},"!=",[66,22753,22754],{"class":102}," NULL",[66,22756,313],{"class":76},[66,22758,22759],{"class":68,"line":4445},[66,22760,4334],{"class":76},[66,22762,22763,22766,22769],{"class":68,"line":9759},[66,22764,22765],{"class":72},"            delete",[66,22767,22768],{"class":76}," m_Height;",[66,22770,22771],{"class":758}," \u002F\u002F释放堆区内存\n",[66,22773,22774,22777,22779,22781,22783],{"class":68,"line":9783},[66,22775,22776],{"class":76},"            m_Height",[66,22778,99],{"class":72},[66,22780,4217],{"class":102},[66,22782,2051],{"class":76},[66,22784,22785],{"class":758}," \u002F\u002F防止野指针\n",[66,22787,22788],{"class":68,"line":9788},[66,22789,4353],{"class":76},[66,22791,22792,22794,22796],{"class":68,"line":9794},[66,22793,5269],{"class":76},[66,22795,3019],{"class":72},[66,22797,22798],{"class":356},"\"Person的析构函数调用\"\n",[66,22800,22801],{"class":68,"line":9821},[66,22802,4013],{"class":76},[66,22804,22805,22807],{"class":68,"line":9826},[66,22806,3814],{"class":72},[66,22808,17469],{"class":76},[66,22810,22811,22813,22815,22818],{"class":68,"line":9832},[66,22812,3814],{"class":72},[66,22814,8329],{"class":72},[66,22816,22817],{"class":76},"m_Height;",[66,22819,22820],{"class":758}," \u002F\u002F定义一个指针，指向身高\n",[66,22822,22823],{"class":68,"line":9844},[66,22824,5812],{"class":76},[66,22826,22827,22829,22831],{"class":68,"line":9856},[66,22828,7176],{"class":72},[66,22830,7400],{"class":3793},[66,22832,1253],{"class":76},[66,22834,22835],{"class":68,"line":9868},[66,22836,3388],{"class":76},[66,22838,22839,22841,22843,22845,22847,22849,22852],{"class":68,"line":11523},[66,22840,21234],{"class":76},[66,22842,8941],{"class":3793},[66,22844,348],{"class":76},[66,22846,2629],{"class":102},[66,22848,2362],{"class":76},[66,22850,22851],{"class":102},"160",[66,22853,4543],{"class":76},[66,22855,22856,22858,22860,22863,22865,22868,22870,22873,22875,22878,22880,22882],{"class":68,"line":11548},[66,22857,3393],{"class":76},[66,22859,3019],{"class":72},[66,22861,22862],{"class":356},"\"p1的年龄为:\"",[66,22864,3019],{"class":72},[66,22866,22867],{"class":76},"p1.m_Age",[66,22869,3019],{"class":72},[66,22871,22872],{"class":356},"\"身高为：\"",[66,22874,8230],{"class":72},[66,22876,22877],{"class":76},"p1.m_Height",[66,22879,3019],{"class":72},[66,22881,3083],{"class":76},[66,22883,22884],{"class":758},"  \u002F\u002F18\n",[66,22886,22887,22889,22891],{"class":68,"line":11571},[66,22888,21234],{"class":76},[66,22890,8844],{"class":3793},[66,22892,19318],{"class":76},[66,22894,22895,22897,22899,22902,22904,22906,22908,22910,22912,22915,22917,22919],{"class":68,"line":11595},[66,22896,3393],{"class":76},[66,22898,3019],{"class":72},[66,22900,22901],{"class":356},"\"p2的年龄为：\"",[66,22903,3019],{"class":72},[66,22905,21264],{"class":76},[66,22907,3019],{"class":72},[66,22909,22872],{"class":356},[66,22911,8230],{"class":72},[66,22913,22914],{"class":76},"p2.m_Height",[66,22916,3019],{"class":72},[66,22918,3083],{"class":76},[66,22920,22884],{"class":758},[66,22922,22923],{"class":68,"line":11600},[66,22924,15015],{"class":76},[66,22926,22927],{"class":68,"line":11605},[66,22928,3407],{"class":76},[66,22930,22931,22933,22935],{"class":68,"line":11610},[66,22932,2003],{"class":72},[66,22934,3803],{"class":3793},[66,22936,1253],{"class":76},[66,22938,22939],{"class":68,"line":11619},[66,22940,3388],{"class":76},[66,22942,22943,22945],{"class":68,"line":11624},[66,22944,7445],{"class":3793},[66,22946,7448],{"class":76},[66,22948,22949],{"class":68,"line":11630},[66,22950,3407],{"class":76},[19,22952,22953],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,22955,22956],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,22958,22959],{},[3304,22960],{"alt":62,"src":22961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,22963,22964],{},"浅拷贝问题要使用深拷贝来解决",[19,22966,22967],{},[3304,22968],{"alt":62,"src":22969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,22971,22972],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[484,22974,22976],{"id":22975},"_826初始化列表","8.2.6初始化列表",[19,22978,22979],{},"作用：初始化属性",[19,22981,55],{},[57,22983,22986],{"className":22984,"code":22985,"language":555},[553],"构造函数():属性1(值1),属性2(值2).....{}\n",[23,22987,22985],{"__ignoreMap":62},[19,22989,22990],{},"例子",[57,22992,22994],{"className":1989,"code":22993,"language":1991,"meta":62,"style":62},"#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",[23,22995,22996,23002,23012,23018,23022,23027,23031,23036,23041,23046,23051,23056,23061,23065,23070,23075,23118,23127,23145,23163,23181,23185,23189,23196,23203,23210,23214,23218,23226,23230,23234,23254,23263,23267,23271,23281,23285,23293],{"__ignoreMap":62},[66,22997,22998,23000],{"class":68,"line":69},[66,22999,3779],{"class":72},[66,23001,3782],{"class":356},[66,23003,23004,23006,23008,23010],{"class":68,"line":80},[66,23005,3787],{"class":72},[66,23007,3790],{"class":72},[66,23009,3794],{"class":3793},[66,23011,3135],{"class":76},[66,23013,23014,23016],{"class":68,"line":112},[66,23015,16499],{"class":72},[66,23017,16974],{"class":3793},[66,23019,23020],{"class":68,"line":129},[66,23021,3388],{"class":76},[66,23023,23024],{"class":68,"line":138},[66,23025,23026],{"class":72},"    public:\n",[66,23028,23029],{"class":68,"line":227},[66,23030,109],{"emptyLinePlaceholder":108},[66,23032,23033],{"class":68,"line":236},[66,23034,23035],{"class":758},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[66,23037,23038],{"class":68,"line":241},[66,23039,23040],{"class":758},"    \u002F\u002FPerson(int a, int b, int c) {\n",[66,23042,23043],{"class":68,"line":372},[66,23044,23045],{"class":758},"    \u002F\u002F  m_A = a;\n",[66,23047,23048],{"class":68,"line":377},[66,23049,23050],{"class":758},"    \u002F\u002F  m_B = b;\n",[66,23052,23053],{"class":68,"line":392},[66,23054,23055],{"class":758},"    \u002F\u002F  m_C = c;\n",[66,23057,23058],{"class":68,"line":405},[66,23059,23060],{"class":758},"    \u002F\u002F}\n",[66,23062,23063],{"class":68,"line":418},[66,23064,109],{"emptyLinePlaceholder":108},[66,23066,23067],{"class":68,"line":430},[66,23068,23069],{"class":758},"    \u002F\u002F初始化列表方式初始化\n",[66,23071,23072],{"class":68,"line":438},[66,23073,23074],{"class":758},"    \u002F\u002F使用有参构造函数\n",[66,23076,23077,23079,23081,23083,23085,23087,23089,23091,23093,23095,23097,23100,23103,23106,23109,23112,23115],{"class":68,"line":465},[66,23078,20322],{"class":3793},[66,23080,348],{"class":76},[66,23082,2003],{"class":72},[66,23084,3240],{"class":1234},[66,23086,307],{"class":76},[66,23088,2003],{"class":72},[66,23090,4657],{"class":1234},[66,23092,307],{"class":76},[66,23094,2003],{"class":72},[66,23096,4673],{"class":1234},[66,23098,23099],{"class":76},") :",[66,23101,23102],{"class":3793},"m_A",[66,23104,23105],{"class":76},"(a), ",[66,23107,23108],{"class":3793},"m_B",[66,23110,23111],{"class":76},"(b), ",[66,23113,23114],{"class":3793},"m_C",[66,23116,23117],{"class":76},"(c) {}\n",[66,23119,23120,23122,23125],{"class":68,"line":1805},[66,23121,16713],{"class":72},[66,23123,23124],{"class":3793}," PrintPerson",[66,23126,12659],{"class":76},[66,23128,23129,23131,23133,23136,23138,23141,23143],{"class":68,"line":1817},[66,23130,11476],{"class":76},[66,23132,3019],{"class":72},[66,23134,23135],{"class":356}," \"mA:\"",[66,23137,3286],{"class":72},[66,23139,23140],{"class":76}," m_A ",[66,23142,3019],{"class":72},[66,23144,10651],{"class":76},[66,23146,23147,23149,23151,23154,23156,23159,23161],{"class":68,"line":1822},[66,23148,11476],{"class":76},[66,23150,3019],{"class":72},[66,23152,23153],{"class":356}," \"mB:\"",[66,23155,3286],{"class":72},[66,23157,23158],{"class":76}," m_B ",[66,23160,3019],{"class":72},[66,23162,10651],{"class":76},[66,23164,23165,23167,23169,23172,23174,23177,23179],{"class":68,"line":1829},[66,23166,11476],{"class":76},[66,23168,3019],{"class":72},[66,23170,23171],{"class":356}," \"mC:\"",[66,23173,3286],{"class":72},[66,23175,23176],{"class":76}," m_C ",[66,23178,3019],{"class":72},[66,23180,10651],{"class":76},[66,23182,23183],{"class":68,"line":3529},[66,23184,4013],{"class":76},[66,23186,23187],{"class":68,"line":3557},[66,23188,17025],{"class":72},[66,23190,23191,23193],{"class":68,"line":3562},[66,23192,3814],{"class":72},[66,23194,23195],{"class":76}," m_A;\n",[66,23197,23198,23200],{"class":68,"line":3579},[66,23199,3814],{"class":72},[66,23201,23202],{"class":76}," m_B;\n",[66,23204,23205,23207],{"class":68,"line":3584},[66,23206,3814],{"class":72},[66,23208,23209],{"class":76}," m_C;\n",[66,23211,23212],{"class":68,"line":3589},[66,23213,5812],{"class":76},[66,23215,23216],{"class":68,"line":3594},[66,23217,109],{"emptyLinePlaceholder":108},[66,23219,23220,23222,23224],{"class":68,"line":3608},[66,23221,2003],{"class":72},[66,23223,3803],{"class":3793},[66,23225,7789],{"class":76},[66,23227,23228],{"class":68,"line":3613},[66,23229,3388],{"class":76},[66,23231,23232],{"class":68,"line":4401},[66,23233,109],{"emptyLinePlaceholder":108},[66,23235,23236,23238,23240,23242,23244,23246,23248,23250,23252],{"class":68,"line":4415},[66,23237,21234],{"class":76},[66,23239,19],{"class":3793},[66,23241,348],{"class":76},[66,23243,304],{"class":102},[66,23245,307],{"class":76},[66,23247,795],{"class":102},[66,23249,307],{"class":76},[66,23251,1520],{"class":102},[66,23253,4543],{"class":76},[66,23255,23256,23258,23261],{"class":68,"line":4423},[66,23257,17669],{"class":76},[66,23259,23260],{"class":3793},"PrintPerson",[66,23262,7448],{"class":76},[66,23264,23265],{"class":68,"line":4428},[66,23266,109],{"emptyLinePlaceholder":108},[66,23268,23269],{"class":68,"line":4434},[66,23270,109],{"emptyLinePlaceholder":108},[66,23272,23273,23275,23277,23279],{"class":68,"line":4440},[66,23274,4129],{"class":3793},[66,23276,348],{"class":76},[66,23278,4134],{"class":356},[66,23280,4543],{"class":76},[66,23282,23283],{"class":68,"line":4445},[66,23284,109],{"emptyLinePlaceholder":108},[66,23286,23287,23289,23291],{"class":68,"line":9759},[66,23288,5907],{"class":72},[66,23290,962],{"class":102},[66,23292,3135],{"class":76},[66,23294,23295],{"class":68,"line":9783},[66,23296,3407],{"class":76},[19,23298,23299,23300,23303,23304],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[2141,23301,23302],{},"参数名就是定义的对象属性","，",[2141,23305,23306],{},"属性后面的值为有参构造函数的形参",[57,23308,23310],{"className":1989,"code":23309,"language":1991,"meta":62,"style":62},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[23,23311,23312],{"__ignoreMap":62},[66,23313,23314,23316,23318,23320,23323,23325,23328,23330,23333,23335,23338,23340,23343,23345],{"class":68,"line":69},[66,23315,20849],{"class":3793},[66,23317,348],{"class":76},[66,23319,2003],{"class":72},[66,23321,23322],{"class":76}," a.",[66,23324,2003],{"class":72},[66,23326,23327],{"class":76}," b,",[66,23329,2003],{"class":72},[66,23331,23332],{"class":76}," b):",[66,23334,23102],{"class":3793},[66,23336,23337],{"class":76},"(a),",[66,23339,23108],{"class":3793},[66,23341,23342],{"class":76},"(c),",[66,23344,23114],{"class":3793},[66,23346,23347],{"class":76},"(b) {}\n",[484,23349,23351],{"id":23350},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,23353,23354],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,23356,16438],{},[57,23358,23360],{"className":1989,"code":23359,"language":1991,"meta":62,"style":62},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[23,23361,23362,23367,23372,23376,23381,23385],{"__ignoreMap":62},[66,23363,23364],{"class":68,"line":69},[66,23365,23366],{"class":76},"A{};\n",[66,23368,23369],{"class":68,"line":80},[66,23370,23371],{"class":76},"B\n",[66,23373,23374],{"class":68,"line":112},[66,23375,3388],{"class":76},[66,23377,23378],{"class":68,"line":129},[66,23379,23380],{"class":76},"    A a;\n",[66,23382,23383],{"class":68,"line":138},[66,23384,3407],{"class":76},[66,23386,23387],{"class":68,"line":227},[66,23388,23389],{"class":758},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,23391,23392],{},"案例",[57,23394,23396],{"className":1989,"code":23395,"language":1991,"meta":62,"style":62},"\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",[23,23397,23398,23403,23410,23414,23419,23424,23438,23442,23452,23463,23467,23474,23478,23491,23495,23500,23505,23509,23515,23519,23523,23527,23558,23562,23573,23577,23583,23587,23600,23604,23608,23612,23617,23622,23626,23634,23638,23655,23674,23678,23686,23690,23696],{"__ignoreMap":62},[66,23399,23400],{"class":68,"line":69},[66,23401,23402],{"class":758},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[66,23404,23405,23407],{"class":68,"line":80},[66,23406,16499],{"class":72},[66,23408,23409],{"class":3793}," Phone\n",[66,23411,23412],{"class":68,"line":112},[66,23413,3388],{"class":76},[66,23415,23416],{"class":68,"line":129},[66,23417,23418],{"class":76},"public：\n",[66,23420,23421],{"class":68,"line":138},[66,23422,23423],{"class":758},"    \u002F\u002F 赋值(构造函数)\n",[66,23425,23426,23429,23431,23433,23436],{"class":68,"line":227},[66,23427,23428],{"class":3793},"    Phone",[66,23430,348],{"class":76},[66,23432,16721],{"class":3793},[66,23434,23435],{"class":1234}," pName",[66,23437,313],{"class":76},[66,23439,23440],{"class":68,"line":236},[66,23441,3859],{"class":76},[66,23443,23444,23447,23449],{"class":68,"line":241},[66,23445,23446],{"class":76},"        m_pName",[66,23448,99],{"class":72},[66,23450,23451],{"class":76},"pName;\n",[66,23453,23454,23456,23458,23461],{"class":68,"line":372},[66,23455,5269],{"class":76},[66,23457,3019],{"class":72},[66,23459,23460],{"class":356},"\"Phone的构造函数调用\"",[66,23462,3135],{"class":76},[66,23464,23465],{"class":68,"line":377},[66,23466,4013],{"class":76},[66,23468,23469,23472],{"class":68,"line":392},[66,23470,23471],{"class":3793},"    ~Phone",[66,23473,1253],{"class":76},[66,23475,23476],{"class":68,"line":405},[66,23477,3859],{"class":76},[66,23479,23480,23482,23484,23487,23489],{"class":68,"line":418},[66,23481,5269],{"class":76},[66,23483,3019],{"class":72},[66,23485,23486],{"class":356},"\"Phone析构函数调用\"",[66,23488,3019],{"class":72},[66,23490,3041],{"class":76},[66,23492,23493],{"class":68,"line":430},[66,23494,4013],{"class":76},[66,23496,23497],{"class":68,"line":438},[66,23498,23499],{"class":758},"    \u002F\u002F\n",[66,23501,23502],{"class":68,"line":465},[66,23503,23504],{"class":76},"    string m_PName;\n",[66,23506,23507],{"class":68,"line":1805},[66,23508,5812],{"class":76},[66,23510,23511,23513],{"class":68,"line":1817},[66,23512,16499],{"class":72},[66,23514,16974],{"class":3793},[66,23516,23517],{"class":68,"line":1822},[66,23518,3388],{"class":76},[66,23520,23521],{"class":68,"line":1829},[66,23522,16521],{"class":72},[66,23524,23525],{"class":68,"line":3529},[66,23526,18797],{"class":758},[66,23528,23529,23531,23533,23535,23537,23539,23541,23544,23547,23549,23552,23555],{"class":68,"line":3557},[66,23530,20322],{"class":3793},[66,23532,348],{"class":76},[66,23534,16721],{"class":3793},[66,23536,16724],{"class":1234},[66,23538,2362],{"class":76},[66,23540,16721],{"class":3793},[66,23542,23543],{"class":1234}," pname",[66,23545,23546],{"class":76},"):",[66,23548,16814],{"class":3793},[66,23550,23551],{"class":76},"(name),m_phone.",[66,23553,23554],{"class":3793},"m_PName",[66,23556,23557],{"class":76},"(pname) \n",[66,23559,23560],{"class":68,"line":3562},[66,23561,3859],{"class":76},[66,23563,23564,23566,23568,23571],{"class":68,"line":3579},[66,23565,5269],{"class":76},[66,23567,3019],{"class":72},[66,23569,23570],{"class":356},"\"Person的构造函数调用\"",[66,23572,3135],{"class":76},[66,23574,23575],{"class":68,"line":3584},[66,23576,4013],{"class":76},[66,23578,23579,23581],{"class":68,"line":3589},[66,23580,20355],{"class":3793},[66,23582,1253],{"class":76},[66,23584,23585],{"class":68,"line":3594},[66,23586,3859],{"class":76},[66,23588,23589,23591,23593,23596,23598],{"class":68,"line":3608},[66,23590,5269],{"class":76},[66,23592,3019],{"class":72},[66,23594,23595],{"class":356},"\"Person析构函数调用\"",[66,23597,3019],{"class":72},[66,23599,3041],{"class":76},[66,23601,23602],{"class":68,"line":3613},[66,23603,4013],{"class":76},[66,23605,23606],{"class":68,"line":4401},[66,23607,9591],{"class":758},[66,23609,23610],{"class":68,"line":4415},[66,23611,16696],{"class":76},[66,23613,23614],{"class":68,"line":4423},[66,23615,23616],{"class":758},"    \u002F\u002F手机\n",[66,23618,23619],{"class":68,"line":4428},[66,23620,23621],{"class":76},"    Phone m_Phone;\n",[66,23623,23624],{"class":68,"line":4434},[66,23625,5812],{"class":76},[66,23627,23628,23630,23632],{"class":68,"line":4440},[66,23629,7176],{"class":72},[66,23631,7400],{"class":3793},[66,23633,1253],{"class":76},[66,23635,23636],{"class":68,"line":4445},[66,23637,3388],{"class":76},[66,23639,23640,23642,23644,23646,23648,23650,23653],{"class":68,"line":9759},[66,23641,21234],{"class":76},[66,23643,19],{"class":3793},[66,23645,348],{"class":76},[66,23647,9727],{"class":356},[66,23649,2362],{"class":76},[66,23651,23652],{"class":356},"\"安卓\"",[66,23654,4543],{"class":76},[66,23656,23657,23659,23661,23664,23666,23669,23671],{"class":68,"line":9783},[66,23658,3393],{"class":76},[66,23660,3019],{"class":72},[66,23662,23663],{"class":76},"p.Name",[66,23665,3019],{"class":72},[66,23667,23668],{"class":356},"\"拿着：\"",[66,23670,3019],{"class":72},[66,23672,23673],{"class":76},"p.m_phone.m_PName;\n",[66,23675,23676],{"class":68,"line":9788},[66,23677,3407],{"class":76},[66,23679,23680,23682,23684],{"class":68,"line":9794},[66,23681,2003],{"class":72},[66,23683,3803],{"class":3793},[66,23685,1253],{"class":76},[66,23687,23688],{"class":68,"line":9821},[66,23689,3388],{"class":76},[66,23691,23692,23694],{"class":68,"line":9826},[66,23693,7445],{"class":3793},[66,23695,7448],{"class":76},[66,23697,23698],{"class":68,"line":9832},[66,23699,3407],{"class":76},[19,23701,841],{},[57,23703,23705],{"className":1989,"code":23704,"language":1991,"meta":62,"style":62},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[23,23706,23707,23712],{"__ignoreMap":62},[66,23708,23709],{"class":68,"line":69},[66,23710,23711],{"class":758},"    \u002F\u002F不需要写这个：\n",[66,23713,23714],{"class":68,"line":80},[66,23715,23716],{"class":758},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,23718,23719],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[57,23721,23723],{"className":1989,"code":23722,"language":1991,"meta":62,"style":62},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[23,23724,23725],{"__ignoreMap":62},[66,23726,23727,23729,23732,23734,23737,23740],{"class":68,"line":69},[66,23728,20849],{"class":3793},[66,23730,23731],{"class":76},"(string name.string pname):",[66,23733,16814],{"class":3793},[66,23735,23736],{"class":76},"(name),",[66,23738,23739],{"class":3793},"m_phone",[66,23741,23742],{"class":76},"(pname) {}\n",[19,23744,23745,23746,99,23749],{},"采用的是隐式转换法，实际为如下：\n",[23,23747,23748],{},"m_phone(pname)",[23,23750,23751],{},"Phone m_phone=pname",[19,23753,23754,23757],{},[2141,23755,23756],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,23759,23760],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[484,23762,23764],{"id":23763},"_828静态对象","8.2.8静态对象",[19,23766,23767],{},"静态对象在成员对象前static，称为静态对象",[19,23769,23770],{},"静态对象分为两类：",[31,23772,23773],{},[34,23774,23775],{},"静态成员变量",[2982,23777,23778,23781,23784],{},[34,23779,23780],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[34,23782,23783],{},"②在编译阶段分配内存",[34,23785,23786],{},"③类内声明，类外初始化",[31,23788,23789],{"start":80},[34,23790,23791],{},"静态成员函数",[2982,23793,23794,23797],{},[34,23795,23796],{},"①所有对象共享同一个函数",[34,23798,23799],{},"②静态成员函数只能访问静态成员变量",[23801,23802,23804],"h4",{"id":23803},"_8281静态成员变量","8.2.8.1静态成员变量",[57,23806,23808],{"className":1989,"code":23807,"language":1991,"meta":62,"style":62},"#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",[23,23809,23810,23816,23826,23832,23836,23840,23845,23850,23855,23863,23867,23871,23875,23883,23887,23891,23896,23909,23913,23921,23925,23931],{"__ignoreMap":62},[66,23811,23812,23814],{"class":68,"line":69},[66,23813,3779],{"class":72},[66,23815,3782],{"class":356},[66,23817,23818,23820,23822,23824],{"class":68,"line":80},[66,23819,3787],{"class":72},[66,23821,3790],{"class":72},[66,23823,3794],{"class":3793},[66,23825,3135],{"class":76},[66,23827,23828,23830],{"class":68,"line":112},[66,23829,16499],{"class":72},[66,23831,16974],{"class":3793},[66,23833,23834],{"class":68,"line":129},[66,23835,3388],{"class":76},[66,23837,23838],{"class":68,"line":138},[66,23839,16521],{"class":72},[66,23841,23842],{"class":68,"line":227},[66,23843,23844],{"class":758},"    \u002F\u002F非静态成员变量\n",[66,23846,23847],{"class":68,"line":236},[66,23848,23849],{"class":758},"    \u002F\u002F int m_A;\n",[66,23851,23852],{"class":68,"line":241},[66,23853,23854],{"class":758},"    \u002F\u002F定义静态成员变量\n",[66,23856,23857,23859,23861],{"class":68,"line":372},[66,23858,12826],{"class":72},[66,23860,345],{"class":72},[66,23862,23195],{"class":76},[66,23864,23865],{"class":68,"line":377},[66,23866,109],{"emptyLinePlaceholder":108},[66,23868,23869],{"class":68,"line":392},[66,23870,109],{"emptyLinePlaceholder":108},[66,23872,23873],{"class":68,"line":405},[66,23874,5812],{"class":76},[66,23876,23877,23879,23881],{"class":68,"line":418},[66,23878,7176],{"class":72},[66,23880,7400],{"class":3793},[66,23882,1253],{"class":76},[66,23884,23885],{"class":68,"line":430},[66,23886,3388],{"class":76},[66,23888,23889],{"class":68,"line":438},[66,23890,17116],{"class":76},[66,23892,23893],{"class":68,"line":465},[66,23894,23895],{"class":758},"    \u002F\u002F输出类成员变量这块内存\n",[66,23897,23898,23900,23902,23905,23907],{"class":68,"line":1805},[66,23899,3393],{"class":76},[66,23901,3019],{"class":72},[66,23903,23904],{"class":76},"p.m_A",[66,23906,3019],{"class":72},[66,23908,3041],{"class":76},[66,23910,23911],{"class":68,"line":1817},[66,23912,3407],{"class":76},[66,23914,23915,23917,23919],{"class":68,"line":1822},[66,23916,2003],{"class":72},[66,23918,3803],{"class":3793},[66,23920,1253],{"class":76},[66,23922,23923],{"class":68,"line":1829},[66,23924,3388],{"class":76},[66,23926,23927,23929],{"class":68,"line":3529},[66,23928,7445],{"class":3793},[66,23930,1253],{"class":76},[66,23932,23933],{"class":68,"line":3557},[66,23934,3407],{"class":76},[19,23936,23937],{},"此时输出是报错的：无法解析外部命令",[19,23939,23940],{},"解决这一问题：必须用到类内声明，类外初始化操作",[57,23942,23944],{"className":1989,"code":23943,"language":1991,"meta":62,"style":62},"#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",[23,23945,23946,23952,23962,23968,23972,23976,23981,23989,23993,23998,24013,24021,24025,24029,24034,24039,24051,24056,24067,24072,24077,24090,24094,24102,24106,24112],{"__ignoreMap":62},[66,23947,23948,23950],{"class":68,"line":69},[66,23949,3779],{"class":72},[66,23951,3782],{"class":356},[66,23953,23954,23956,23958,23960],{"class":68,"line":80},[66,23955,3787],{"class":72},[66,23957,3790],{"class":72},[66,23959,3794],{"class":3793},[66,23961,3135],{"class":76},[66,23963,23964,23966],{"class":68,"line":112},[66,23965,16499],{"class":72},[66,23967,16974],{"class":3793},[66,23969,23970],{"class":68,"line":129},[66,23971,3388],{"class":76},[66,23973,23974],{"class":68,"line":138},[66,23975,16521],{"class":72},[66,23977,23978],{"class":68,"line":227},[66,23979,23980],{"class":758},"    \u002F\u002F类内声明\n",[66,23982,23983,23985,23987],{"class":68,"line":236},[66,23984,12826],{"class":72},[66,23986,345],{"class":72},[66,23988,23195],{"class":76},[66,23990,23991],{"class":68,"line":241},[66,23992,5812],{"class":76},[66,23994,23995],{"class":68,"line":372},[66,23996,23997],{"class":758},"\u002F\u002F类外初始化\n",[66,23999,24000,24002,24004,24007,24009,24011],{"class":68,"line":377},[66,24001,2003],{"class":72},[66,24003,17372],{"class":3793},[66,24005,24006],{"class":76},"::m_A",[66,24008,99],{"class":72},[66,24010,790],{"class":102},[66,24012,3135],{"class":76},[66,24014,24015,24017,24019],{"class":68,"line":392},[66,24016,7176],{"class":72},[66,24018,7400],{"class":3793},[66,24020,1253],{"class":76},[66,24022,24023],{"class":68,"line":405},[66,24024,3388],{"class":76},[66,24026,24027],{"class":68,"line":418},[66,24028,17116],{"class":76},[66,24030,24031],{"class":68,"line":430},[66,24032,24033],{"class":758},"    \u002F\u002F访问变量的原内存空间\n",[66,24035,24036],{"class":68,"line":438},[66,24037,24038],{"class":758},"    \u002F\u002F100\n",[66,24040,24041,24043,24045,24047,24049],{"class":68,"line":465},[66,24042,3393],{"class":76},[66,24044,3019],{"class":72},[66,24046,23904],{"class":76},[66,24048,3019],{"class":72},[66,24050,3041],{"class":76},[66,24052,24053],{"class":68,"line":1805},[66,24054,24055],{"class":76},"    Person p2;\n",[66,24057,24058,24061,24063,24065],{"class":68,"line":1817},[66,24059,24060],{"class":76},"    p2.m_A",[66,24062,99],{"class":72},[66,24064,3552],{"class":102},[66,24066,3135],{"class":76},[66,24068,24069],{"class":68,"line":1822},[66,24070,24071],{"class":758},"    \u002F\u002F继续访问这片空间\n",[66,24073,24074],{"class":68,"line":1829},[66,24075,24076],{"class":758},"    \u002F\u002F200\n",[66,24078,24079,24081,24083,24086,24088],{"class":68,"line":3529},[66,24080,3393],{"class":76},[66,24082,3019],{"class":72},[66,24084,24085],{"class":76},"p2.m_A",[66,24087,3019],{"class":72},[66,24089,3041],{"class":76},[66,24091,24092],{"class":68,"line":3557},[66,24093,3407],{"class":76},[66,24095,24096,24098,24100],{"class":68,"line":3562},[66,24097,2003],{"class":72},[66,24099,3803],{"class":3793},[66,24101,1253],{"class":76},[66,24103,24104],{"class":68,"line":3579},[66,24105,3388],{"class":76},[66,24107,24108,24110],{"class":68,"line":3584},[66,24109,7445],{"class":3793},[66,24111,7448],{"class":76},[66,24113,24114],{"class":68,"line":3589},[66,24115,3407],{"class":76},[19,24117,24118],{},[2141,24119,24120],{},"静态变量的访问",[57,24122,24124],{"className":1989,"code":24123,"language":1991,"meta":62,"style":62},"#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",[23,24125,24126,24132,24142,24148,24152,24156,24160,24168,24172,24177,24185,24189,24193,24207,24222,24230,24234,24239,24244,24249,24254,24266,24271,24276,24290,24307,24311,24319,24323,24329],{"__ignoreMap":62},[66,24127,24128,24130],{"class":68,"line":69},[66,24129,3779],{"class":72},[66,24131,3782],{"class":356},[66,24133,24134,24136,24138,24140],{"class":68,"line":80},[66,24135,3787],{"class":72},[66,24137,3790],{"class":72},[66,24139,3794],{"class":3793},[66,24141,3135],{"class":76},[66,24143,24144,24146],{"class":68,"line":112},[66,24145,16499],{"class":72},[66,24147,16974],{"class":3793},[66,24149,24150],{"class":68,"line":129},[66,24151,3388],{"class":76},[66,24153,24154],{"class":68,"line":138},[66,24155,16521],{"class":72},[66,24157,24158],{"class":68,"line":227},[66,24159,23980],{"class":758},[66,24161,24162,24164,24166],{"class":68,"line":236},[66,24163,12826],{"class":72},[66,24165,345],{"class":72},[66,24167,23195],{"class":76},[66,24169,24170],{"class":68,"line":241},[66,24171,17025],{"class":72},[66,24173,24174],{"class":68,"line":372},[66,24175,24176],{"class":758},"    \u002F\u002F静态成员变量也是有访问权限的\n",[66,24178,24179,24181,24183],{"class":68,"line":377},[66,24180,12826],{"class":72},[66,24182,345],{"class":72},[66,24184,23202],{"class":76},[66,24186,24187],{"class":68,"line":392},[66,24188,5812],{"class":76},[66,24190,24191],{"class":68,"line":405},[66,24192,23997],{"class":758},[66,24194,24195,24197,24199,24201,24203,24205],{"class":68,"line":418},[66,24196,2003],{"class":72},[66,24198,17372],{"class":3793},[66,24200,24006],{"class":76},[66,24202,99],{"class":72},[66,24204,790],{"class":102},[66,24206,3135],{"class":76},[66,24208,24209,24211,24213,24216,24218,24220],{"class":68,"line":430},[66,24210,2003],{"class":72},[66,24212,17372],{"class":3793},[66,24214,24215],{"class":76},"::m_B",[66,24217,99],{"class":72},[66,24219,2679],{"class":102},[66,24221,3135],{"class":76},[66,24223,24224,24226,24228],{"class":68,"line":438},[66,24225,7176],{"class":72},[66,24227,7469],{"class":3793},[66,24229,1253],{"class":76},[66,24231,24232],{"class":68,"line":465},[66,24233,3388],{"class":76},[66,24235,24236],{"class":68,"line":1805},[66,24237,24238],{"class":758},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[66,24240,24241],{"class":68,"line":1817},[66,24242,24243],{"class":758},"    \u002F\u002F静态成员变量有两种访问方式：\n",[66,24245,24246],{"class":68,"line":1822},[66,24247,24248],{"class":758},"    \u002F\u002F1.通过对象进行访问\n",[66,24250,24251],{"class":68,"line":1829},[66,24252,24253],{"class":76},"    Person p;  \n",[66,24255,24256,24258,24260,24262,24264],{"class":68,"line":3529},[66,24257,3393],{"class":76},[66,24259,3019],{"class":72},[66,24261,23904],{"class":76},[66,24263,3019],{"class":72},[66,24265,3041],{"class":76},[66,24267,24268],{"class":68,"line":3557},[66,24269,24270],{"class":758},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[66,24272,24273],{"class":68,"line":3562},[66,24274,24275],{"class":758},"    \u002F\u002F2.通过类名进行访问\n",[66,24277,24278,24280,24282,24284,24286,24288],{"class":68,"line":3579},[66,24279,3393],{"class":76},[66,24281,3019],{"class":72},[66,24283,20849],{"class":3793},[66,24285,24006],{"class":76},[66,24287,3019],{"class":72},[66,24289,3041],{"class":76},[66,24291,24292,24294,24296,24298,24300,24302,24304],{"class":68,"line":3584},[66,24293,3393],{"class":76},[66,24295,3019],{"class":72},[66,24297,20849],{"class":3793},[66,24299,24215],{"class":76},[66,24301,3019],{"class":72},[66,24303,3083],{"class":76},[66,24305,24306],{"class":758}," \u002F\u002F没有访问权限，报错\n",[66,24308,24309],{"class":68,"line":3589},[66,24310,3407],{"class":76},[66,24312,24313,24315,24317],{"class":68,"line":3594},[66,24314,2003],{"class":72},[66,24316,3803],{"class":3793},[66,24318,1253],{"class":76},[66,24320,24321],{"class":68,"line":3608},[66,24322,3388],{"class":76},[66,24324,24325,24327],{"class":68,"line":3613},[66,24326,7514],{"class":3793},[66,24328,7448],{"class":76},[66,24330,24331],{"class":68,"line":4401},[66,24332,3407],{"class":76},[23801,24334,24336],{"id":24335},"_8282静态成员函数","8.2.8.2静态成员函数",[19,24338,24339],{},"1.静态成员函数定义与访问",[57,24341,24343],{"className":1989,"code":24342,"language":1991,"meta":62,"style":62},"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",[23,24344,24345,24351,24355,24359,24364,24375,24379,24393,24397,24401,24409,24413,24418,24423,24427,24435,24440,24450],{"__ignoreMap":62},[66,24346,24347,24349],{"class":68,"line":69},[66,24348,16499],{"class":72},[66,24350,16974],{"class":3793},[66,24352,24353],{"class":68,"line":80},[66,24354,3388],{"class":76},[66,24356,24357],{"class":68,"line":112},[66,24358,16521],{"class":72},[66,24360,24361],{"class":68,"line":129},[66,24362,24363],{"class":758},"    \u002F\u002F在公共权限下定义静态成员函数\n",[66,24365,24366,24368,24371,24373],{"class":68,"line":138},[66,24367,12826],{"class":72},[66,24369,24370],{"class":72}," void",[66,24372,13191],{"class":3793},[66,24374,1253],{"class":76},[66,24376,24377],{"class":68,"line":227},[66,24378,3859],{"class":76},[66,24380,24381,24384,24386,24389,24391],{"class":68,"line":236},[66,24382,24383],{"class":76},"        coout",[66,24385,3019],{"class":72},[66,24387,24388],{"class":356},"\"静态成员函数的调用\"",[66,24390,3019],{"class":72},[66,24392,3041],{"class":76},[66,24394,24395],{"class":68,"line":241},[66,24396,4013],{"class":76},[66,24398,24399],{"class":68,"line":372},[66,24400,5812],{"class":76},[66,24402,24403,24405,24407],{"class":68,"line":377},[66,24404,7176],{"class":72},[66,24406,7400],{"class":3793},[66,24408,1253],{"class":76},[66,24410,24411],{"class":68,"line":392},[66,24412,3388],{"class":76},[66,24414,24415],{"class":68,"line":405},[66,24416,24417],{"class":758},"    \u002F\u002F静态成员函数的调用方式:\n",[66,24419,24420],{"class":68,"line":418},[66,24421,24422],{"class":758},"    \u002F\u002F1.通过对象访问\n",[66,24424,24425],{"class":68,"line":430},[66,24426,17116],{"class":76},[66,24428,24429,24431,24433],{"class":68,"line":438},[66,24430,17669],{"class":76},[66,24432,13357],{"class":3793},[66,24434,7448],{"class":76},[66,24436,24437],{"class":68,"line":465},[66,24438,24439],{"class":758},"    \u002F\u002F2.通过类名访问\n",[66,24441,24442,24444,24446,24448],{"class":68,"line":1805},[66,24443,20322],{"class":3793},[66,24445,19535],{"class":76},[66,24447,13357],{"class":3793},[66,24449,7448],{"class":76},[66,24451,24452],{"class":68,"line":1817},[66,24453,3407],{"class":76},[31,24455,24456],{"start":80},[34,24457,24458],{},"静态成员函数只能访问静态成员变量",[57,24460,24462],{"className":1989,"code":24461,"language":1991,"meta":62,"style":62},"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",[23,24463,24464,24470,24474,24478,24482,24492,24496,24510,24515,24527,24531,24542,24552,24556,24560,24564,24574,24578,24591,24595,24599,24603,24607,24621,24629,24633,24637,24641,24645,24653,24657,24667,24672,24676,24684,24688,24694],{"__ignoreMap":62},[66,24465,24466,24468],{"class":68,"line":69},[66,24467,16499],{"class":72},[66,24469,16974],{"class":3793},[66,24471,24472],{"class":68,"line":80},[66,24473,3388],{"class":76},[66,24475,24476],{"class":68,"line":112},[66,24477,16521],{"class":72},[66,24479,24480],{"class":68,"line":129},[66,24481,24363],{"class":758},[66,24483,24484,24486,24488,24490],{"class":68,"line":138},[66,24485,12826],{"class":72},[66,24487,24370],{"class":72},[66,24489,13191],{"class":3793},[66,24491,1253],{"class":76},[66,24493,24494],{"class":68,"line":227},[66,24495,3859],{"class":76},[66,24497,24498,24501,24503,24505,24507],{"class":68,"line":236},[66,24499,24500],{"class":76},"        m_A",[66,24502,99],{"class":72},[66,24504,310],{"class":102},[66,24506,2051],{"class":76},[66,24508,24509],{"class":758}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[66,24511,24512],{"class":68,"line":241},[66,24513,24514],{"class":758},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[66,24516,24517,24519,24521,24523,24525],{"class":68,"line":372},[66,24518,24383],{"class":76},[66,24520,3019],{"class":72},[66,24522,24388],{"class":356},[66,24524,3019],{"class":72},[66,24526,3041],{"class":76},[66,24528,24529],{"class":68,"line":377},[66,24530,4013],{"class":76},[66,24532,24533,24535,24537,24539],{"class":68,"line":392},[66,24534,12826],{"class":72},[66,24536,345],{"class":72},[66,24538,17251],{"class":76},[66,24540,24541],{"class":758}," \u002F\u002F静态成员变量\n",[66,24543,24544,24546,24549],{"class":68,"line":405},[66,24545,3814],{"class":72},[66,24547,24548],{"class":76}," m_B;",[66,24550,24551],{"class":758}," \u002F\u002F非静态成员变量\n",[66,24553,24554],{"class":68,"line":418},[66,24555,109],{"emptyLinePlaceholder":108},[66,24557,24558],{"class":68,"line":430},[66,24559,17025],{"class":72},[66,24561,24562],{"class":68,"line":438},[66,24563,24176],{"class":758},[66,24565,24566,24568,24570,24572],{"class":68,"line":465},[66,24567,12826],{"class":72},[66,24569,24370],{"class":72},[66,24571,15423],{"class":3793},[66,24573,1253],{"class":76},[66,24575,24576],{"class":68,"line":1805},[66,24577,3859],{"class":76},[66,24579,24580,24582,24584,24587,24589],{"class":68,"line":1817},[66,24581,5269],{"class":76},[66,24583,3019],{"class":72},[66,24585,24586],{"class":356},"\"这是私有权限下的静态函数调用\"",[66,24588,3019],{"class":72},[66,24590,3041],{"class":76},[66,24592,24593],{"class":68,"line":1822},[66,24594,4013],{"class":76},[66,24596,24597],{"class":68,"line":1829},[66,24598,109],{"emptyLinePlaceholder":108},[66,24600,24601],{"class":68,"line":3529},[66,24602,109],{"emptyLinePlaceholder":108},[66,24604,24605],{"class":68,"line":3557},[66,24606,5812],{"class":76},[66,24608,24609,24611,24613,24615,24617,24619],{"class":68,"line":3562},[66,24610,2003],{"class":72},[66,24612,17372],{"class":3793},[66,24614,24006],{"class":76},[66,24616,99],{"class":72},[66,24618,2183],{"class":102},[66,24620,3135],{"class":76},[66,24622,24623,24625,24627],{"class":68,"line":3579},[66,24624,7176],{"class":72},[66,24626,7400],{"class":3793},[66,24628,1253],{"class":76},[66,24630,24631],{"class":68,"line":3584},[66,24632,3388],{"class":76},[66,24634,24635],{"class":68,"line":3589},[66,24636,24417],{"class":758},[66,24638,24639],{"class":68,"line":3594},[66,24640,24422],{"class":758},[66,24642,24643],{"class":68,"line":3608},[66,24644,17116],{"class":76},[66,24646,24647,24649,24651],{"class":68,"line":3613},[66,24648,17669],{"class":76},[66,24650,13357],{"class":3793},[66,24652,7448],{"class":76},[66,24654,24655],{"class":68,"line":4401},[66,24656,24439],{"class":758},[66,24658,24659,24661,24663,24665],{"class":68,"line":4415},[66,24660,20322],{"class":3793},[66,24662,19535],{"class":76},[66,24664,13357],{"class":3793},[66,24666,7448],{"class":76},[66,24668,24669],{"class":68,"line":4423},[66,24670,24671],{"class":758},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[66,24673,24674],{"class":68,"line":4428},[66,24675,3407],{"class":76},[66,24677,24678,24680,24682],{"class":68,"line":4434},[66,24679,2003],{"class":72},[66,24681,3803],{"class":3793},[66,24683,1253],{"class":76},[66,24685,24686],{"class":68,"line":4440},[66,24687,3388],{"class":76},[66,24689,24690,24692],{"class":68,"line":4445},[66,24691,7445],{"class":3793},[66,24693,7448],{"class":76},[66,24695,24696],{"class":68,"line":9759},[66,24697,3407],{"class":76},[484,24699,24701],{"id":24700},"_83c对象模型和this指针","8.3C++对象模型和this指针",[23801,24703,24705],{"id":24704},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,24707,24708],{},"在c++中，类内的成员变量和成员函数分开存储",[19,24710,24711],{},"只有非静态成员变量才属于类的对象上",[24713,24714,24716],"h5",{"id":24715},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[57,24718,24720],{"className":1989,"code":24719,"language":1991,"meta":62,"style":62},"#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",[23,24721,24722,24729,24739,24745,24749,24753,24757,24765,24769,24773,24796,24800,24808,24812,24818],{"__ignoreMap":62},[66,24723,24724,24726],{"class":68,"line":69},[66,24725,3779],{"class":72},[66,24727,24728],{"class":356},"\u003Ciostraem>\n",[66,24730,24731,24733,24735,24737],{"class":68,"line":80},[66,24732,3787],{"class":72},[66,24734,3790],{"class":72},[66,24736,3794],{"class":3793},[66,24738,3135],{"class":76},[66,24740,24741,24743],{"class":68,"line":112},[66,24742,16499],{"class":72},[66,24744,16974],{"class":3793},[66,24746,24747],{"class":68,"line":129},[66,24748,3388],{"class":76},[66,24750,24751],{"class":68,"line":138},[66,24752,109],{"emptyLinePlaceholder":108},[66,24754,24755],{"class":68,"line":227},[66,24756,5812],{"class":76},[66,24758,24759,24761,24763],{"class":68,"line":236},[66,24760,7176],{"class":72},[66,24762,7400],{"class":3793},[66,24764,1253],{"class":76},[66,24766,24767],{"class":68,"line":241},[66,24768,3388],{"class":76},[66,24770,24771],{"class":68,"line":372},[66,24772,17116],{"class":76},[66,24774,24775,24777,24779,24782,24784,24787,24789,24791,24793],{"class":68,"line":377},[66,24776,3393],{"class":76},[66,24778,3019],{"class":72},[66,24780,24781],{"class":356},"\"size of p=\"",[66,24783,3019],{"class":72},[66,24785,24786],{"class":3793},"sizeoif",[66,24788,8350],{"class":76},[66,24790,3019],{"class":72},[66,24792,3083],{"class":76},[66,24794,24795],{"class":758}," \u002F\u002F查看这个空类的占用的内存空间\n",[66,24797,24798],{"class":68,"line":392},[66,24799,3407],{"class":76},[66,24801,24802,24804,24806],{"class":68,"line":405},[66,24803,2003],{"class":72},[66,24805,3803],{"class":3793},[66,24807,1253],{"class":76},[66,24809,24810],{"class":68,"line":418},[66,24811,3388],{"class":76},[66,24813,24814,24816],{"class":68,"line":430},[66,24815,7445],{"class":3793},[66,24817,7448],{"class":76},[66,24819,24820],{"class":68,"line":438},[66,24821,3407],{"class":76},[19,24823,24824],{},"输出结果为：size of p=1",[19,24826,24827],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,24829,24830],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[24713,24832,24834],{"id":24833},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[57,24836,24838],{"className":1989,"code":24837,"language":1991,"meta":62,"style":62},"#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",[23,24839,24840,24846,24856,24864,24868,24877,24881,24889,24893,24897,24916,24920,24924,24932,24936,24942],{"__ignoreMap":62},[66,24841,24842,24844],{"class":68,"line":69},[66,24843,3779],{"class":72},[66,24845,3782],{"class":356},[66,24847,24848,24850,24852,24854],{"class":68,"line":80},[66,24849,3787],{"class":72},[66,24851,3790],{"class":72},[66,24853,3794],{"class":3793},[66,24855,3135],{"class":76},[66,24857,24858,24860,24862],{"class":68,"line":112},[66,24859,16499],{"class":72},[66,24861,17372],{"class":3793},[66,24863,4498],{"class":76},[66,24865,24866],{"class":68,"line":129},[66,24867,3388],{"class":76},[66,24869,24870,24872,24874],{"class":68,"line":138},[66,24871,3814],{"class":72},[66,24873,17251],{"class":76},[66,24875,24876],{"class":758},"\u002F\u002F非静态成员变量\n",[66,24878,24879],{"class":68,"line":227},[66,24880,5812],{"class":76},[66,24882,24883,24885,24887],{"class":68,"line":236},[66,24884,7176],{"class":72},[66,24886,7400],{"class":3793},[66,24888,1253],{"class":76},[66,24890,24891],{"class":68,"line":241},[66,24892,3388],{"class":76},[66,24894,24895],{"class":68,"line":372},[66,24896,17116],{"class":76},[66,24898,24899,24901,24903,24905,24907,24909,24911,24913],{"class":68,"line":377},[66,24900,3393],{"class":76},[66,24902,3019],{"class":72},[66,24904,24781],{"class":356},[66,24906,3214],{"class":72},[66,24908,8350],{"class":76},[66,24910,3019],{"class":72},[66,24912,3083],{"class":76},[66,24914,24915],{"class":758}," \u002F\u002F查看不是空对象时占用多少内存\n",[66,24917,24918],{"class":68,"line":392},[66,24919,109],{"emptyLinePlaceholder":108},[66,24921,24922],{"class":68,"line":405},[66,24923,3407],{"class":76},[66,24925,24926,24928,24930],{"class":68,"line":418},[66,24927,2003],{"class":72},[66,24929,3803],{"class":3793},[66,24931,1253],{"class":76},[66,24933,24934],{"class":68,"line":430},[66,24935,3388],{"class":76},[66,24937,24938,24940],{"class":68,"line":438},[66,24939,7445],{"class":3793},[66,24941,7448],{"class":76},[66,24943,24944],{"class":68,"line":465},[66,24945,3407],{"class":76},[19,24947,24948],{},"输出结果：size of p=4",[19,24950,24951],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[31,24953,24954],{},[34,24955,24956],{},"如果加上非静态成员变量，Person类修改如下",[57,24958,24960],{"className":1989,"code":24959,"language":1991,"meta":62,"style":62},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[23,24961,24962,24968,24972,24978,24986,24990,24995],{"__ignoreMap":62},[66,24963,24964,24966],{"class":68,"line":69},[66,24965,16499],{"class":72},[66,24967,16974],{"class":3793},[66,24969,24970],{"class":68,"line":80},[66,24971,3388],{"class":76},[66,24973,24974,24976],{"class":68,"line":112},[66,24975,3814],{"class":72},[66,24977,23195],{"class":76},[66,24979,24980,24982,24984],{"class":68,"line":129},[66,24981,12826],{"class":72},[66,24983,345],{"class":72},[66,24985,23202],{"class":76},[66,24987,24988],{"class":68,"line":138},[66,24989,5812],{"class":76},[66,24991,24992],{"class":68,"line":227},[66,24993,24994],{"class":758},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[66,24996,24997,24999,25001,25003,25005,25007],{"class":68,"line":236},[66,24998,2003],{"class":72},[66,25000,17372],{"class":3793},[66,25002,24215],{"class":76},[66,25004,99],{"class":72},[66,25006,2183],{"class":102},[66,25008,3135],{"class":76},[19,25010,25011],{},"输出结果：4",[19,25013,25014],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[31,25016,25017],{"start":80},[34,25018,25019],{},"加上非静态成员函数",[57,25021,25023],{"className":1989,"code":25022,"language":1991,"meta":62,"style":62},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[23,25024,25025,25032,25036,25042,25050,25054,25058,25062],{"__ignoreMap":62},[66,25026,25027,25029],{"class":68,"line":69},[66,25028,16499],{"class":72},[66,25030,25031],{"class":3793},"  Person\n",[66,25033,25034],{"class":68,"line":80},[66,25035,3388],{"class":76},[66,25037,25038,25040],{"class":68,"line":112},[66,25039,3814],{"class":72},[66,25041,23195],{"class":76},[66,25043,25044,25046,25048],{"class":68,"line":129},[66,25045,16713],{"class":72},[66,25047,13191],{"class":3793},[66,25049,1253],{"class":76},[66,25051,25052],{"class":68,"line":138},[66,25053,3859],{"class":76},[66,25055,25056],{"class":68,"line":227},[66,25057,109],{"emptyLinePlaceholder":108},[66,25059,25060],{"class":68,"line":236},[66,25061,4013],{"class":76},[66,25063,25064],{"class":68,"line":241},[66,25065,5812],{"class":76},[19,25067,25068],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[31,25070,25071],{"start":112},[34,25072,25073],{},"加上静态成员函数",[57,25075,25077],{"className":1989,"code":25076,"language":1991,"meta":62,"style":62},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[23,25078,25079,25085,25089,25095,25103,25107,25111,25115,25126,25130,25134,25138],{"__ignoreMap":62},[66,25080,25081,25083],{"class":68,"line":69},[66,25082,16499],{"class":72},[66,25084,25031],{"class":3793},[66,25086,25087],{"class":68,"line":80},[66,25088,3388],{"class":76},[66,25090,25091,25093],{"class":68,"line":112},[66,25092,3814],{"class":72},[66,25094,23195],{"class":76},[66,25096,25097,25099,25101],{"class":68,"line":129},[66,25098,16713],{"class":72},[66,25100,13191],{"class":3793},[66,25102,1253],{"class":76},[66,25104,25105],{"class":68,"line":138},[66,25106,3859],{"class":76},[66,25108,25109],{"class":68,"line":227},[66,25110,109],{"emptyLinePlaceholder":108},[66,25112,25113],{"class":68,"line":236},[66,25114,4013],{"class":76},[66,25116,25117,25119,25121,25124],{"class":68,"line":241},[66,25118,12826],{"class":72},[66,25120,24370],{"class":72},[66,25122,25123],{"class":3793}," func1",[66,25125,1253],{"class":76},[66,25127,25128],{"class":68,"line":372},[66,25129,3859],{"class":76},[66,25131,25132],{"class":68,"line":377},[66,25133,109],{"emptyLinePlaceholder":108},[66,25135,25136],{"class":68,"line":392},[66,25137,4013],{"class":76},[66,25139,25140],{"class":68,"line":405},[66,25141,5812],{"class":76},[19,25143,25011],{},[19,25145,25146],{},"解释：静态成员函数也不属于类上",[1903,25148,9485],{},{"title":62,"searchDepth":80,"depth":80,"links":25150},[25151,25157],{"id":16450,"depth":80,"text":16451,"children":25152},[25153,25154,25155,25156],{"id":16454,"depth":112,"text":16455},{"id":17177,"depth":112,"text":17178},{"id":17349,"depth":112,"text":17350},{"id":17808,"depth":112,"text":17809},{"id":20180,"depth":80,"text":20181,"children":25158},[25159,25160,25161,25162,25163,25164,25165,25166,25167],{"id":20192,"depth":112,"text":20193},{"id":20485,"depth":112,"text":20486},{"id":20976,"depth":112,"text":20977},{"id":22073,"depth":112,"text":22074},{"id":22496,"depth":112,"text":22497},{"id":22975,"depth":112,"text":22976},{"id":23350,"depth":112,"text":23351},{"id":23763,"depth":112,"text":23764},{"id":24700,"depth":112,"text":24701},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":16415,"description":25168},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":25175,"title":1991,"body":25176,"description":1926,"extension":1927,"meta":25180,"navigation":108,"path":25182,"seo":25183,"stem":25184,"__hash__":25185},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":25177,"toc":25178},[],{"title":62,"searchDepth":80,"depth":80,"links":25179},[],{"category":25181},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":1991,"description":1926},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":25187,"title":25188,"body":25189,"description":62,"extension":1927,"meta":25780,"navigation":108,"path":25781,"seo":25782,"stem":25783,"__hash__":25784},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":25190,"toc":25762},[25191,25194,25198,25201,25204,25207,25225,25230,25233,25236,25239,25242,25247,25250,25255,25258,25261,25265,25268,25271,25277,25280,25298,25302,25306,25309,25314,25317,25321,25324,25337,25340,25344,25347,25350,25353,25378,25381,25390,25401,25416,25448,25452,25459,25467,25471,25474,25477,25482,25486,25489,25492,25497,25500,25504,25507,25510,25515,25518,25522,25527,25531,25598,25602,25605,25608,25611,25614,25617,25623,25644,25647,25661,25670,25674,25677,25680,25685,25688,25693,25698,25701,25704,25709,25714,25717,25722,25727,25730,25735,25740,25743,25746,25751,25754,25759],[10,25192,25188],{"id":25193},"_1强化学习基本认识",[14,25195,25197],{"id":25196},"_11什么是强化学习","1.1.什么是强化学习",[19,25199,25200],{},"强化学习有两部分组成：智能体和环境；",[19,25202,25203],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,25205,25206],{},"强化学习与监督学习的区别:",[31,25208,25209,25212,25215,25218],{},[34,25210,25211],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[34,25213,25214],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[34,25216,25217],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[34,25219,25220,25221,25224],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[2141,25222,25223],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,25226,25227],{},[3304,25228],{"alt":62,"src":25229},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,25231,25232],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,25234,25235],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,25237,25238],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,25240,25241],{},"获取奖励",[19,25243,25244],{},[3304,25245],{"alt":62,"src":25246},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,25248,25249],{},"强化学习可以分成标准强化学习和深度强化学习",[19,25251,25252],{},[3304,25253],{"alt":62,"src":25254},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,25256,25257],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,25259,25260],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,25262,25264],{"id":25263},"_12强化学习应用场景","1.2.强化学习应用场景",[19,25266,25267],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,25269,25270],{},"具身智能中的应用",[19,25272,25273,25276],{},[2141,25274,25275],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,25278,25279],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,25281,25282,25283,25286,25287,25290,25291,25294,25295],{},"机器人是",[2141,25284,25285],{},"躯体","，深度学习是",[2141,25288,25289],{},"神经元****网络","，VLA是",[2141,25292,25293],{},"通用的行为逻辑","，而强化学习是",[2141,25296,25297],{},"教练",[14,25299,25301],{"id":25300},"_13序列决策","1.3.序列决策",[484,25303,25305],{"id":25304},"_131智能体与环境","1.3.1.智能体与环境",[19,25307,25308],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,25310,25311],{},[3304,25312],{"alt":62,"src":25313},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,25315,25316],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[484,25318,25320],{"id":25319},"_132奖励","1.3.2.奖励",[19,25322,25323],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,25325,25326,25327,25336],{},"取某个策略的表现如何。强化学习的目的就是",[2141,25328,25329,25330,25335],{},"最大化",[2141,25331,25332],{},[2141,25333,25334],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,25338,25339],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[484,25341,25343],{"id":25342},"_133序列决策","1.3.3.序列决策",[19,25345,25346],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,25348,25349],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,25351,25352],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,25354,25355,25359,25360,25362,25363,25365,25366,25368,25369,15600,25372,15600,25375],{},[25356,25357,25358],"em",{},"Ht"," = ",[25356,25361,2575],{},"1*, a",[25356,25364,304],{},", r",[25356,25367,304],{},", . . . ,* ",[25356,25370,25371],{},"ot",[25356,25373,25374],{},", at ,",[25356,25376,25377],{},"rt",[19,25379,25380],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,25382,25383,25359,25386,3492,25388,2413],{},[25356,25384,25385],{},"st",[25356,25387,445],{},[25356,25389,25358],{},[19,25391,25392,25393,25396,25397,25400],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[2141,25394,25395],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[2141,25398,25399],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,25402,25403,25404,25407,25408,25411,25412,25415],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[2141,25405,25406],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[2141,25409,25410],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[25356,25413,25414],{},"S, A, T, R, Ω, O, γ",")。",[19,25417,25418,25419,25421,25422,25424,25425,348,25427,25430,25431,25433,25434,348,25437,25440,25441,25443,25444,25447],{},"其中 ",[25356,25420,2668],{}," 表示状态空间，为隐变量，",[25356,25423,2223],{}," 为动作空间，",[25356,25426,2693],{},[25356,25428,25429],{},"s ′ |s, a",") 为状态转移概率，",[25356,25432,2643],{}," 为奖励函数，",[25356,25435,25436],{},"Ω",[25356,25438,25439],{},"o|s, a",") 为观测概率，",[25356,25442,2569],{}," 为观测空间，",[25356,25445,25446],{},"γ"," 为折扣因子。",[14,25449,25451],{"id":25450},"_14动作空间","1.4.动作空间",[19,25453,25454,25455,25458],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[2141,25456,25457],{},"动作空间"," ，动作空间分为:",[31,25460,25461,25464],{},[34,25462,25463],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[34,25465,25466],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,25468,25470],{"id":25469},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,25472,25473],{},"由策略、价值函数、模型三部分组成",[19,25475,25476],{},"这三者组成马尔可夫决策过程",[19,25478,25479],{},[3304,25480],{"alt":62,"src":25481},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[484,25483,25485],{"id":25484},"_151策略","1.5.1.策略",[19,25487,25488],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,25490,25491],{},"策略可分为两种：",[19,25493,25494],{},[3304,25495],{"alt":62,"src":25496},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,25498,25499],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[484,25501,25503],{"id":25502},"_152价值函数","1.5.2.价值函数",[19,25505,25506],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,25508,25509],{},"价值函数中有一个折扣因子，类似于存款利息",[19,25511,25512],{},[3304,25513],{"alt":62,"src":25514},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,25516,25517],{},"进入某个状态采取的最优动作可以通过Q函数得到",[484,25519,25521],{"id":25520},"_153模型","1.5.3.模型",[19,25523,25524],{},[3304,25525],{"alt":62,"src":25526},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,25528,25530],{"id":25529},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[2129,25532,25533,25544],{},[2132,25534,25535],{},[2135,25536,25537,25541],{},[2138,25538,25540],{"align":25539},"left","类型",[2138,25542,25543],{"align":25539},"特点",[2176,25545,25546,25556,25566,25576,25588],{},[2135,25547,25548,25553],{},[2181,25549,25550],{"align":25539},[2141,25551,25552],{},"基于价值的智能体",[2181,25554,25555],{"align":25539},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[2135,25557,25558,25563],{},[2181,25559,25560],{"align":25539},[2141,25561,25562],{},"基于策略的智能体",[2181,25564,25565],{"align":25539},"直接学习策略，没有学习价值函数",[2135,25567,25568,25573],{},[2181,25569,25570],{"align":25539},[2141,25571,25572],{},"演员-评论员智能体",[2181,25574,25575],{"align":25539},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[2135,25577,25578,25583],{},[2181,25579,25580],{"align":25539},[2141,25581,25582],{},"有模型强化学习智能体",[2181,25584,25585],{"align":25539},[3304,25586],{"alt":62,"src":25587},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[2135,25589,25590,25595],{},[2181,25591,25592],{"align":25539},[2141,25593,25594],{},"免模型强化学习智能体",[2181,25596,25597],{"align":25539},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,25599,25601],{"id":25600},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,25603,25604],{},"学习和规划是序列决策的两个基本问题",[19,25606,25607],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,25609,25610],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,25612,25613],{},"强化学习用到的库：Gym",[19,25615,25616],{},"Gym可以检验强化学习算法的优劣",[19,25618,25619,25622],{},[2141,25620,25621],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[57,25624,25628],{"className":25625,"code":25626,"language":25627,"meta":62,"style":62},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[23,25629,25630],{"__ignoreMap":62},[66,25631,25632,25635,25638,25641],{"class":68,"line":69},[66,25633,25634],{"class":3793},"pip",[66,25636,25637],{"class":356}," install",[66,25639,25640],{"class":356}," gym==",[66,25642,25643],{"class":102},"0.25.2\n",[19,25645,25646],{},"显示图形界面需要",[57,25648,25650],{"className":25625,"code":25649,"language":25627,"meta":62,"style":62},"pip install pygame\n",[23,25651,25652],{"__ignoreMap":62},[66,25653,25654,25656,25658],{"class":68,"line":69},[66,25655,25634],{"class":3793},[66,25657,25637],{"class":356},[66,25659,25660],{"class":356}," pygame\n",[19,25662,25663,25664],{},"有关Gym库的相关文档介绍：",[2229,25665,25669],{"href":25666,"rel":25667},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[25668],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,25671,25673],{"id":25672},"_18一些补充基础概念","1.8.一些补充基础概念",[19,25675,25676],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,25678,25679],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,25681,25682],{},[3304,25683],{"alt":62,"src":25684},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,25686,25687],{},"折扣率需要自己来设定",[19,25689,25690],{},[3304,25691],{"alt":62,"src":25692},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[31,25694,25695],{},[34,25696,25697],{},"状态转移函数：",[19,25699,25700],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,25702,25703],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,25705,25706],{},[3304,25707],{"alt":62,"src":25708},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[31,25710,25711],{"start":80},[34,25712,25713],{},"动作价值函数：",[19,25715,25716],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,25718,25719],{},[3304,25720],{"alt":62,"src":25721},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[31,25723,25724],{"start":112},[34,25725,25726],{},"最优动作价值函数：",[19,25728,25729],{},"这个函数是对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,25731,25732],{},[3304,25733],{"alt":62,"src":25734},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[31,25736,25737],{"start":129},[34,25738,25739],{},"状态价值函数:",[19,25741,25742],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,25744,25745],{},"它衡量的是“一个具体动作”的长期价值",[19,25747,25748],{},[3304,25749],{"alt":62,"src":25750},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,25752,25753],{},"几个价值函数之间的比较：",[19,25755,25756],{},[3304,25757],{"alt":62,"src":25758},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[1903,25760,25761],{},"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":62,"searchDepth":80,"depth":80,"links":25763},[25764,25765,25766,25771,25772,25777,25778,25779],{"id":25196,"depth":80,"text":25197},{"id":25263,"depth":80,"text":25264},{"id":25300,"depth":80,"text":25301,"children":25767},[25768,25769,25770],{"id":25304,"depth":112,"text":25305},{"id":25319,"depth":112,"text":25320},{"id":25342,"depth":112,"text":25343},{"id":25450,"depth":80,"text":25451},{"id":25469,"depth":80,"text":25470,"children":25773},[25774,25775,25776],{"id":25484,"depth":112,"text":25485},{"id":25502,"depth":112,"text":25503},{"id":25520,"depth":112,"text":25521},{"id":25529,"depth":80,"text":25530},{"id":25600,"depth":80,"text":25601},{"id":25672,"depth":80,"text":25673},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":25188,"description":62},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":25786,"title":25787,"body":25788,"description":25795,"extension":1927,"meta":25806,"navigation":108,"path":25807,"seo":25808,"stem":25809,"__hash__":25810},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":25789,"toc":25804},[25790,25793,25796,25801],[10,25791,25787],{"id":25792},"_2马尔可夫决策过程",[19,25794,25795],{},"这是强化学习的基本框架",[19,25797,25798],{},[3304,25799],{"alt":62,"src":25800},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,25802,25803],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":62,"searchDepth":80,"depth":80,"links":25805},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":25787,"description":25795},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":25812,"title":25813,"body":25814,"description":62,"extension":1927,"meta":25930,"navigation":108,"path":25931,"seo":25932,"stem":25933,"__hash__":25934},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":25815,"toc":25925},[25816,25819,25823,25826,25831,25836,25839,25844,25847,25852,25855,25859,25864,25867,25872,25877,25882,25885,25889,25894,25897,25902,25907,25912,25917,25920],[10,25817,25813],{"id":25818},"_3动作价值函数",[14,25820,25822],{"id":25821},"_31dqn","3.1.DQN",[19,25824,25825],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,25827,25828],{},[3304,25829],{"alt":62,"src":25830},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,25832,25833],{},[3304,25834],{"alt":62,"src":25835},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,25837,25838],{},"DQN算法的描述：",[19,25840,25841],{},[3304,25842],{"alt":62,"src":25843},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,25845,25846],{},"这里的Dense指的是全连接层",[19,25848,25849],{},[3304,25850],{"alt":62,"src":25851},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,25853,25854],{},"当前观测的状态为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,25856,25858],{"id":25857},"_32dqn的举例","3.2.DQN的举例",[19,25860,25861],{},[3304,25862],{"alt":62,"src":25863},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,25865,25866],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,25868,25869],{},[3304,25870],{"alt":62,"src":25871},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,25873,25874],{},[3304,25875],{"alt":62,"src":25876},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,25878,25879],{},[3304,25880],{"alt":62,"src":25881},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,25883,25884],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,25886,25888],{"id":25887},"_33td算法","3.3.TD算法",[19,25890,25891],{},[3304,25892],{"alt":62,"src":25893},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,25895,25896],{},"强化学习TD算法公式的粗略解释：",[19,25898,25899],{},[3304,25900],{"alt":62,"src":25901},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,25903,25904],{},[3304,25905],{"alt":62,"src":25906},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,25908,25909],{},[3304,25910],{"alt":62,"src":25911},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,25913,25914],{},[3304,25915],{"alt":62,"src":25916},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,25918,25919],{},"TD算法总结：",[19,25921,25922],{},[3304,25923],{"alt":62,"src":25924},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":62,"searchDepth":80,"depth":80,"links":25926},[25927,25928,25929],{"id":25821,"depth":80,"text":25822},{"id":25857,"depth":80,"text":25858},{"id":25887,"depth":80,"text":25888},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":25813,"description":62},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":25936,"title":25937,"body":25938,"description":62,"extension":1927,"meta":26171,"navigation":108,"path":26172,"seo":26173,"stem":26174,"__hash__":26175},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":25939,"toc":26167},[25940,25943,25947,25950,25953,25958,25963,25966,25971,25976,25979,25984,25987,25992,25995,26000,26003,26008,26011,26016,26021,26024,26029,26032,26035,26040,26043,26048,26053,26057,26060,26063,26068,26073,26076,26081,26086,26089,26094,26097,26100,26105,26108,26113,26116,26121,26126,26129,26134,26139,26142,26147,26150,26155,26158],[10,25941,25937],{"id":25942},"_4策略学习",[14,25944,25946],{"id":25945},"_41概念描述","4.1.概念描述",[19,25948,25949],{},"用神经网络（策略网络）近似策略函数",[19,25951,25952],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,25954,25955],{},[3304,25956],{"alt":62,"src":25957},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,25959,25960],{},[3304,25961],{"alt":62,"src":25962},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,25964,25965],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,25967,25968],{},[3304,25969],{"alt":62,"src":25970},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,25972,25973],{},[3304,25974],{"alt":62,"src":25975},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,25977,25978],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,25980,25981],{},[3304,25982],{"alt":62,"src":25983},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,25985,25986],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,25988,25989],{},[3304,25990],{"alt":62,"src":25991},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,25993,25994],{},"改进theta要用到策略梯度算法",[19,25996,25997],{},[3304,25998],{"alt":62,"src":25999},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,26001,26002],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,26004,26005],{},[3304,26006],{"alt":62,"src":26007},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,26009,26010],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,26012,26013],{},[3304,26014],{"alt":62,"src":26015},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,26017,26018],{},[3304,26019],{"alt":62,"src":26020},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,26022,26023],{},"梯度公式总结：",[19,26025,26026],{},[3304,26027],{"alt":62,"src":26028},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,26030,26031],{},"两个公式的分别应用场景：",[19,26033,26034],{},"对于离散的动作：",[19,26036,26037],{},[3304,26038],{"alt":62,"src":26039},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,26041,26042],{},"对于连续的动作：",[19,26044,26045],{},[3304,26046],{"alt":62,"src":26047},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,26049,26050],{},[3304,26051],{"alt":62,"src":26052},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,26054,26056],{"id":26055},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,26058,26059],{},"使用蒙特卡洛来近似计算策略梯度",[19,26061,26062],{},"蒙特卡洛法的解释如下：",[19,26064,26065],{},[3304,26066],{"alt":62,"src":26067},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,26069,26070],{},[3304,26071],{"alt":62,"src":26072},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,26074,26075],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[31,26077,26078],{},[34,26079,26080],{},"方法一：reinforce算法",[19,26082,26083],{},[3304,26084],{"alt":62,"src":26085},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,26087,26088],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[31,26090,26091],{"start":80},[34,26092,26093],{},"方法二：actor-critic算法",[19,26095,26096],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,26098,26099],{},"两个网络的构建：",[19,26101,26102],{},[3304,26103],{"alt":62,"src":26104},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,26106,26107],{},"actor网路：",[19,26109,26110],{},[3304,26111],{"alt":62,"src":26112},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,26114,26115],{},"critic网络",[19,26117,26118],{},[3304,26119],{"alt":62,"src":26120},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[31,26122,26123],{"start":112},[34,26124,26125],{},"网络的训练",[19,26127,26128],{},"网络描述",[19,26130,26131],{},[3304,26132],{"alt":62,"src":26133},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,26135,26136],{},[3304,26137],{"alt":62,"src":26138},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,26140,26141],{},"TD算法更新梯度：",[19,26143,26144],{},[3304,26145],{"alt":62,"src":26146},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,26148,26149],{},"策略网络更新梯度：",[19,26151,26152],{},[3304,26153],{"alt":62,"src":26154},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,26156,26157],{},"训练整个流程的具体描述：",[19,26159,26160,26163,26164],{},[3304,26161],{"alt":62,"src":26162},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[3304,26165],{"alt":62,"src":26166},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":62,"searchDepth":80,"depth":80,"links":26168},[26169,26170],{"id":25945,"depth":80,"text":25946},{"id":26055,"depth":80,"text":26056},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":25937,"description":62},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":26177,"title":26178,"body":26179,"description":26186,"extension":1927,"meta":26236,"navigation":108,"path":26237,"seo":26238,"stem":26239,"__hash__":26240},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":26180,"toc":26232},[26181,26184,26187,26191,26194,26199,26203,26206,26211,26214,26219,26224,26227],[10,26182,26178],{"id":26183},"_5alphago算法",[19,26185,26186],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,26188,26190],{"id":26189},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,26192,26193],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,26195,26196],{},[3304,26197],{"alt":62,"src":26198},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,26200,26202],{"id":26201},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,26204,26205],{},"采用强化学习的方式训练策略网络",[19,26207,26208],{},[3304,26209],{"alt":62,"src":26210},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,26212,26213],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,26215,26216],{},[3304,26217],{"alt":62,"src":26218},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,26220,26221],{},[3304,26222],{"alt":62,"src":26223},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,26225,26226],{},"强化学习训练策略网络的总结：",[19,26228,26229],{},[3304,26230],{"alt":62,"src":26231},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":62,"searchDepth":80,"depth":80,"links":26233},[26234,26235],{"id":26189,"depth":80,"text":26190},{"id":26201,"depth":80,"text":26202},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":26178,"description":26186},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":26242,"title":26243,"body":26244,"description":26251,"extension":1927,"meta":26254,"navigation":108,"path":26255,"seo":26256,"stem":26257,"__hash__":26258},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":26245,"toc":26252},[26246,26249],[10,26247,26243],{"id":26248},"_6价值网络",[19,26250,26251],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":62,"searchDepth":80,"depth":80,"links":26253},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":26243,"description":26251},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":26260,"title":26261,"body":26262,"description":26266,"extension":1927,"meta":26267,"navigation":108,"path":26268,"seo":26269,"stem":26270,"__hash__":26271},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":26263,"toc":26264},[],{"title":62,"searchDepth":80,"depth":80,"links":26265},[],"记录自己的强化学习笔记。",{"category":25181},"\u002Fwiki\u002F2025-12-04",{"title":26261,"description":26266},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":26273,"title":26274,"body":26275,"description":1926,"extension":1927,"meta":26314,"navigation":108,"path":26315,"seo":26316,"stem":26317,"__hash__":26318},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":26276,"toc":26312},[26277,26280,26283,26289,26292,26298,26301,26306,26309],[10,26278,26274],{"id":26279},"_1-项目概览与官方资源",[19,26281,26282],{},"官方文档：",[19,26284,26285],{},[2229,26286,26287],{"href":26287,"rel":26288},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[25668],[19,26290,26291],{},"官方代码仓库：",[19,26293,26294],{},[2229,26295,26296],{"href":26296,"rel":26297},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[25668],[19,26299,26300],{},"复现大体流程：",[19,26302,26303],{},[3304,26304],{"alt":62,"src":26305},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,26307,26308],{},"本教程的目标是打通这条链路：",[19,26310,26311],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":62,"searchDepth":80,"depth":80,"links":26313},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":26274,"description":1926},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":26320,"title":26321,"body":26322,"description":1926,"extension":1927,"meta":26437,"navigation":108,"path":26438,"seo":26439,"stem":26440,"__hash__":26441},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":26323,"toc":26432},[26324,26327,26331,26334,26341,26345,26348,26357,26367,26371,26401,26404,26429],[10,26325,26321],{"id":26326},"_2-环境准备与设备连接",[14,26328,26330],{"id":26329},"_21-系统与环境","2.1 系统与环境",[19,26332,26333],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,26335,26336,26337,26340],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[23,26338,26339],{},"lerobot"," 依赖。",[14,26342,26344],{"id":26343},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,26346,26347],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[57,26349,26351],{"className":25625,"code":26350,"language":25627,"meta":62,"style":62},"lerobot-find-out\n",[23,26352,26353],{"__ignoreMap":62},[66,26354,26355],{"class":68,"line":69},[66,26356,26350],{"class":3793},[19,26358,26359,26360,2204,26363,26366],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[23,26361,26362],{},"\u002Fdev\u002FttyACM0",[23,26364,26365],{},"\u002Fdev\u002FttyACM1","）。",[14,26368,26370],{"id":26369},"_23-串口授权","2.3 串口授权",[57,26372,26374],{"className":25625,"code":26373,"language":25627,"meta":62,"style":62},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[23,26375,26376,26390],{"__ignoreMap":62},[66,26377,26378,26381,26384,26387],{"class":68,"line":69},[66,26379,26380],{"class":3793},"sudo",[66,26382,26383],{"class":356}," chmod",[66,26385,26386],{"class":102}," 666",[66,26388,26389],{"class":356}," \u002Fdev\u002FttyACM0\n",[66,26391,26392,26394,26396,26398],{"class":68,"line":80},[66,26393,26380],{"class":3793},[66,26395,26383],{"class":356},[66,26397,26386],{"class":102},[66,26399,26400],{"class":356}," \u002Fdev\u002FttyACM1\n",[19,26402,26403],{},"说明：",[2982,26405,26406,26411,26417,26426],{},[34,26407,26408,26410],{},[23,26409,26380],{},"：以 root 权限执行命令。",[34,26412,26413,26416],{},[23,26414,26415],{},"chmod","：修改设备节点权限。",[34,26418,26419,807,26422,26425],{},[23,26420,26421],{},"666",[23,26423,26424],{},"rw-rw-rw-","，所有用户可读写。",[34,26427,26428],{},"串口号必须替换为你机器上的真实端口。",[1903,26430,26431],{},"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":62,"searchDepth":80,"depth":80,"links":26433},[26434,26435,26436],{"id":26329,"depth":80,"text":26330},{"id":26343,"depth":80,"text":26344},{"id":26369,"depth":80,"text":26370},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":26321,"description":1926},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":26443,"title":26444,"body":26445,"description":1926,"extension":1927,"meta":26606,"navigation":108,"path":26607,"seo":26608,"stem":26609,"__hash__":26610},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":26446,"toc":26602},[26447,26451,26455,26461,26464,26521,26524,26528,26531,26599],[10,26448,26450],{"id":26449},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,26452,26454],{"id":26453},"_31-配置电机-id","3.1 配置电机 ID",[19,26456,26457,26458,26460],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[23,26459,304],{},"，需要改成机械臂链路里不冲突的编号。",[19,26462,26463],{},"方式一：用 LeRobot 命令逐步写入。",[57,26465,26467],{"className":25625,"code":26466,"language":25627,"meta":62,"style":62},"# 主臂舵机配置 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",[23,26468,26469,26474,26482,26489,26494,26498,26503,26509,26516],{"__ignoreMap":62},[66,26470,26471],{"class":68,"line":69},[66,26472,26473],{"class":758},"# 主臂舵机配置 ID\n",[66,26475,26476,26479],{"class":68,"line":80},[66,26477,26478],{"class":3793},"lerobot-setup-motors",[66,26480,26481],{"class":102}," \\\n",[66,26483,26484,26487],{"class":68,"line":112},[66,26485,26486],{"class":102},"  --teleop.type=so101_leader",[66,26488,26481],{"class":102},[66,26490,26491],{"class":68,"line":129},[66,26492,26493],{"class":102},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[66,26495,26496],{"class":68,"line":138},[66,26497,109],{"emptyLinePlaceholder":108},[66,26499,26500],{"class":68,"line":227},[66,26501,26502],{"class":758},"# 从臂舵机配置 ID\n",[66,26504,26505,26507],{"class":68,"line":236},[66,26506,26478],{"class":3793},[66,26508,26481],{"class":102},[66,26510,26511,26514],{"class":68,"line":241},[66,26512,26513],{"class":102},"  --robot.type=so101_follower",[66,26515,26481],{"class":102},[66,26517,26518],{"class":68,"line":372},[66,26519,26520],{"class":102},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,26522,26523],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,26525,26527],{"id":26526},"_32-机械臂校准","3.2 机械臂校准",[19,26529,26530],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[57,26532,26534],{"className":25625,"code":26533,"language":25627,"meta":62,"style":62},"# 主臂校准\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",[23,26535,26536,26541,26548,26554,26561,26566,26570,26575,26581,26587,26594],{"__ignoreMap":62},[66,26537,26538],{"class":68,"line":69},[66,26539,26540],{"class":758},"# 主臂校准\n",[66,26542,26543,26546],{"class":68,"line":80},[66,26544,26545],{"class":3793},"lerobot-calibrate",[66,26547,26481],{"class":102},[66,26549,26550,26552],{"class":68,"line":112},[66,26551,26486],{"class":102},[66,26553,26481],{"class":102},[66,26555,26556,26559],{"class":68,"line":129},[66,26557,26558],{"class":102},"  --teleop.port=\u002Fdev\u002FttyACM0",[66,26560,26481],{"class":102},[66,26562,26563],{"class":68,"line":138},[66,26564,26565],{"class":102},"  --teleop.id=my_awesome_leader_arm\n",[66,26567,26568],{"class":68,"line":227},[66,26569,109],{"emptyLinePlaceholder":108},[66,26571,26572],{"class":68,"line":236},[66,26573,26574],{"class":758},"# 从臂校准\n",[66,26576,26577,26579],{"class":68,"line":241},[66,26578,26545],{"class":3793},[66,26580,26481],{"class":102},[66,26582,26583,26585],{"class":68,"line":372},[66,26584,26513],{"class":102},[66,26586,26481],{"class":102},[66,26588,26589,26592],{"class":68,"line":377},[66,26590,26591],{"class":102},"  --robot.port=\u002Fdev\u002FttyACM1",[66,26593,26481],{"class":102},[66,26595,26596],{"class":68,"line":392},[66,26597,26598],{"class":102},"  --robot.id=my_awesome_follower_arm\n",[1903,26600,26601],{},"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":62,"searchDepth":80,"depth":80,"links":26603},[26604,26605],{"id":26453,"depth":80,"text":26454},{"id":26526,"depth":80,"text":26527},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":26444,"description":1926},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":26612,"title":26613,"body":26614,"description":1926,"extension":1927,"meta":26805,"navigation":108,"path":26806,"seo":26807,"stem":26808,"__hash__":26809},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":26615,"toc":26801},[26616,26619,26623,26670,26674,26687,26750,26753,26798],[10,26617,26613],{"id":26618},"_4-遥操与相机接入",[14,26620,26622],{"id":26621},"_41-不带相机遥操","4.1 不带相机遥操",[57,26624,26626],{"className":25625,"code":26625,"language":25627,"meta":62,"style":62},"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",[23,26627,26628,26635,26641,26647,26654,26660,26666],{"__ignoreMap":62},[66,26629,26630,26633],{"class":68,"line":69},[66,26631,26632],{"class":3793},"lerobot-teleoperate",[66,26634,26481],{"class":102},[66,26636,26637,26639],{"class":68,"line":80},[66,26638,26513],{"class":102},[66,26640,26481],{"class":102},[66,26642,26643,26645],{"class":68,"line":112},[66,26644,26591],{"class":102},[66,26646,26481],{"class":102},[66,26648,26649,26652],{"class":68,"line":129},[66,26650,26651],{"class":102},"  --robot.id=my_awesome_follower_arm",[66,26653,26481],{"class":102},[66,26655,26656,26658],{"class":68,"line":138},[66,26657,26486],{"class":102},[66,26659,26481],{"class":102},[66,26661,26662,26664],{"class":68,"line":227},[66,26663,26558],{"class":102},[66,26665,26481],{"class":102},[66,26667,26668],{"class":68,"line":236},[66,26669,26565],{"class":102},[14,26671,26673],{"id":26672},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[57,26675,26677],{"className":25625,"code":26676,"language":25627,"meta":62,"style":62},"lerobot-find-cameras opencv\n",[23,26678,26679],{"__ignoreMap":62},[66,26680,26681,26684],{"class":68,"line":69},[66,26682,26683],{"class":3793},"lerobot-find-cameras",[66,26685,26686],{"class":356}," opencv\n",[57,26688,26690],{"className":25625,"code":26689,"language":25627,"meta":62,"style":62},"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",[23,26691,26692,26698,26704,26710,26716,26726,26732,26738,26745],{"__ignoreMap":62},[66,26693,26694,26696],{"class":68,"line":69},[66,26695,26632],{"class":3793},[66,26697,26481],{"class":102},[66,26699,26700,26702],{"class":68,"line":80},[66,26701,26513],{"class":102},[66,26703,26481],{"class":102},[66,26705,26706,26708],{"class":68,"line":112},[66,26707,26591],{"class":102},[66,26709,26481],{"class":102},[66,26711,26712,26714],{"class":68,"line":129},[66,26713,26651],{"class":102},[66,26715,26481],{"class":102},[66,26717,26718,26721,26724],{"class":68,"line":138},[66,26719,26720],{"class":102},"  --robot.cameras=",[66,26722,26723],{"class":356},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[66,26725,26481],{"class":102},[66,26727,26728,26730],{"class":68,"line":227},[66,26729,26486],{"class":102},[66,26731,26481],{"class":102},[66,26733,26734,26736],{"class":68,"line":236},[66,26735,26558],{"class":102},[66,26737,26481],{"class":102},[66,26739,26740,26743],{"class":68,"line":241},[66,26741,26742],{"class":102},"  --teleop.id=my_awesome_leader_arm",[66,26744,26481],{"class":102},[66,26746,26747],{"class":68,"line":372},[66,26748,26749],{"class":102},"  --display_data=true\n",[19,26751,26752],{},"相机参数说明：",[2982,26754,26755,26761,26767,26776,26786,26792],{},[34,26756,26757,26760],{},[23,26758,26759],{},"front","：相机名称。",[34,26762,26763,26766],{},[23,26764,26765],{},"type: opencv","：相机驱动类型。",[34,26768,26769,26772,26773,26366],{},[23,26770,26771],{},"index_or_path","：设备编号或设备路径（如 ",[23,26774,26775],{},"\u002Fdev\u002Fvideo4",[34,26777,26778,26781,26782,26785],{},[23,26779,26780],{},"width"," \u002F ",[23,26783,26784],{},"height","：图像分辨率。",[34,26787,26788,26791],{},[23,26789,26790],{},"fps","：采样帧率。",[34,26793,26794,26797],{},[23,26795,26796],{},"--display_data=true","：启用实时可视化。",[1903,26799,26800],{},"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":62,"searchDepth":80,"depth":80,"links":26802},[26803,26804],{"id":26621,"depth":80,"text":26622},{"id":26672,"depth":80,"text":26673},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":26613,"description":1926},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":26811,"title":26812,"body":26813,"description":1926,"extension":1927,"meta":26984,"navigation":108,"path":26985,"seo":26986,"stem":26987,"__hash__":26988},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":26814,"toc":26979},[26815,26819,26823,26828,26833,26836,26878,26884,26888,26936,26941,26945,26948,26956,26961,26966,26971,26976],[10,26816,26818],{"id":26817},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,26820,26822],{"id":26821},"_51-生成访问令牌","5.1 生成访问令牌",[19,26824,26825],{},[3304,26826],{"alt":62,"src":26827},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,26829,26830],{},[3304,26831],{"alt":62,"src":26832},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,26834,26835],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[57,26837,26839],{"className":25625,"code":26838,"language":25627,"meta":62,"style":62},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[23,26840,26841,26854],{"__ignoreMap":62},[66,26842,26843,26846,26849,26851],{"class":68,"line":69},[66,26844,26845],{"class":72},"export",[66,26847,26848],{"class":76}," HF_TOKEN",[66,26850,99],{"class":72},[66,26852,26853],{"class":356},"\"your_huggingface_token\"\n",[66,26855,26856,26859,26862,26865,26868,26870,26873,26875],{"class":68,"line":80},[66,26857,26858],{"class":3793},"hf",[66,26860,26861],{"class":356}," auth",[66,26863,26864],{"class":356}," login",[66,26866,26867],{"class":102}," --token",[66,26869,11531],{"class":356},[66,26871,26872],{"class":76},"$HF_TOKEN",[66,26874,1130],{"class":356},[66,26876,26877],{"class":102}," --add-to-git-credential\n",[19,26879,26880,26883],{},[23,26881,26882],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,26885,26887],{"id":26886},"_52-验证登录","5.2 验证登录",[57,26889,26891],{"className":25625,"code":26890,"language":25627,"meta":62,"style":62},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[23,26892,26893,26923],{"__ignoreMap":62},[66,26894,26895,26898,26900,26903,26905,26907,26910,26913,26916,26919,26921],{"class":68,"line":69},[66,26896,26897],{"class":76},"HF_USER",[66,26899,99],{"class":72},[66,26901,26902],{"class":76},"$(",[66,26904,26858],{"class":3793},[66,26906,26861],{"class":356},[66,26908,26909],{"class":356}," whoami",[66,26911,26912],{"class":72}," |",[66,26914,26915],{"class":3793}," head",[66,26917,26918],{"class":102}," -n",[66,26920,1187],{"class":102},[66,26922,313],{"class":76},[66,26924,26925,26928,26930,26933],{"class":68,"line":80},[66,26926,26927],{"class":102},"echo",[66,26929,11531],{"class":356},[66,26931,26932],{"class":76},"$HF_USER",[66,26934,26935],{"class":356},"\"\n",[19,26937,26938],{},[3304,26939],{"alt":62,"src":26940},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,26942,26944],{"id":26943},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,26946,26947],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[2982,26949,26950,26953],{},[34,26951,26952],{},"Dataset Repo（用于上传演示数据）",[34,26954,26955],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,26957,26958],{},[3304,26959],{"alt":62,"src":26960},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,26962,26963],{},[3304,26964],{"alt":62,"src":26965},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,26967,26968],{},[3304,26969],{"alt":62,"src":26970},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,26972,26973],{},[3304,26974],{"alt":62,"src":26975},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[1903,26977,26978],{},"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":62,"searchDepth":80,"depth":80,"links":26980},[26981,26982,26983],{"id":26821,"depth":80,"text":26822},{"id":26886,"depth":80,"text":26887},{"id":26943,"depth":80,"text":26944},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":26812,"description":1926},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":26990,"title":26991,"body":26992,"description":1926,"extension":1927,"meta":27189,"navigation":108,"path":27190,"seo":27191,"stem":27192,"__hash__":27193},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":26993,"toc":27184},[26994,26998,27002,27098,27106,27111,27115,27131,27134,27138,27181],[10,26995,26997],{"id":26996},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,26999,27001],{"id":27000},"_61-录制示教数据","6.1 录制示教数据",[57,27003,27005],{"className":25625,"code":27004,"language":25627,"meta":62,"style":62},"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",[23,27006,27007,27014,27020,27026,27032,27041,27047,27053,27059,27066,27076,27083,27093],{"__ignoreMap":62},[66,27008,27009,27012],{"class":68,"line":69},[66,27010,27011],{"class":3793},"lerobot-record",[66,27013,26481],{"class":102},[66,27015,27016,27018],{"class":68,"line":80},[66,27017,26513],{"class":102},[66,27019,26481],{"class":102},[66,27021,27022,27024],{"class":68,"line":112},[66,27023,26591],{"class":102},[66,27025,26481],{"class":102},[66,27027,27028,27030],{"class":68,"line":129},[66,27029,26651],{"class":102},[66,27031,26481],{"class":102},[66,27033,27034,27036,27039],{"class":68,"line":138},[66,27035,26720],{"class":102},[66,27037,27038],{"class":356},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[66,27040,26481],{"class":102},[66,27042,27043,27045],{"class":68,"line":227},[66,27044,26486],{"class":102},[66,27046,26481],{"class":102},[66,27048,27049,27051],{"class":68,"line":236},[66,27050,26558],{"class":102},[66,27052,26481],{"class":102},[66,27054,27055,27057],{"class":68,"line":241},[66,27056,26742],{"class":102},[66,27058,26481],{"class":102},[66,27060,27061,27064],{"class":68,"line":372},[66,27062,27063],{"class":102},"  --display_data=true",[66,27065,26481],{"class":102},[66,27067,27068,27071,27074],{"class":68,"line":377},[66,27069,27070],{"class":102},"  --dataset.repo_id=",[66,27072,27073],{"class":356},"\"Embodied-AI-6\u002Fso101_test\"",[66,27075,26481],{"class":102},[66,27077,27078,27081],{"class":68,"line":392},[66,27079,27080],{"class":102},"  --dataset.num_episodes=10",[66,27082,26481],{"class":102},[66,27084,27085,27088,27091],{"class":68,"line":405},[66,27086,27087],{"class":102},"  --dataset.single_task=",[66,27089,27090],{"class":356},"\"Grab the green cube\"",[66,27092,26481],{"class":102},[66,27094,27095],{"class":68,"line":418},[66,27096,27097],{"class":102},"  --resume=true\n",[2982,27099,27100],{},[34,27101,27102,27105],{},[23,27103,27104],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,27107,27108],{},[3304,27109],{"alt":62,"src":27110},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,27112,27114],{"id":27113},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[57,27116,27118],{"className":25625,"code":27117,"language":25627,"meta":62,"style":62},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[23,27119,27120],{"__ignoreMap":62},[66,27121,27122,27125,27128],{"class":68,"line":69},[66,27123,27124],{"class":3793},"rm",[66,27126,27127],{"class":102}," -rf",[66,27129,27130],{"class":356}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,27132,27133],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,27135,27137],{"id":27136},"_63-回放指定-episode","6.3 回放指定 episode",[57,27139,27141],{"className":25625,"code":27140,"language":25627,"meta":62,"style":62},"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",[23,27142,27143,27150,27156,27162,27168,27176],{"__ignoreMap":62},[66,27144,27145,27148],{"class":68,"line":69},[66,27146,27147],{"class":3793},"lerobot-replay",[66,27149,26481],{"class":102},[66,27151,27152,27154],{"class":68,"line":80},[66,27153,26513],{"class":102},[66,27155,26481],{"class":102},[66,27157,27158,27160],{"class":68,"line":112},[66,27159,26591],{"class":102},[66,27161,26481],{"class":102},[66,27163,27164,27166],{"class":68,"line":129},[66,27165,26651],{"class":102},[66,27167,26481],{"class":102},[66,27169,27170,27172,27174],{"class":68,"line":138},[66,27171,27070],{"class":102},[66,27173,27073],{"class":356},[66,27175,26481],{"class":102},[66,27177,27178],{"class":68,"line":227},[66,27179,27180],{"class":102},"  --dataset.episode=0\n",[1903,27182,27183],{},"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":62,"searchDepth":80,"depth":80,"links":27185},[27186,27187,27188],{"id":27000,"depth":80,"text":27001},{"id":27113,"depth":80,"text":27114},{"id":27136,"depth":80,"text":27137},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":26991,"description":1926},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":27195,"title":27196,"body":27197,"description":1926,"extension":1927,"meta":27325,"navigation":108,"path":27326,"seo":27327,"stem":27328,"__hash__":27329},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":27198,"toc":27323},[27199,27203,27266,27269,27316,27321],[10,27200,27202],{"id":27201},"_7-act-模型训练","7. ACT 模型训练",[57,27204,27206],{"className":25625,"code":27205,"language":25627,"meta":62,"style":62},"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",[23,27207,27208,27215,27223,27230,27237,27244,27251,27258],{"__ignoreMap":62},[66,27209,27210,27213],{"class":68,"line":69},[66,27211,27212],{"class":3793},"lerobot-train",[66,27214,26481],{"class":102},[66,27216,27217,27219,27221],{"class":68,"line":80},[66,27218,27070],{"class":102},[66,27220,27073],{"class":356},[66,27222,26481],{"class":102},[66,27224,27225,27228],{"class":68,"line":112},[66,27226,27227],{"class":102},"  --policy.type=act",[66,27229,26481],{"class":102},[66,27231,27232,27235],{"class":68,"line":129},[66,27233,27234],{"class":102},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[66,27236,26481],{"class":102},[66,27238,27239,27242],{"class":68,"line":138},[66,27240,27241],{"class":102},"  --job_name=act_so101_test",[66,27243,26481],{"class":102},[66,27245,27246,27249],{"class":68,"line":227},[66,27247,27248],{"class":102},"  --policy.device=cuda",[66,27250,26481],{"class":102},[66,27252,27253,27256],{"class":68,"line":236},[66,27254,27255],{"class":102},"  --wandb.enable=false",[66,27257,26481],{"class":102},[66,27259,27260,27263],{"class":68,"line":241},[66,27261,27262],{"class":102},"  --policy.repo_id=",[66,27264,27265],{"class":356},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,27267,27268],{},"参数说明：",[2982,27270,27271,27277,27283,27289,27295,27304,27310],{},[34,27272,27273,27276],{},[23,27274,27275],{},"--dataset.repo_id","：训练数据集仓库。",[34,27278,27279,27282],{},[23,27280,27281],{},"--policy.type=act","：策略模型类型为 ACT。",[34,27284,27285,27288],{},[23,27286,27287],{},"--output_dir","：本地训练输出目录。",[34,27290,27291,27294],{},[23,27292,27293],{},"--job_name","：训练任务名称。",[34,27296,27297,27300,27301,26366],{},[23,27298,27299],{},"--policy.device","：训练设备（如 ",[23,27302,27303],{},"cuda",[34,27305,27306,27309],{},[23,27307,27308],{},"--wandb.enable","：是否启用 WandB 可视化。",[34,27311,27312,27315],{},[23,27313,27314],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,27317,27318],{},[3304,27319],{"alt":62,"src":27320},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[1903,27322,27183],{},{"title":62,"searchDepth":80,"depth":80,"links":27324},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":27196,"description":1926},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":27331,"title":27332,"body":27333,"description":1926,"extension":1927,"meta":27420,"navigation":108,"path":27421,"seo":27422,"stem":27423,"__hash__":27424},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":27334,"toc":27418},[27335,27338,27341,27408,27416],[10,27336,27332],{"id":27337},"_8-策略部署与自动采集",[19,27339,27340],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[57,27342,27344],{"className":25625,"code":27343,"language":25627,"meta":62,"style":62},"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",[23,27345,27346,27352,27358,27364,27372,27378,27385,27393,27401],{"__ignoreMap":62},[66,27347,27348,27350],{"class":68,"line":69},[66,27349,27011],{"class":3793},[66,27351,26481],{"class":102},[66,27353,27354,27356],{"class":68,"line":80},[66,27355,26513],{"class":102},[66,27357,26481],{"class":102},[66,27359,27360,27362],{"class":68,"line":112},[66,27361,26591],{"class":102},[66,27363,26481],{"class":102},[66,27365,27366,27368,27370],{"class":68,"line":129},[66,27367,26720],{"class":102},[66,27369,27038],{"class":356},[66,27371,26481],{"class":102},[66,27373,27374,27376],{"class":68,"line":138},[66,27375,26651],{"class":102},[66,27377,26481],{"class":102},[66,27379,27380,27383],{"class":68,"line":227},[66,27381,27382],{"class":102},"  --display_data=false",[66,27384,26481],{"class":102},[66,27386,27387,27389,27391],{"class":68,"line":236},[66,27388,27070],{"class":102},[66,27390,27073],{"class":356},[66,27392,26481],{"class":102},[66,27394,27395,27397,27399],{"class":68,"line":241},[66,27396,27087],{"class":102},[66,27398,27090],{"class":356},[66,27400,26481],{"class":102},[66,27402,27403,27406],{"class":68,"line":372},[66,27404,27405],{"class":102},"  --policy.path=",[66,27407,27265],{"class":356},[2982,27409,27410],{},[34,27411,27412,27415],{},[23,27413,27414],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[1903,27417,27183],{},{"title":62,"searchDepth":80,"depth":80,"links":27419},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":27332,"description":1926},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":27426,"title":27427,"body":27428,"description":1926,"extension":1927,"meta":27457,"navigation":108,"path":27458,"seo":27459,"stem":27460,"__hash__":27461},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":27429,"toc":27455},[27430,27434,27437,27443,27446,27452],[10,27431,27433],{"id":27432},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,27435,27436],{},"项目地址：",[19,27438,27439],{},[2229,27440,27441],{"href":27441,"rel":27442},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[25668],[19,27444,27445],{},"参考教程：",[19,27447,27448],{},[2229,27449,27450],{"href":27450,"rel":27451},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[25668],[19,27453,27454],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":62,"searchDepth":80,"depth":80,"links":27456},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":27427,"description":1926},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":27463,"title":27464,"body":27465,"description":27469,"extension":1927,"meta":27470,"navigation":108,"path":27471,"seo":27472,"stem":27473,"__hash__":27474},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":27466,"toc":27467},[],{"title":62,"searchDepth":80,"depth":80,"links":27468},[],"act复现",{"category":25181},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":27464,"description":27469},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":27476,"title":27477,"body":27478,"description":62,"extension":1927,"meta":27780,"navigation":108,"path":27781,"seo":27782,"stem":27783,"__hash__":27784},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":27479,"toc":27772},[27480,27483,27487,27497,27504,27511,27514,27521,27524,27527,27531,27543,27547,27593,27596,27599,27602,27605,27608,27612,27650,27656,27660,27714,27719,27722,27725,27730,27733,27738,27741,27744,27748,27751,27754,27758],[10,27481,27477],{"id":27482},"_1简介",[484,27484,27486],{"id":27485},"_11什么是-docker","1.1什么是 Docker？",[19,27488,27489,27490,27493,27494],{},"Docker 是一个开源的 ",[2141,27491,27492],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[2141,27495,27496],{},"一次构建，到处运行。",[19,27498,27499,27500,27503],{},"“ ",[2141,27501,27502],{},"一次构建，到处运行"," ”也就是说：",[31,27505,27506],{},[34,27507,27508],{},[2141,27509,27510],{},"之前：",[19,27512,27513],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[31,27515,27516],{},[34,27517,27518],{},[2141,27519,27520],{},"使用docker后：",[19,27522,27523],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,27525,27526],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[484,27528,27530],{"id":27529},"_12它是怎么工作的","1.2.它是怎么工作的？",[2982,27532,27533,27536],{},[34,27534,27535],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[34,27537,27538,27539,27542],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[2141,27540,27541],{},"无论在哪运行都一样稳定"," 。",[484,27544,27546],{"id":27545},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[2129,27548,27549,27559],{},[2132,27550,27551],{},[2135,27552,27553,27556],{},[2138,27554,27555],{"align":25539},"概念",[2138,27557,27558],{"align":25539},"解释",[2176,27560,27561,27569,27577,27585],{},[2135,27562,27563,27566],{},[2181,27564,27565],{"align":25539},"镜像",[2181,27567,27568],{"align":25539},"Image，运行容器的模板，像是一个应用快照",[2135,27570,27571,27574],{},[2181,27572,27573],{"align":25539},"容器",[2181,27575,27576],{"align":25539},"Container，运行中的镜像实例，有自己的文件系统、网络等",[2135,27578,27579,27582],{},[2181,27580,27581],{"align":25539},"Dockerfile",[2181,27583,27584],{"align":25539},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[2135,27586,27587,27590],{},[2181,27588,27589],{"align":25539},"仓库",[2181,27591,27592],{"align":25539},"Registry，存放镜像的地方，比如 Docker Hub",[19,27594,27595],{},"抽象化理解:",[19,27597,27598],{},"Docker镜像≈C++类",[19,27600,27601],{},"Docker容器≈C++类实例(即对象)",[19,27603,27604],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,27606,27607],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[484,27609,27611],{"id":27610},"_14类比理解","1.4.类比理解",[2129,27613,27614,27624],{},[2132,27615,27616],{},[2135,27617,27618,27621],{},[2138,27619,27620],{"align":25539},"传统部署",[2138,27622,27623],{"align":25539},"Docker部署",[2176,27625,27626,27634,27642],{},[2135,27627,27628,27631],{},[2181,27629,27630],{"align":25539},"手动安装依赖、调试版本不一致问题",[2181,27632,27633],{"align":25539},"一次打包环境和代码",[2135,27635,27636,27639],{},[2181,27637,27638],{"align":25539},"程序“裸奔”跑在系统上",[2181,27640,27641],{"align":25539},"程序“穿着容器”隔离运行",[2135,27643,27644,27647],{},[2181,27645,27646],{"align":25539},"容易“在我电脑上能跑”",[2181,27648,27649],{"align":25539},"保证“无论在哪都能跑”",[19,27651,27652,27653],{},"就像快递包裹： ",[2141,27654,27655],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[484,27657,27659],{"id":27658},"_15docker-的核心优势","1.5.Docker 的核心优势",[2129,27661,27662,27672],{},[2132,27663,27664],{},[2135,27665,27666,27669],{},[2138,27667,27668],{"align":25539},"优势",[2138,27670,27671],{"align":25539},"说明",[2176,27673,27674,27682,27690,27698,27706],{},[2135,27675,27676,27679],{},[2181,27677,27678],{"align":25539},"轻量级",[2181,27680,27681],{"align":25539},"基于系统内核共享，启动速度快，占资源少",[2135,27683,27684,27687],{},[2181,27685,27686],{"align":25539},"跨平台",[2181,27688,27689],{"align":25539},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[2135,27691,27692,27695],{},[2181,27693,27694],{"align":25539},"易于迁移部署",[2181,27696,27697],{"align":25539},"应用和环境一起封装，不怕依赖不一致",[2135,27699,27700,27703],{},[2181,27701,27702],{"align":25539},"易于版本控制",[2181,27704,27705],{"align":25539},"镜像版本可控，支持回滚",[2135,27707,27708,27711],{},[2181,27709,27710],{"align":25539},"生态丰富",[2181,27712,27713],{"align":25539},"Docker Hub 上有成千上万的现成镜像可用",[31,27715,27716],{},[34,27717,27718],{},"在Linux上可以几乎实现无性能损失。",[19,27720,27721],{},"docker里的发行版和本机共用Linux内核。",[19,27723,27724],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[31,27726,27727],{},[34,27728,27729],{},"可以快速部署在绝大多数Linux发行版",[19,27731,27732],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[31,27734,27735],{},[34,27736,27737],{},"配置环境简单",[19,27739,27740],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,27742,27743],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[31,27745,27746],{},[34,27747,27710],{},[19,27749,27750],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,27752,27753],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[484,27755,27757],{"id":27756},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[2982,27759,27760,27763,27766,27769],{},[34,27761,27762],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[34,27764,27765],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[34,27767,27768],{},"微服务架构：每个服务一个容器，灵活组合",[34,27770,27771],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":62,"searchDepth":80,"depth":80,"links":27773},[27774,27775,27776,27777,27778,27779],{"id":27485,"depth":112,"text":27486},{"id":27529,"depth":112,"text":27530},{"id":27545,"depth":112,"text":27546},{"id":27610,"depth":112,"text":27611},{"id":27658,"depth":112,"text":27659},{"id":27756,"depth":112,"text":27757},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":27477,"description":62},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":27786,"title":27787,"body":27788,"description":62,"extension":1927,"meta":28520,"navigation":108,"path":28521,"seo":28522,"stem":28523,"__hash__":28524},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":27789,"toc":28515},[27790,27793,27797,27800,27803,27809,27815,27819,27828,27831,27887,27890,27941,27944,28027,28030,28067,28071,28082,28095,28102,28105,28185,28188,28238,28241,28264,28268,28275,28278,28294,28300,28303,28319,28325,28328,28344,28358,28364,28384,28390,28393,28405,28411,28414,28428,28434,28437,28457,28462,28465,28468,28472,28475,28478,28481,28488,28491,28494,28497,28502,28507,28512],[10,27791,27787],{"id":27792},"_2安装docker",[484,27794,27796],{"id":27795},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,27798,27799],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,27801,27802],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,27804,27805],{},[2229,27806,27807],{"href":27807,"rel":27808},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[25668],[19,27810,27811],{},[2229,27812,27813],{"href":27813,"rel":27814},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[25668],[23801,27816,27818],{"id":27817},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,27820,27821,27822,27827],{},"以下内容根据 ",[2229,27823,27826],{"href":27824,"rel":27825},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[25668],"官方文档"," 修改而来。",[19,27829,27830],{},"如果你过去安装过 docker，先删掉：",[57,27832,27834],{"className":25625,"code":27833,"language":25627,"meta":62,"style":62},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[23,27835,27836],{"__ignoreMap":62},[66,27837,27838,27840,27843,27845,27848,27851,27854,27857,27860,27863,27866,27869,27872,27875,27878,27881,27884],{"class":68,"line":69},[66,27839,502],{"class":72},[66,27841,27842],{"class":76}," pkg ",[66,27844,507],{"class":72},[66,27846,27847],{"class":356}," docker.io",[66,27849,27850],{"class":356}," docker-doc",[66,27852,27853],{"class":356}," docker-compose",[66,27855,27856],{"class":356}," docker-compose-v2",[66,27858,27859],{"class":356}," podman-docker",[66,27861,27862],{"class":356}," containerd",[66,27864,27865],{"class":356}," runc",[66,27867,27868],{"class":76},"; ",[66,27870,27871],{"class":72},"do",[66,27873,27874],{"class":3793}," sudo",[66,27876,27877],{"class":356}," apt-get",[66,27879,27880],{"class":356}," remove",[66,27882,27883],{"class":76}," $pkg; ",[66,27885,27886],{"class":72},"done\n",[19,27888,27889],{},"首先安装依赖和GPG：",[57,27891,27895],{"className":27892,"code":27893,"language":27894,"meta":62,"style":62},"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",[23,27896,27897,27902,27907,27912,27917,27922,27927,27931,27936],{"__ignoreMap":62},[66,27898,27899],{"class":68,"line":69},[66,27900,27901],{},"# Add Docker's official GPG key:\n",[66,27903,27904],{"class":68,"line":80},[66,27905,27906],{},"sudo apt-get update\n",[66,27908,27909],{"class":68,"line":112},[66,27910,27911],{},"sudo apt-get install ca-certificates curl\n",[66,27913,27914],{"class":68,"line":129},[66,27915,27916],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[66,27918,27919],{"class":68,"line":138},[66,27920,27921],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[66,27923,27924],{"class":68,"line":227},[66,27925,27926],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[66,27928,27929],{"class":68,"line":236},[66,27930,109],{"emptyLinePlaceholder":108},[66,27932,27933],{"class":68,"line":241},[66,27934,27935],{},"# 如果上面这行报错就弄下面这行\n",[66,27937,27938],{"class":68,"line":372},[66,27939,27940],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,27942,27943],{},"信任 Docker 的 GPG 公钥并添加仓库：",[57,27945,27947],{"className":25625,"code":27946,"language":25627,"meta":62,"style":62},"# 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",[23,27948,27949,27954,27960,27977,28010],{"__ignoreMap":62},[66,27950,27951],{"class":68,"line":69},[66,27952,27953],{"class":758},"# Add the repository to Apt sources:\n",[66,27955,27956,27958],{"class":68,"line":80},[66,27957,26927],{"class":102},[66,27959,26481],{"class":102},[66,27961,27962,27965,27968,27971,27974],{"class":68,"line":112},[66,27963,27964],{"class":356},"  \"deb [arch=$(",[66,27966,27967],{"class":3793},"dpkg",[66,27969,27970],{"class":102}," --print-architecture",[66,27972,27973],{"class":356},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[66,27975,27976],{"class":102},"\\\n",[66,27978,27979,27982,27984,27986,27989,27992,27994,27996,27999,28001,28003,28006,28008],{"class":68,"line":129},[66,27980,27981],{"class":356},"  \"",[66,27983,26902],{"class":76},[66,27985,2537],{"class":102},[66,27987,27988],{"class":356}," \u002Fetc\u002Fos-release",[66,27990,27991],{"class":76}," && ",[66,27993,26927],{"class":102},[66,27995,11531],{"class":356},[66,27997,27998],{"class":76},"$VERSION_CODENAME",[66,28000,1130],{"class":356},[66,28002,2413],{"class":76},[66,28004,28005],{"class":356},"\" stable\"",[66,28007,26912],{"class":72},[66,28009,26481],{"class":102},[66,28011,28012,28015,28018,28021,28024],{"class":68,"line":138},[66,28013,28014],{"class":3793},"  sudo",[66,28016,28017],{"class":356}," tee",[66,28019,28020],{"class":356}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[66,28022,28023],{"class":72}," >",[66,28025,28026],{"class":356}," \u002Fdev\u002Fnull\n",[19,28028,28029],{},"最后安装",[57,28031,28033],{"className":25625,"code":28032,"language":25627,"meta":62,"style":62},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[23,28034,28035,28044],{"__ignoreMap":62},[66,28036,28037,28039,28041],{"class":68,"line":69},[66,28038,26380],{"class":3793},[66,28040,27877],{"class":356},[66,28042,28043],{"class":356}," update\n",[66,28045,28046,28048,28050,28052,28055,28058,28061,28064],{"class":68,"line":80},[66,28047,26380],{"class":3793},[66,28049,27877],{"class":356},[66,28051,25637],{"class":356},[66,28053,28054],{"class":356}," docker-ce",[66,28056,28057],{"class":356}," docker-ce-cli",[66,28059,28060],{"class":356}," containerd.io",[66,28062,28063],{"class":356}," docker-buildx-plugin",[66,28065,28066],{"class":356}," docker-compose-plugin\n",[23801,28068,28070],{"id":28069},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,28072,28073,28074,28077,28078,28081],{},"查看自己自己包管理工具版本（dnf是 ",[2141,28075,28076],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[2141,28079,28080],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[57,28083,28085],{"className":25625,"code":28084,"language":25627,"meta":62,"style":62},"dnf --version\n",[23,28086,28087],{"__ignoreMap":62},[66,28088,28089,28092],{"class":68,"line":69},[66,28090,28091],{"class":3793},"dnf",[66,28093,28094],{"class":102}," --version\n",[19,28096,27821,28097,28101],{},[2229,28098,27826],{"href":28099,"rel":28100},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[25668]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,28103,28104],{},"如果你之前安装过 docker，请先删掉",[57,28106,28108],{"className":25625,"code":28107,"language":25627,"meta":62,"style":62},"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",[23,28109,28110,28124,28131,28138,28145,28152,28159,28166,28173,28180],{"__ignoreMap":62},[66,28111,28112,28114,28117,28119,28122],{"class":68,"line":69},[66,28113,26380],{"class":3793},[66,28115,28116],{"class":356}," dnf",[66,28118,27880],{"class":356},[66,28120,28121],{"class":356}," docker",[66,28123,26481],{"class":102},[66,28125,28126,28129],{"class":68,"line":80},[66,28127,28128],{"class":356},"                  docker-client",[66,28130,26481],{"class":102},[66,28132,28133,28136],{"class":68,"line":112},[66,28134,28135],{"class":356},"                  docker-client-latest",[66,28137,26481],{"class":102},[66,28139,28140,28143],{"class":68,"line":129},[66,28141,28142],{"class":356},"                  docker-common",[66,28144,26481],{"class":102},[66,28146,28147,28150],{"class":68,"line":138},[66,28148,28149],{"class":356},"                  docker-latest",[66,28151,26481],{"class":102},[66,28153,28154,28157],{"class":68,"line":227},[66,28155,28156],{"class":356},"                  docker-latest-logrotate",[66,28158,26481],{"class":102},[66,28160,28161,28164],{"class":68,"line":236},[66,28162,28163],{"class":356},"                  docker-logrotate",[66,28165,26481],{"class":102},[66,28167,28168,28171],{"class":68,"line":241},[66,28169,28170],{"class":356},"                  docker-selinux",[66,28172,26481],{"class":102},[66,28174,28175,28178],{"class":68,"line":372},[66,28176,28177],{"class":356},"                  docker-engine-selinux",[66,28179,26481],{"class":102},[66,28181,28182],{"class":68,"line":377},[66,28183,28184],{"class":356},"                  docker-engine\n",[19,28186,28187],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[57,28189,28191],{"className":25625,"code":28190,"language":25627,"meta":62,"style":62},"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",[23,28192,28193,28207,28222],{"__ignoreMap":62},[66,28194,28195,28197,28199,28202,28204],{"class":68,"line":69},[66,28196,26380],{"class":3793},[66,28198,28116],{"class":356},[66,28200,28201],{"class":102}," -y",[66,28203,25637],{"class":356},[66,28205,28206],{"class":356}," dnf-plugins-core\n",[66,28208,28209,28211,28213,28216,28219],{"class":68,"line":80},[66,28210,26380],{"class":3793},[66,28212,28116],{"class":356},[66,28214,28215],{"class":356}," config-manager",[66,28217,28218],{"class":356}," addrepo",[66,28220,28221],{"class":102}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[66,28223,28224,28226,28229,28232,28235],{"class":68,"line":112},[66,28225,26380],{"class":3793},[66,28227,28228],{"class":356}," sed",[66,28230,28231],{"class":102}," -i",[66,28233,28234],{"class":356}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[66,28236,28237],{"class":356}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,28239,28240],{},"最后安装：",[57,28242,28244],{"className":25625,"code":28243,"language":25627,"meta":62,"style":62},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[23,28245,28246],{"__ignoreMap":62},[66,28247,28248,28250,28252,28254,28256,28258,28260,28262],{"class":68,"line":69},[66,28249,26380],{"class":3793},[66,28251,28116],{"class":356},[66,28253,25637],{"class":356},[66,28255,28054],{"class":356},[66,28257,28057],{"class":356},[66,28259,28060],{"class":356},[66,28261,28063],{"class":356},[66,28263,28066],{"class":356},[484,28265,28267],{"id":28266},"_22配置环境","2.2.配置环境",[23801,28269,28271,28274],{"id":28270},"_221检查-docker-服务状态",[2141,28272,28273],{},"2.2.1.检查 Docker 服务状态"," ：",[19,28276,28277],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[57,28279,28281],{"className":25625,"code":28280,"language":25627,"meta":62,"style":62},"systemctl status docker\n",[23,28282,28283],{"__ignoreMap":62},[66,28284,28285,28288,28291],{"class":68,"line":69},[66,28286,28287],{"class":3793},"systemctl",[66,28289,28290],{"class":356}," status",[66,28292,28293],{"class":356}," docker\n",[23801,28295,28297,28274],{"id":28296},"_222启动-docker-服务",[2141,28298,28299],{},"2.2.2.启动 Docker 服务",[19,28301,28302],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[57,28304,28306],{"className":25625,"code":28305,"language":25627,"meta":62,"style":62},"sudo systemctl start docker\n",[23,28307,28308],{"__ignoreMap":62},[66,28309,28310,28312,28315,28317],{"class":68,"line":69},[66,28311,26380],{"class":3793},[66,28313,28314],{"class":356}," systemctl",[66,28316,6000],{"class":356},[66,28318,28293],{"class":356},[23801,28320,28322,28274],{"id":28321},"_223设置-docker-开机自启",[2141,28323,28324],{},"2.2.3.设置 Docker 开机自启",[19,28326,28327],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[57,28329,28331],{"className":25625,"code":28330,"language":25627,"meta":62,"style":62},"sudo systemctl enable docker\n",[23,28332,28333],{"__ignoreMap":62},[66,28334,28335,28337,28339,28342],{"class":68,"line":69},[66,28336,26380],{"class":3793},[66,28338,28314],{"class":356},[66,28340,28341],{"class":356}," enable",[66,28343,28293],{"class":356},[23801,28345,28347,15600,28350,15600,28355,28274],{"id":28346},"_224将用户添加到-docker-组",[2141,28348,28349],{},"2.2.4.将用户添加到",[2141,28351,28352],{},[23,28353,28354],{},"docker",[2141,28356,28357],{},"组",[19,28359,28360,28361,28363],{},"使用以下命令将当前用户添加到 ",[23,28362,28354],{}," 组：",[57,28365,28367],{"className":25625,"code":28366,"language":25627,"meta":62,"style":62},"sudo usermod -aG docker $USER\n",[23,28368,28369],{"__ignoreMap":62},[66,28370,28371,28373,28376,28379,28381],{"class":68,"line":69},[66,28372,26380],{"class":3793},[66,28374,28375],{"class":356}," usermod",[66,28377,28378],{"class":102}," -aG",[66,28380,28121],{"class":356},[66,28382,28383],{"class":76}," $USER\n",[23801,28385,28387,28274],{"id":28386},"_225退出并重新登录",[2141,28388,28389],{},"2.2.5.退出并重新登录",[19,28391,28392],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[57,28394,28396],{"className":25625,"code":28395,"language":25627,"meta":62,"style":62},"newgrp docker\n",[23,28397,28398],{"__ignoreMap":62},[66,28399,28400,28403],{"class":68,"line":69},[66,28401,28402],{"class":3793},"newgrp",[66,28404,28293],{"class":356},[23801,28406,28408,28274],{"id":28407},"_226重新启动-docker-服务如果需要",[2141,28409,28410],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,28412,28413],{},"确保 Docker 服务正在运行，可以使用以下命令：",[57,28415,28416],{"className":25625,"code":28305,"language":25627,"meta":62,"style":62},[23,28417,28418],{"__ignoreMap":62},[66,28419,28420,28422,28424,28426],{"class":68,"line":69},[66,28421,26380],{"class":3793},[66,28423,28314],{"class":356},[66,28425,6000],{"class":356},[66,28427,28293],{"class":356},[23801,28429,28431,28274],{"id":28430},"_227重启电脑后检查-docker-服务状态",[2141,28432,28433],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,28435,28436],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[57,28438,28440],{"className":25625,"code":28439,"language":25627,"meta":62,"style":62},"sudo reboot\nsystemctl status docker\n",[23,28441,28442,28449],{"__ignoreMap":62},[66,28443,28444,28446],{"class":68,"line":69},[66,28445,26380],{"class":3793},[66,28447,28448],{"class":356}," reboot\n",[66,28450,28451,28453,28455],{"class":68,"line":80},[66,28452,28287],{"class":3793},[66,28454,28290],{"class":356},[66,28456,28293],{"class":356},[19,28458,28459],{},[3304,28460],{"alt":62,"src":28461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,28463,28464],{},"第三行显示enabled说明开机自启动成功",[19,28466,28467],{},"按q退出",[484,28469,28471],{"id":28470},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,28473,28474],{},"优先使用linux来使用docker是比较好的",[19,28476,28477],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,28479,28480],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,28482,28483,28484],{},"官方下载安装:",[2229,28485,28486],{"href":28486,"rel":28487},"https:\u002F\u002Fwww.docker.com\u002F",[25668],[19,28489,28490],{},"Windows的Docker显卡直通与USB直通:",[19,28492,28493],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,28495,28496],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,28498,28499],{},[3304,28500],{"alt":62,"src":28501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,28503,28504],{},[3304,28505],{"alt":62,"src":28506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,28508,28509],{},[3304,28510],{"alt":62,"src":28511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[1903,28513,28514],{},"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":62,"searchDepth":80,"depth":80,"links":28516},[28517,28518,28519],{"id":27795,"depth":112,"text":27796},{"id":28266,"depth":112,"text":28267},{"id":28470,"depth":112,"text":28471},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":27787,"description":62},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":28526,"title":28527,"body":28528,"description":28535,"extension":1927,"meta":29228,"navigation":108,"path":29229,"seo":29230,"stem":29231,"__hash__":29232},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":28529,"toc":29222},[28530,28533,28536,28540,28545,28550,28553,28581,28586,28595,28598,28603,28607,28614,28619,28625,28629,28632,28636,28641,28733,28738,28756,28761,28782,28787,28803,28807,28812,28841,28846,28892,28897,28941,28949,28966,28971,28987,28992,29006,29009,29012,29015,29018,29047,29050,29055,29059,29062,29065,29071,29074,29077,29080,29142,29149,29154,29157,29175,29179,29182,29199,29202,29205,29219],[10,28531,28527],{"id":28532},"_3docker直通",[19,28534,28535],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[484,28537,28539],{"id":28538},"_31usb直通","3.1.USB直通",[19,28541,28542],{},[3304,28543],{"alt":62,"src":28544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[31,28546,28547],{},[34,28548,28549],{},"方法一(不是很推荐新手)：",[19,28551,28552],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[57,28554,28556],{"className":25625,"code":28555,"language":25627,"meta":62,"style":62},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[23,28557,28558,28566,28571],{"__ignoreMap":62},[66,28559,28560,28563],{"class":68,"line":69},[66,28561,28562],{"class":3793},"ls",[66,28564,28565],{"class":356}," \u002Fdev\n",[66,28567,28568],{"class":68,"line":80},[66,28569,28570],{"class":758},"#例如\n",[66,28572,28573,28576,28578],{"class":68,"line":112},[66,28574,28575],{"class":76},"--device",[66,28577,99],{"class":72},[66,28579,28580],{"class":356},"\u002Fdev\u002Ftty_USB0\n",[31,28582,28583],{"start":80},[34,28584,28585],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[57,28587,28589],{"className":25625,"code":28588,"language":25627,"meta":62,"style":62},"--privileged\n",[23,28590,28591],{"__ignoreMap":62},[66,28592,28593],{"class":68,"line":69},[66,28594,28588],{"class":3793},[19,28596,28597],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,28599,28600],{},[3304,28601],{"alt":62,"src":28602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[484,28604,28606],{"id":28605},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,28608,28609,28610,28613],{},"NVIDIA Container Toolkit使用户 ",[2141,28611,28612],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,28615,28616],{},[3304,28617],{"alt":62,"src":28618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,28620,28621],{},[2229,28622,28623],{"href":28623,"rel":28624},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[25668],[23801,28626,28628],{"id":28627},"_321安装","3.2.1.安装",[19,28630,28631],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[24713,28633,28635],{"id":28634},"_3211ubuntu","3.2.1.1.Ubuntu",[31,28637,28638],{},[34,28639,28640],{},"配置存储库 并更新",[57,28642,28644],{"className":25625,"code":28643,"language":25627,"meta":62,"style":62},"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",[23,28645,28646,28675,28695,28707,28719,28725],{"__ignoreMap":62},[66,28647,28648,28651,28654,28657,28659,28661,28664,28667,28670,28673],{"class":68,"line":69},[66,28649,28650],{"class":3793},"curl",[66,28652,28653],{"class":102}," -fsSL",[66,28655,28656],{"class":356}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[66,28658,26912],{"class":72},[66,28660,27874],{"class":3793},[66,28662,28663],{"class":356}," gpg",[66,28665,28666],{"class":102}," --dearmor",[66,28668,28669],{"class":102}," -o",[66,28671,28672],{"class":356}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[66,28674,26481],{"class":102},[66,28676,28677,28680,28682,28685,28688,28691,28693],{"class":68,"line":80},[66,28678,28679],{"class":76},"  && ",[66,28681,28650],{"class":3793},[66,28683,28684],{"class":102}," -s",[66,28686,28687],{"class":102}," -L",[66,28689,28690],{"class":356}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[66,28692,26912],{"class":72},[66,28694,26481],{"class":102},[66,28696,28697,28700,28703,28705],{"class":68,"line":112},[66,28698,28699],{"class":3793},"    sed",[66,28701,28702],{"class":356}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[66,28704,26912],{"class":72},[66,28706,26481],{"class":102},[66,28708,28709,28712,28714,28717],{"class":68,"line":129},[66,28710,28711],{"class":3793},"    sudo",[66,28713,28017],{"class":356},[66,28715,28716],{"class":356}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[66,28718,26481],{"class":102},[66,28720,28721,28723],{"class":68,"line":138},[66,28722,28679],{"class":76},[66,28724,27976],{"class":102},[66,28726,28727,28729,28731],{"class":68,"line":227},[66,28728,28711],{"class":3793},[66,28730,27877],{"class":356},[66,28732,28043],{"class":356},[31,28734,28735],{"start":80},[34,28736,28737],{},"安装nvidia-docker2",[57,28739,28741],{"className":25625,"code":28740,"language":25627,"meta":62,"style":62},"sudo apt-get install -y nvidia-docker2\n",[23,28742,28743],{"__ignoreMap":62},[66,28744,28745,28747,28749,28751,28753],{"class":68,"line":69},[66,28746,26380],{"class":3793},[66,28748,27877],{"class":356},[66,28750,25637],{"class":356},[66,28752,28201],{"class":102},[66,28754,28755],{"class":356}," nvidia-docker2\n",[31,28757,28758],{"start":112},[34,28759,28760],{},"使用nvidia-ctk命令配置container runtime",[57,28762,28764],{"className":25625,"code":28763,"language":25627,"meta":62,"style":62},"sudo nvidia-ctk runtime configure --runtime=docker\n",[23,28765,28766],{"__ignoreMap":62},[66,28767,28768,28770,28773,28776,28779],{"class":68,"line":69},[66,28769,26380],{"class":3793},[66,28771,28772],{"class":356}," nvidia-ctk",[66,28774,28775],{"class":356}," runtime",[66,28777,28778],{"class":356}," configure",[66,28780,28781],{"class":102}," --runtime=docker\n",[31,28783,28784],{"start":129},[34,28785,28786],{},"重启docker服务:",[57,28788,28790],{"className":25625,"code":28789,"language":25627,"meta":62,"style":62},"sudo systemctl restart docker\n",[23,28791,28792],{"__ignoreMap":62},[66,28793,28794,28796,28798,28801],{"class":68,"line":69},[66,28795,26380],{"class":3793},[66,28797,28314],{"class":356},[66,28799,28800],{"class":356}," restart",[66,28802,28293],{"class":356},[24713,28804,28806],{"id":28805},"_3212fedora","3.2.1.2.Fedora",[31,28808,28809],{},[34,28810,28811],{},"配置存储库",[57,28813,28815],{"className":25625,"code":28814,"language":25627,"meta":62,"style":62},"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",[23,28816,28817,28832],{"__ignoreMap":62},[66,28818,28819,28821,28823,28825,28828,28830],{"class":68,"line":69},[66,28820,28650],{"class":3793},[66,28822,28684],{"class":102},[66,28824,28687],{"class":102},[66,28826,28827],{"class":356}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[66,28829,26912],{"class":72},[66,28831,26481],{"class":102},[66,28833,28834,28836,28838],{"class":68,"line":80},[66,28835,26380],{"class":3793},[66,28837,28017],{"class":356},[66,28839,28840],{"class":356}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[31,28842,28843],{"start":80},[34,28844,28845],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[57,28847,28849],{"className":25625,"code":28848,"language":25627,"meta":62,"style":62},"# 如果是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",[23,28850,28851,28856,28870,28874,28879],{"__ignoreMap":62},[66,28852,28853],{"class":68,"line":69},[66,28854,28855],{"class":758},"# 如果是RHEL或者Rocky（DNF4）\n",[66,28857,28858,28860,28862,28864,28867],{"class":68,"line":80},[66,28859,26380],{"class":3793},[66,28861,28116],{"class":356},[66,28863,28215],{"class":356},[66,28865,28866],{"class":102}," --add-repo",[66,28868,28869],{"class":356}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[66,28871,28872],{"class":68,"line":112},[66,28873,109],{"emptyLinePlaceholder":108},[66,28875,28876],{"class":68,"line":129},[66,28877,28878],{"class":758},"# 如果是Feodra41+（DNF5）\n",[66,28880,28881,28883,28885,28887,28889],{"class":68,"line":138},[66,28882,26380],{"class":3793},[66,28884,28116],{"class":356},[66,28886,28215],{"class":356},[66,28888,28218],{"class":356},[66,28890,28891],{"class":102}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[31,28893,28894],{"start":112},[34,28895,28896],{},"安装NVIDIA Container Toolki包",[57,28898,28900],{"className":25625,"code":28899,"language":25627,"meta":62,"style":62},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[23,28901,28902,28907,28920,28924,28929],{"__ignoreMap":62},[66,28903,28904],{"class":68,"line":69},[66,28905,28906],{"class":758},"# 如果是RHEL或者Rocky\n",[66,28908,28909,28911,28913,28915,28917],{"class":68,"line":80},[66,28910,26380],{"class":3793},[66,28912,28116],{"class":356},[66,28914,25637],{"class":356},[66,28916,28201],{"class":102},[66,28918,28919],{"class":356}," nvidia-container-toolkit\n",[66,28921,28922],{"class":68,"line":112},[66,28923,109],{"emptyLinePlaceholder":108},[66,28925,28926],{"class":68,"line":129},[66,28927,28928],{"class":758},"# 如果是Fedora\n",[66,28930,28931,28933,28935,28937,28939],{"class":68,"line":138},[66,28932,26380],{"class":3793},[66,28934,28116],{"class":356},[66,28936,25637],{"class":356},[66,28938,28201],{"class":102},[66,28940,28919],{"class":356},[31,28942,28943],{"start":129},[34,28944,28945,28946,28948],{},"安装nvidia-docker2 ： 在Fedora上使用",[23,28947,28091],{},"进行安装",[57,28950,28952],{"className":25625,"code":28951,"language":25627,"meta":62,"style":62},"sudo dnf install -y nvidia-docker2\n",[23,28953,28954],{"__ignoreMap":62},[66,28955,28956,28958,28960,28962,28964],{"class":68,"line":69},[66,28957,26380],{"class":3793},[66,28959,28116],{"class":356},[66,28961,25637],{"class":356},[66,28963,28201],{"class":102},[66,28965,28755],{"class":356},[31,28967,28968],{"start":138},[34,28969,28970],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[57,28972,28973],{"className":25625,"code":28763,"language":25627,"meta":62,"style":62},[23,28974,28975],{"__ignoreMap":62},[66,28976,28977,28979,28981,28983,28985],{"class":68,"line":69},[66,28978,26380],{"class":3793},[66,28980,28772],{"class":356},[66,28982,28775],{"class":356},[66,28984,28778],{"class":356},[66,28986,28781],{"class":102},[31,28988,28989],{"start":227},[34,28990,28991],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[57,28993,28994],{"className":25625,"code":28789,"language":25627,"meta":62,"style":62},[23,28995,28996],{"__ignoreMap":62},[66,28997,28998,29000,29002,29004],{"class":68,"line":69},[66,28999,26380],{"class":3793},[66,29001,28314],{"class":356},[66,29003,28800],{"class":356},[66,29005,28293],{"class":356},[19,29007,29008],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,29010,29011],{},"方法：",[19,29013,29014],{},"1️⃣nvidia-smi",[19,29016,29017],{},"2️⃣运行nvidia cuda 容器进行测试",[57,29019,29021],{"className":25625,"code":29020,"language":25627,"meta":62,"style":62},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[23,29022,29023],{"__ignoreMap":62},[66,29024,29025,29027,29029,29032,29035,29038,29041,29044],{"class":68,"line":69},[66,29026,26380],{"class":3793},[66,29028,28121],{"class":356},[66,29030,29031],{"class":356}," run",[66,29033,29034],{"class":102}," --rm",[66,29036,29037],{"class":102}," --gpus",[66,29039,29040],{"class":356}," all",[66,29042,29043],{"class":356}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[66,29045,29046],{"class":356}," nvidia-smi\n",[19,29048,29049],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,29051,29052],{},[3304,29053],{"alt":62,"src":29054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[484,29056,29058],{"id":29057},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,29060,29061],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,29063,29064],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,29066,29067],{},[2229,29068,29069],{"href":29069,"rel":29070},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[25668],[19,29072,29073],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,29075,29076],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,29078,29079],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[2129,29081,29082,29098],{},[2132,29083,29084],{},[2135,29085,29086,29089,29092,29095],{},[2138,29087,29088],{"align":25539},"镜像类型",[2138,29090,29091],{"align":25539},"适用场景",[2138,29093,29094],{"align":25539},"示例标签",[2138,29096,29097],{"align":25539},"大小",[2176,29099,29100,29114,29128],{},[2135,29101,29102,29105,29108,29111],{},[2181,29103,29104],{"align":25539},"base",[2181,29106,29107],{"align":25539},"仅需 CUDA 运行时库",[2181,29109,29110],{"align":25539},"12.4.0-base-ubuntu22.04",[2181,29112,29113],{"align":25539},"~240MB",[2135,29115,29116,29119,29122,29125],{},[2181,29117,29118],{"align":25539},"runtime",[2181,29120,29121],{"align":25539},"部署编译后的应用（含数学库）",[2181,29123,29124],{"align":25539},"12.4.0-runtime-ubuntu22.04",[2181,29126,29127],{"align":25539},"~2GB",[2135,29129,29130,29133,29136,29139],{},[2181,29131,29132],{"align":25539},"devel",[2181,29134,29135],{"align":25539},"开发环境（含编译工具）",[2181,29137,29138],{"align":25539},"12.4.0-devel-ubuntu22.04",[2181,29140,29141],{"align":25539},"~3GB",[19,29143,29144,29145,29148],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[23,29146,29147],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,29150,29151],{},[3304,29152],{"alt":62,"src":29153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,29155,29156],{},"在dockerfile里就可以开头这么写：",[57,29158,29160],{"className":25625,"code":29159,"language":25627,"meta":62,"style":62},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[23,29161,29162,29167],{"__ignoreMap":62},[66,29163,29164],{"class":68,"line":69},[66,29165,29166],{"class":758},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[66,29168,29169,29172],{"class":68,"line":80},[66,29170,29171],{"class":3793},"FROM",[66,29173,29174],{"class":356}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[484,29176,29178],{"id":29177},"_34配置以太网","3.4.配置以太网",[19,29180,29181],{},"指定网络模式",[57,29183,29185],{"className":25625,"code":29184,"language":25627,"meta":62,"style":62},"--net=host \\\n",[23,29186,29187],{"__ignoreMap":62},[66,29188,29189,29192,29194,29197],{"class":68,"line":69},[66,29190,29191],{"class":76},"--net",[66,29193,99],{"class":72},[66,29195,29196],{"class":356},"host",[66,29198,26481],{"class":3793},[19,29200,29201],{},"启动参数里加上这行即可。具体在下方",[19,29203,29204],{},"--net选项：指定网络模式，该选项有以下参数可选：",[2982,29206,29207,29210,29213,29216],{},[34,29208,29209],{},"--net=bridge:默认选项，表示连接到默认的网桥",[34,29211,29212],{},"--net=host:容器使用宿主机的网络",[34,29214,29215],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[34,29217,29218],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[1903,29220,29221],{},"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":62,"searchDepth":80,"depth":80,"links":29223},[29224,29225,29226,29227],{"id":28538,"depth":112,"text":28539},{"id":28605,"depth":112,"text":28606},{"id":29057,"depth":112,"text":29058},{"id":29177,"depth":112,"text":29178},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":28527,"description":28535},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":29234,"title":29235,"body":29236,"description":29243,"extension":1927,"meta":29249,"navigation":108,"path":29250,"seo":29251,"stem":29252,"__hash__":29253},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":29237,"toc":29247},[29238,29241,29244],[10,29239,29235],{"id":29240},"_4dockerhub换源",[19,29242,29243],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,29245,29246],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":62,"searchDepth":80,"depth":80,"links":29248},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":29235,"description":29243},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":29255,"title":29256,"body":29257,"description":62,"extension":1927,"meta":30268,"navigation":108,"path":30269,"seo":30270,"stem":30271,"__hash__":30272},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":29258,"toc":30263},[29259,29262,29266,29272,29276,29279,29619,29622,29625,29628,29633,29638,29641,29644,29647,29650,29669,29672,29683,29689,29871,29881,29897,30160,30162,30186,30201,30210,30260],[10,29260,29256],{"id":29261},"_5docker命令学习",[484,29263,29265],{"id":29264},"_51参考文档","5.1.参考文档",[19,29267,29268],{},[2229,29269,29270],{"href":29270,"rel":29271},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[25668],[484,29273,29275],{"id":29274},"_52常用命令","5.2.常用命令",[19,29277,29278],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[2129,29280,29281,29294],{},[2132,29282,29283],{},[2135,29284,29285,29288,29291],{},[2138,29286,29287],{"align":25539},"命令",[2138,29289,29290],{"align":25539},"描述",[2138,29292,29293],{"align":25539},"示例",[2176,29295,29296,29307,29318,29329,29340,29351,29362,29373,29383,29394,29405,29416,29426,29437,29448,29459,29469,29479,29489,29499,29510,29521,29532,29543,29554,29565,29575,29586,29597,29608],{},[2135,29297,29298,29301,29304],{},[2181,29299,29300],{"align":25539},"docker run",[2181,29302,29303],{"align":25539},"创建并启动一个新的容器。",[2181,29305,29306],{"align":25539},"docker run -it ubuntu bash",[2135,29308,29309,29312,29315],{},[2181,29310,29311],{"align":25539},"docker build",[2181,29313,29314],{"align":25539},"通过指定的 Dockerfile 创建一个新的镜像。",[2181,29316,29317],{"align":25539},"docker build -t myimage .",[2135,29319,29320,29323,29326],{},[2181,29321,29322],{"align":25539},"docker pull",[2181,29324,29325],{"align":25539},"从 Docker 仓库拉取镜像。",[2181,29327,29328],{"align":25539},"docker pull ubuntu",[2135,29330,29331,29334,29337],{},[2181,29332,29333],{"align":25539},"docker push",[2181,29335,29336],{"align":25539},"将本地镜像推送到 Docker 仓库。",[2181,29338,29339],{"align":25539},"docker push myimage",[2135,29341,29342,29345,29348],{},[2181,29343,29344],{"align":25539},"docker stop",[2181,29346,29347],{"align":25539},"停止一个正在运行的容器。",[2181,29349,29350],{"align":25539},"docker stop container_id",[2135,29352,29353,29356,29359],{},[2181,29354,29355],{"align":25539},"docker start",[2181,29357,29358],{"align":25539},"启动一个已经存在的容器。",[2181,29360,29361],{"align":25539},"docker start container_id",[2135,29363,29364,29367,29370],{},[2181,29365,29366],{"align":25539},"docker restart",[2181,29368,29369],{"align":25539},"重新启动容器。",[2181,29371,29372],{"align":25539},"docker restart container_id",[2135,29374,29375,29378,29381],{},[2181,29376,29377],{"align":25539},"docker ps",[2181,29379,29380],{"align":25539},"列出当前正在运行的容器。",[2181,29382,29377],{"align":25539},[2135,29384,29385,29388,29391],{},[2181,29386,29387],{"align":25539},"docker rm",[2181,29389,29390],{"align":25539},"删除一个或多个停止的容器。",[2181,29392,29393],{"align":25539},"docker rm container_id",[2135,29395,29396,29399,29402],{},[2181,29397,29398],{"align":25539},"docker exec",[2181,29400,29401],{"align":25539},"在一个正在运行的容器中执行命令。",[2181,29403,29404],{"align":25539},"docker exec -it container_id bash",[2135,29406,29407,29410,29413],{},[2181,29408,29409],{"align":25539},"docker logs",[2181,29411,29412],{"align":25539},"查看容器的日志输出。",[2181,29414,29415],{"align":25539},"docker logs container_id",[2135,29417,29418,29421,29424],{},[2181,29419,29420],{"align":25539},"docker images",[2181,29422,29423],{"align":25539},"列出本地所有镜像。",[2181,29425,29420],{"align":25539},[2135,29427,29428,29431,29434],{},[2181,29429,29430],{"align":25539},"docker rmi",[2181,29432,29433],{"align":25539},"删除一个或多个镜像。",[2181,29435,29436],{"align":25539},"docker rmi myimage",[2135,29438,29439,29442,29445],{},[2181,29440,29441],{"align":25539},"docker network",[2181,29443,29444],{"align":25539},"管理 Docker 网络。",[2181,29446,29447],{"align":25539},"docker network ls",[2135,29449,29450,29453,29456],{},[2181,29451,29452],{"align":25539},"docker volume",[2181,29454,29455],{"align":25539},"管理 Docker 数据卷。",[2181,29457,29458],{"align":25539},"docker volume ls",[2135,29460,29461,29464,29467],{},[2181,29462,29463],{"align":25539},"docker-compose up",[2181,29465,29466],{"align":25539},"启动 docker-compose.yml 中定义的所有服务。",[2181,29468,29463],{"align":25539},[2135,29470,29471,29474,29477],{},[2181,29472,29473],{"align":25539},"docker-compose down",[2181,29475,29476],{"align":25539},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[2181,29478,29473],{"align":25539},[2135,29480,29481,29484,29487],{},[2181,29482,29483],{"align":25539},"docker info",[2181,29485,29486],{"align":25539},"显示 Docker 系统的详细信息。",[2181,29488,29483],{"align":25539},[2135,29490,29491,29494,29497],{},[2181,29492,29493],{"align":25539},"docker stats",[2181,29495,29496],{"align":25539},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[2181,29498,29493],{"align":25539},[2135,29500,29501,29504,29507],{},[2181,29502,29503],{"align":25539},"docker inspect",[2181,29505,29506],{"align":25539},"查看容器或镜像的详细信息（JSON 格式）。",[2181,29508,29509],{"align":25539},"docker inspect container_id",[2135,29511,29512,29515,29518],{},[2181,29513,29514],{"align":25539},"docker save",[2181,29516,29517],{"align":25539},"将一个镜像保存为 tar 文件。",[2181,29519,29520],{"align":25539},"docker save -o myimage.tar myimage",[2135,29522,29523,29526,29529],{},[2181,29524,29525],{"align":25539},"docker load",[2181,29527,29528],{"align":25539},"从 tar 文件中加载镜像。",[2181,29530,29531],{"align":25539},"docker load -i myimage.tar",[2135,29533,29534,29537,29540],{},[2181,29535,29536],{"align":25539},"docker tag",[2181,29538,29539],{"align":25539},"为镜像添加标签（tag）。",[2181,29541,29542],{"align":25539},"docker tag myimage myimage:v1",[2135,29544,29545,29548,29551],{},[2181,29546,29547],{"align":25539},"docker buildx build",[2181,29549,29550],{"align":25539},"使用 Buildx 构建多架构镜像。",[2181,29552,29553],{"align":25539},"docker buildx build -t myimage .",[2135,29555,29556,29559,29562],{},[2181,29557,29558],{"align":25539},"docker buildx create",[2181,29560,29561],{"align":25539},"创建一个新的 Buildx 构建实例。",[2181,29563,29564],{"align":25539},"docker buildx create –use",[2135,29566,29567,29570,29573],{},[2181,29568,29569],{"align":25539},"docker buildx ls",[2181,29571,29572],{"align":25539},"列出所有可用的 Buildx 构建实例。",[2181,29574,29569],{"align":25539},[2135,29576,29577,29580,29583],{},[2181,29578,29579],{"align":25539},"docker buildx use",[2181,29581,29582],{"align":25539},"设置当前的 Buildx 构建实例。",[2181,29584,29585],{"align":25539},"docker buildx use mybuilder",[2135,29587,29588,29591,29594],{},[2181,29589,29590],{"align":25539},"docker buildx bake",[2181,29592,29593],{"align":25539},"使用 Bake 文件批量构建镜像。",[2181,29595,29596],{"align":25539},"docker buildx bake -f bake.hcl",[2135,29598,29599,29602,29605],{},[2181,29600,29601],{"align":25539},"docker buildx build –push",[2181,29603,29604],{"align":25539},"构建镜像并推送到镜像仓库。",[2181,29606,29607],{"align":25539},"docker buildx build –push -t myimage .",[2135,29609,29610,29613,29616],{},[2181,29611,29612],{"align":25539},"docker buildx build –platform",[2181,29614,29615],{"align":25539},"构建镜像并为多个平台生成支持。",[2181,29617,29618],{"align":25539},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,29620,29621],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,29623,29624],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,29626,29627],{},"docker images 可以查看已经下载的镜像",[19,29629,29630],{},[3304,29631],{"alt":62,"src":29632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,29634,29635],{},[2141,29636,29637],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,29639,29640],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,29642,29643],{},"docker container logs 查看容器日志",[19,29645,29646],{},"docker top 查看容器里的进程",[19,29648,29649],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[57,29651,29653],{"className":25625,"code":29652,"language":25627,"meta":62,"style":62},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[23,29654,29655],{"__ignoreMap":62},[66,29656,29657,29660,29663,29666],{"class":68,"line":69},[66,29658,29659],{"class":3793},"如：docker",[66,29661,29662],{"class":356}," cp",[66,29664,29665],{"class":356}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[66,29667,29668],{"class":356}," \u002Fmydata\u002Fnginx\n",[19,29670,29671],{},"docker run时在启动容器的时候会有几个常用的选项：",[2982,29673,29674,29677,29680],{},[34,29675,29676],{},"-d选项：表示后台运行",[34,29678,29679],{},"-P选项：随机端口映射",[34,29681,29682],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[484,29684,29686],{"id":29685},"_53run命令的参数非常重要",[2141,29687,29688],{},"5.3.run命令的参数（非常重要）",[2129,29690,29691,29704],{},[2132,29692,29693],{},[2135,29694,29695,29698,29701],{},[2138,29696,29697],{"align":25539},"参数\u002F配置",[2138,29699,29700],{"align":25539},"功能说明",[2138,29702,29703],{"align":25539},"重要性与参考依据",[2176,29705,29706,29717,29728,29739,29750,29761,29772,29783,29794,29805,29816,29827,29838,29849,29860],{},[2135,29707,29708,29711,29714],{},[2181,29709,29710],{"align":25539},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[2181,29712,29713],{"align":25539},"指定容器名称，便于后续管理",[2181,29715,29716],{"align":25539},"替代随机生成的容器名。",[2135,29718,29719,29722,29725],{},[2181,29720,29721],{"align":25539},"–gpus all",[2181,29723,29724],{"align":25539},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[2181,29726,29727],{"align":25539},"用于CUDA加速等GPU依赖任务。",[2135,29729,29730,29733,29736],{},[2181,29731,29732],{"align":25539},"-e NVIDIA_DRIVER_CAPABILITIES=all",[2181,29734,29735],{"align":25539},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[2181,29737,29738],{"align":25539},"确保容器内GPU功能完整67。",[2135,29740,29741,29744,29747],{},[2181,29742,29743],{"align":25539},"-dit",[2181,29745,29746],{"align":25539},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[2181,29748,29749],{"align":25539},"允许容器在后台运行并支持交互操作。",[2135,29751,29752,29755,29758],{},[2181,29753,29754],{"align":25539},"–privileged",[2181,29756,29757],{"align":25539},"赋予容器完全主机权限（可访问设备、内核模块等）",[2181,29759,29760],{"align":25539},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[2135,29762,29763,29766,29769],{},[2181,29764,29765],{"align":25539},"–net=host",[2181,29767,29768],{"align":25539},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[2181,29770,29771],{"align":25539},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[2135,29773,29774,29777,29780],{},[2181,29775,29776],{"align":25539},"–group-add audio–group-add video–group-add dialout",[2181,29778,29779],{"align":25539},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[2181,29781,29782],{"align":25539},"避免权限问题（如避免无法调用摄像头、麦克风）。",[2135,29784,29785,29788,29791],{},[2181,29786,29787],{"align":25539},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[2181,29789,29790],{"align":25539},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[2181,29792,29793],{"align":25539},"支持容器内运行图形界面应用（如OpenCV可视化）。",[2135,29795,29796,29799,29802],{},[2181,29797,29798],{"align":25539},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[2181,29800,29801],{"align":25539},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[2181,29803,29804],{"align":25539},"实现容器内图形显示。",[2135,29806,29807,29810,29813],{},[2181,29808,29809],{"align":25539},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[2181,29811,29812],{"align":25539},"挂载X11认证文件（只读）",[2181,29814,29815],{"align":25539},"确保容器有权连接宿主机显示服务。",[2135,29817,29818,29821,29824],{},[2181,29819,29820],{"align":25539},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[2181,29822,29823],{"align":25539},"挂载Wayland显示协议相关目录",[2181,29825,29826],{"align":25539},"支持Wayland协议的图形显示。",[2135,29828,29829,29832,29835],{},[2181,29830,29831],{"align":25539},"–ulimit nofile=1024:524288",[2181,29833,29834],{"align":25539},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[2181,29836,29837],{"align":25539},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[2135,29839,29840,29843,29846],{},[2181,29841,29842],{"align":25539},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[2181,29844,29845],{"align":25539},"挂载宿主机用户目录到容器内同名路径",[2181,29847,29848],{"align":25539},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[2135,29850,29851,29854,29857],{},[2181,29852,29853],{"align":25539},"-w \u002Fhome\u002Ftungchiahui",[2181,29855,29856],{"align":25539},"设置容器启动后的默认工作目录",[2181,29858,29859],{"align":25539},"直接进入项目路径，方便执行命令2324。",[2135,29861,29862,29865,29868],{},[2181,29863,29864],{"align":25539},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[2181,29866,29867],{"align":25539},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[2181,29869,29870],{"align":25539},"提供预配置的深度学习与机器人开发环境。",[19,29872,29873,29874,29876,29877,29880],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[23,29875,26380],{},"加不加",[23,29878,29879],{},"sudo -E","都无所谓。",[19,29882,29883,29884,29886,29887,29889,29890,29893,29894,29896],{},"用户已经被加到docker组了，不用",[23,29885,26380],{},"也行跑，其次，",[23,29888,26380],{},"运行的话，你的",[23,29891,29892],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[23,29895,29892],{},"更不可能变了。",[57,29898,29900],{"className":25625,"code":29899,"language":25627,"meta":62,"style":62},"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",[23,29901,29902,29915,29925,29935,29947,29954,29961,29968,29978,29987,29996,30010,30022,30034,30043,30053,30062,30077,30110,30137,30148,30155],{"__ignoreMap":62},[66,29903,29904,29906,29908,29910,29913],{"class":68,"line":69},[66,29905,26380],{"class":3793},[66,29907,28121],{"class":356},[66,29909,29031],{"class":356},[66,29911,29912],{"class":102}," --name=ros_opencv_cuda",[66,29914,26481],{"class":102},[66,29916,29917,29920,29923],{"class":68,"line":80},[66,29918,29919],{"class":76},"--gpus ",[66,29921,29922],{"class":356},"all",[66,29924,26481],{"class":102},[66,29926,29927,29930,29933],{"class":68,"line":112},[66,29928,29929],{"class":76},"-e ",[66,29931,29932],{"class":356},"NVIDIA_DRIVER_CAPABILITIES=all",[66,29934,26481],{"class":102},[66,29936,29937,29939,29942,29945],{"class":68,"line":129},[66,29938,29929],{"class":76},[66,29940,29941],{"class":356},"DISPLAY=",[66,29943,29944],{"class":76},"$DISPLAY ",[66,29946,27976],{"class":102},[66,29948,29949,29952],{"class":68,"line":138},[66,29950,29951],{"class":76},"-dit ",[66,29953,27976],{"class":102},[66,29955,29956,29959],{"class":68,"line":227},[66,29957,29958],{"class":76},"--privileged ",[66,29960,27976],{"class":102},[66,29962,29963,29966],{"class":68,"line":236},[66,29964,29965],{"class":76},"--net=host ",[66,29967,27976],{"class":102},[66,29969,29970,29973,29976],{"class":68,"line":241},[66,29971,29972],{"class":76},"--group-add ",[66,29974,29975],{"class":356},"audio",[66,29977,26481],{"class":102},[66,29979,29980,29982,29985],{"class":68,"line":372},[66,29981,29972],{"class":76},[66,29983,29984],{"class":356},"video",[66,29986,26481],{"class":102},[66,29988,29989,29991,29994],{"class":68,"line":377},[66,29990,29972],{"class":76},[66,29992,29993],{"class":356},"dialout",[66,29995,26481],{"class":102},[66,29997,29998,30000,30003,30005,30008],{"class":68,"line":392},[66,29999,29929],{"class":76},[66,30001,30002],{"class":356},"XAUTHORITY=",[66,30004,29892],{"class":76},[66,30006,30007],{"class":356},"\u002F.Xauthority",[66,30009,26481],{"class":102},[66,30011,30012,30014,30017,30020],{"class":68,"line":405},[66,30013,29929],{"class":76},[66,30015,30016],{"class":356},"WAYLAND_DISPLAY=",[66,30018,30019],{"class":76},"$WAYLAND_DISPLAY ",[66,30021,27976],{"class":102},[66,30023,30024,30026,30029,30032],{"class":68,"line":418},[66,30025,29929],{"class":76},[66,30027,30028],{"class":356},"XDG_RUNTIME_DIR=",[66,30030,30031],{"class":76},"$XDG_RUNTIME_DIR ",[66,30033,27976],{"class":102},[66,30035,30036,30038,30041],{"class":68,"line":430},[66,30037,29929],{"class":76},[66,30039,30040],{"class":356},"QT_QPA_PLATFORM=xcb",[66,30042,26481],{"class":102},[66,30044,30045,30048,30051],{"class":68,"line":438},[66,30046,30047],{"class":76},"-v ",[66,30049,30050],{"class":356},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[66,30052,26481],{"class":102},[66,30054,30055,30057,30060],{"class":68,"line":465},[66,30056,30047],{"class":76},[66,30058,30059],{"class":356},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[66,30061,26481],{"class":102},[66,30063,30064,30067,30070,30072,30075],{"class":68,"line":1805},[66,30065,30066],{"class":76},"-v $HOME",[66,30068,30069],{"class":356},"\u002F.Xauthority:",[66,30071,29892],{"class":76},[66,30073,30074],{"class":356},"\u002F.Xauthority:ro",[66,30076,26481],{"class":102},[66,30078,30079,30081,30084,30086,30089,30092,30094,30097,30099,30101,30103,30105,30108],{"class":68,"line":1817},[66,30080,30047],{"class":76},[66,30082,30083],{"class":356},"\u002Frun\u002Fuser\u002F",[66,30085,26902],{"class":76},[66,30087,30088],{"class":3793},"id",[66,30090,30091],{"class":102}," -u",[66,30093,2413],{"class":76},[66,30095,30096],{"class":356},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[66,30098,26902],{"class":76},[66,30100,30088],{"class":3793},[66,30102,30091],{"class":102},[66,30104,2413],{"class":76},[66,30106,30107],{"class":356},"\u002Fwayland-0",[66,30109,26481],{"class":102},[66,30111,30112,30114,30116,30118,30120,30122,30124,30127,30129,30131,30133,30135],{"class":68,"line":1822},[66,30113,30047],{"class":76},[66,30115,30083],{"class":356},[66,30117,26902],{"class":76},[66,30119,30088],{"class":3793},[66,30121,30091],{"class":102},[66,30123,2413],{"class":76},[66,30125,30126],{"class":356},":\u002Frun\u002Fuser\u002F",[66,30128,26902],{"class":76},[66,30130,30088],{"class":3793},[66,30132,30091],{"class":102},[66,30134,15519],{"class":76},[66,30136,27976],{"class":102},[66,30138,30139,30141,30143,30146],{"class":68,"line":1829},[66,30140,30066],{"class":76},[66,30142,2838],{"class":356},[66,30144,30145],{"class":76},"$HOME ",[66,30147,27976],{"class":102},[66,30149,30150,30153],{"class":68,"line":3529},[66,30151,30152],{"class":76},"-w $HOME ",[66,30154,27976],{"class":102},[66,30156,30157],{"class":68,"line":3557},[66,30158,30159],{"class":76},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,30161,841],{},[31,30163,30164,30172,30175,30178],{},[34,30165,30166,15600,30168,30171],{},[23,30167,29932],{},[23,30169,30170],{},"--gpus all","没有英伟达显卡请注释。",[34,30173,30174],{},"--name后面请自己为容器起名。",[34,30176,30177],{},"最后一行仓库名称请你自己找对应的镜像填上。",[34,30179,30180,30181,158],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[25356,30182,30183],{},[2141,30184,30185],{},"请不要加",[57,30187,30189],{"className":25625,"code":30188,"language":25627,"meta":62,"style":62},"--ulimit nofile=1024:524288 \\\n",[23,30190,30191],{"__ignoreMap":62},[66,30192,30193,30196,30199],{"class":68,"line":69},[66,30194,30195],{"class":3793},"--ulimit",[66,30197,30198],{"class":356}," nofile=1024:524288",[66,30200,26481],{"class":102},[19,30202,30203,30204,30209],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[25356,30205,30206],{},[2141,30207,30208],{},"不建议","**.**",[57,30211,30213],{"className":25625,"code":30212,"language":25627,"meta":62,"style":62},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[23,30214,30215,30242,30251],{"__ignoreMap":62},[66,30216,30217,30220,30223,30225,30227,30229,30231,30233,30235,30238,30240],{"class":68,"line":69},[66,30218,30219],{"class":3793},"--user",[66,30221,30222],{"class":76}," $(",[66,30224,30088],{"class":3793},[66,30226,30091],{"class":102},[66,30228,2413],{"class":76},[66,30230,2838],{"class":356},[66,30232,26902],{"class":76},[66,30234,30088],{"class":3793},[66,30236,30237],{"class":102}," -g",[66,30239,15519],{"class":76},[66,30241,27976],{"class":102},[66,30243,30244,30246,30249],{"class":68,"line":80},[66,30245,30047],{"class":76},[66,30247,30248],{"class":356},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[66,30250,26481],{"class":102},[66,30252,30253,30255,30258],{"class":68,"line":112},[66,30254,30047],{"class":76},[66,30256,30257],{"class":356},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[66,30259,26481],{"class":102},[1903,30261,30262],{},"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":62,"searchDepth":80,"depth":80,"links":30264},[30265,30266,30267],{"id":29264,"depth":112,"text":29265},{"id":29274,"depth":112,"text":29275},{"id":29685,"depth":112,"text":29688},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":29256,"description":62},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":30274,"title":30275,"body":30276,"description":62,"extension":1927,"meta":31899,"navigation":108,"path":31900,"seo":31901,"stem":31902,"__hash__":31903},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":30277,"toc":31894},[30278,30281,30285,30288,30510,30514,30518,30521,30627,30632,30635,30640,30643,30648,30651,30656,30659,30671,30674,30679,30686,30714,30721,30797,30802,30805,30828,30830,30905,30910,30913,30917,30925,30930,30935,30939,30950,30956,30959,30962,30986,30989,30992,31020,31023,31026,31491,31494,31499,31504,31508,31531,31536,31540,31544,31547,31550,31553,31580,31583,31586,31604,31607,31610,31632,31640,31645,31650,31654,31657,31660,31663,31666,31711,31714,31732,31735,31740,31743,31764,31767,31823,31826,31831,31835,31838,31845,31848,31851,31856,31859,31875,31878,31891],[10,30279,30275],{"id":30280},"_6手动创建docker镜像",[484,30282,30284],{"id":30283},"_61dockerfile","6.1.DockerFile",[19,30286,30287],{},"常用命令：",[2129,30289,30290,30301],{},[2132,30291,30292],{},[2135,30293,30294,30297,30299],{},[2138,30295,30296],{"align":25539},"指令",[2138,30298,27671],{"align":25539},[2138,30300,29293],{"align":25539},[2176,30302,30303,30313,30329,30340,30351,30362,30373,30384,30395,30409,30423,30434,30448,30459,30470,30484,30499],{},[2135,30304,30305,30307,30310],{},[2181,30306,29171],{"align":25539},[2181,30308,30309],{"align":25539},"指定基础镜像，是 Dockerfile 的起点",[2181,30311,30312],{"align":25539},"FROM ubuntu:22.04",[2135,30314,30315,30318,30321],{},[2181,30316,30317],{"align":25539},"LABEL",[2181,30319,30320],{"align":25539},"添加元数据（如作者、版本等）",[2181,30322,30323,30324,30328],{"align":25539},"LABEL maintainer=”",[2229,30325,30327],{"href":30326},"mailto:you@example.com","you@example.com","”",[2135,30330,30331,30334,30337],{},[2181,30332,30333],{"align":25539},"ENV",[2181,30335,30336],{"align":25539},"设置环境变量",[2181,30338,30339],{"align":25539},"ENV PORT=8080",[2135,30341,30342,30345,30348],{},[2181,30343,30344],{"align":25539},"ARG",[2181,30346,30347],{"align":25539},"构建参数，只在构建期间可用",[2181,30349,30350],{"align":25539},"ARG VERSION=1.0",[2135,30352,30353,30356,30359],{},[2181,30354,30355],{"align":25539},"RUN",[2181,30357,30358],{"align":25539},"构建镜像时运行命令",[2181,30360,30361],{"align":25539},"RUN apt-get update && apt-get install -y curl",[2135,30363,30364,30367,30370],{},[2181,30365,30366],{"align":25539},"COPY",[2181,30368,30369],{"align":25539},"复制文件到镜像中",[2181,30371,30372],{"align":25539},"COPY . \u002Fapp",[2135,30374,30375,30378,30381],{},[2181,30376,30377],{"align":25539},"ADD",[2181,30379,30380],{"align":25539},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[2181,30382,30383],{"align":25539},"ADD archive.tar.gz \u002Fdata\u002F",[2135,30385,30386,30389,30392],{},[2181,30387,30388],{"align":25539},"WORKDIR",[2181,30390,30391],{"align":25539},"设置工作目录",[2181,30393,30394],{"align":25539},"WORKDIR \u002Fopt",[2135,30396,30397,30400,30403],{},[2181,30398,30399],{"align":25539},"CMD",[2181,30401,30402],{"align":25539},"设置容器启动时默认命令（可被 docker run 覆盖）",[2181,30404,30405,30406],{"align":25539},"CMD ",[66,30407,30408],{},"“node”, “index.js”",[2135,30410,30411,30414,30417],{},[2181,30412,30413],{"align":25539},"ENTRYPOINT",[2181,30415,30416],{"align":25539},"设置容器启动时固定命令（通常用于 CLI 工具等）",[2181,30418,30419,30420],{"align":25539},"ENTRYPOINT ",[66,30421,30422],{},"“python3”",[2135,30424,30425,30428,30431],{},[2181,30426,30427],{"align":25539},"EXPOSE",[2181,30429,30430],{"align":25539},"声明镜像内服务监听的端口（不会自动映射）",[2181,30432,30433],{"align":25539},"EXPOSE 80",[2135,30435,30436,30439,30442],{},[2181,30437,30438],{"align":25539},"VOLUME",[2181,30440,30441],{"align":25539},"声明数据卷挂载点",[2181,30443,30444,30445],{"align":25539},"VOLUME ",[66,30446,30447],{},"“\u002Fdata”",[2135,30449,30450,30453,30456],{},[2181,30451,30452],{"align":25539},"USER",[2181,30454,30455],{"align":25539},"设置后续命令执行的用户",[2181,30457,30458],{"align":25539},"USER appuser",[2135,30460,30461,30464,30467],{},[2181,30462,30463],{"align":25539},"ONBUILD",[2181,30465,30466],{"align":25539},"当镜像作为其他镜像基础镜像时触发的构建指令",[2181,30468,30469],{"align":25539},"ONBUILD COPY . \u002Fsrc",[2135,30471,30472,30475,30478],{},[2181,30473,30474],{"align":25539},"SHELL",[2181,30476,30477],{"align":25539},"更改默认 shell，比如将 sh -c 改为 bash -c",[2181,30479,30480,30481],{"align":25539},"SHELL ",[66,30482,30483],{},"“\u002Fbin\u002Fbash”, “-c”",[2135,30485,30486,30489,30492],{},[2181,30487,30488],{"align":25539},"HEALTHCHECK",[2181,30490,30491],{"align":25539},"定义容器运行时的健康检查命令",[2181,30493,30494,30495],{"align":25539},"`HEALTHCHECK CMD curl –fail ",[2229,30496,30497],{"href":30497,"rel":30498},"http:\u002F\u002Flocalhost:8080",[25668],[2135,30500,30501,30504,30507],{},[2181,30502,30503],{"align":25539},"STOPSIGNAL",[2181,30505,30506],{"align":25539},"容器停止时发送的信号",[2181,30508,30509],{"align":25539},"STOPSIGNAL SIGKILL",[484,30511,30513],{"id":30512},"_62自己创建容器","6.2.自己创建容器",[23801,30515,30517],{"id":30516},"_621手动创建","6.2.1.手动创建",[19,30519,30520],{},"在x86电脑上编译x86的：",[57,30522,30524],{"className":25625,"code":30523,"language":25627,"meta":62,"style":62},"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",[23,30525,30526,30542,30546,30559,30563,30576,30580,30593,30597,30610,30614],{"__ignoreMap":62},[66,30527,30528,30530,30533,30536,30539],{"class":68,"line":69},[66,30529,28354],{"class":3793},[66,30531,30532],{"class":356}," build",[66,30534,30535],{"class":102}," -t",[66,30537,30538],{"class":356}," ros-melodic-cuda118-cudnn8-bionic:latest",[66,30540,30541],{"class":356}," .\n",[66,30543,30544],{"class":68,"line":80},[66,30545,109],{"emptyLinePlaceholder":108},[66,30547,30548,30550,30552,30554,30557],{"class":68,"line":112},[66,30549,28354],{"class":3793},[66,30551,30532],{"class":356},[66,30553,30535],{"class":102},[66,30555,30556],{"class":356}," ros-noetic-focal:latest",[66,30558,30541],{"class":356},[66,30560,30561],{"class":68,"line":129},[66,30562,109],{"emptyLinePlaceholder":108},[66,30564,30565,30567,30569,30571,30574],{"class":68,"line":138},[66,30566,28354],{"class":3793},[66,30568,30532],{"class":356},[66,30570,30535],{"class":102},[66,30572,30573],{"class":356}," ros-humble-jammy:latest",[66,30575,30541],{"class":356},[66,30577,30578],{"class":68,"line":227},[66,30579,109],{"emptyLinePlaceholder":108},[66,30581,30582,30584,30586,30588,30591],{"class":68,"line":236},[66,30583,28354],{"class":3793},[66,30585,30532],{"class":356},[66,30587,30535],{"class":102},[66,30589,30590],{"class":356}," ros-jazzy-noble:latest",[66,30592,30541],{"class":356},[66,30594,30595],{"class":68,"line":241},[66,30596,109],{"emptyLinePlaceholder":108},[66,30598,30599,30601,30603,30605,30608],{"class":68,"line":372},[66,30600,28354],{"class":3793},[66,30602,30532],{"class":356},[66,30604,30535],{"class":102},[66,30606,30607],{"class":356}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[66,30609,30541],{"class":356},[66,30611,30612],{"class":68,"line":377},[66,30613,109],{"emptyLinePlaceholder":108},[66,30615,30616,30618,30620,30622,30625],{"class":68,"line":392},[66,30617,28354],{"class":3793},[66,30619,30532],{"class":356},[66,30621,30535],{"class":102},[66,30623,30624],{"class":356}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[66,30626,30541],{"class":356},[19,30628,30629],{},[3304,30630],{"alt":62,"src":30631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,30633,30634],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,30636,30637],{},[3304,30638],{"alt":62,"src":30639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,30641,30642],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[31,30644,30645],{},[34,30646,30647],{},"创建 Docker Hub 账户",[19,30649,30650],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[31,30652,30653],{"start":80},[34,30654,30655],{},"登录 Docker Hub",[19,30657,30658],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[57,30660,30662],{"className":25625,"code":30661,"language":25627,"meta":62,"style":62},"docker login\n",[23,30663,30664],{"__ignoreMap":62},[66,30665,30666,30668],{"class":68,"line":69},[66,30667,28354],{"class":3793},[66,30669,30670],{"class":356}," login\n",[19,30672,30673],{},"输入你的 Docker Hub 用户名和密码进行验证。",[31,30675,30676],{},[34,30677,30678],{},"为你的镜像打标签",[19,30680,30681,30682,30685],{},"Docker Hub 使用 ",[23,30683,30684],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[57,30687,30689],{"className":25625,"code":30688,"language":25627,"meta":62,"style":62},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[23,30690,30691],{"__ignoreMap":62},[66,30692,30693,30695,30698,30700,30703,30706,30709,30711],{"class":68,"line":69},[66,30694,28354],{"class":3793},[66,30696,30697],{"class":356}," tag",[66,30699,30590],{"class":356},[66,30701,30702],{"class":72}," \u003C",[66,30704,30705],{"class":356},"你的用户",[66,30707,30708],{"class":76},"名",[66,30710,386],{"class":72},[66,30712,30713],{"class":356},"\u002Fros-jazzy-noble:latest\n",[19,30715,30716,30717,30720],{},"例如，如果你的 Docker Hub 用户名是 ",[23,30718,30719],{},"tungchiahui","，你应该执行：",[57,30722,30724],{"className":25625,"code":30723,"language":25627,"meta":62,"style":62},"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",[23,30725,30726,30737,30741,30752,30756,30767,30771,30782,30786],{"__ignoreMap":62},[66,30727,30728,30730,30732,30734],{"class":68,"line":69},[66,30729,28354],{"class":3793},[66,30731,30697],{"class":356},[66,30733,30556],{"class":356},[66,30735,30736],{"class":356}," tungchiahui\u002Fros-noetic-focal:latest\n",[66,30738,30739],{"class":68,"line":80},[66,30740,109],{"emptyLinePlaceholder":108},[66,30742,30743,30745,30747,30749],{"class":68,"line":112},[66,30744,28354],{"class":3793},[66,30746,30697],{"class":356},[66,30748,30573],{"class":356},[66,30750,30751],{"class":356}," tungchiahui\u002Fros-humble-jammy:latest\n",[66,30753,30754],{"class":68,"line":129},[66,30755,109],{"emptyLinePlaceholder":108},[66,30757,30758,30760,30762,30764],{"class":68,"line":138},[66,30759,28354],{"class":3793},[66,30761,30697],{"class":356},[66,30763,30590],{"class":356},[66,30765,30766],{"class":356}," tungchiahui\u002Fros-jazzy-noble:latest\n",[66,30768,30769],{"class":68,"line":227},[66,30770,109],{"emptyLinePlaceholder":108},[66,30772,30773,30775,30777,30779],{"class":68,"line":236},[66,30774,28354],{"class":3793},[66,30776,30697],{"class":356},[66,30778,30607],{"class":356},[66,30780,30781],{"class":356}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[66,30783,30784],{"class":68,"line":241},[66,30785,109],{"emptyLinePlaceholder":108},[66,30787,30788,30790,30792,30794],{"class":68,"line":372},[66,30789,28354],{"class":3793},[66,30791,30697],{"class":356},[66,30793,30624],{"class":356},[66,30795,30796],{"class":356}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[31,30798,30799],{"start":80},[34,30800,30801],{},"推送镜像到 Docker Hub",[19,30803,30804],{},"使用以下命令将镜像推送到 Docker Hub：",[57,30806,30808],{"className":25625,"code":30807,"language":25627,"meta":62,"style":62},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[23,30809,30810],{"__ignoreMap":62},[66,30811,30812,30814,30817,30819,30821,30823,30825],{"class":68,"line":69},[66,30813,28354],{"class":3793},[66,30815,30816],{"class":356}," push",[66,30818,30702],{"class":72},[66,30820,30705],{"class":356},[66,30822,30708],{"class":76},[66,30824,386],{"class":72},[66,30826,30827],{"class":356},"\u002Fros-noetic-jazzy-noble:latest\n",[19,30829,16438],{},[57,30831,30833],{"className":25625,"code":30832,"language":25627,"meta":62,"style":62},"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",[23,30834,30835,30843,30847,30855,30859,30867,30871,30880,30884,30892,30896],{"__ignoreMap":62},[66,30836,30837,30839,30841],{"class":68,"line":69},[66,30838,28354],{"class":3793},[66,30840,30816],{"class":356},[66,30842,30736],{"class":356},[66,30844,30845],{"class":68,"line":80},[66,30846,109],{"emptyLinePlaceholder":108},[66,30848,30849,30851,30853],{"class":68,"line":112},[66,30850,28354],{"class":3793},[66,30852,30816],{"class":356},[66,30854,30751],{"class":356},[66,30856,30857],{"class":68,"line":129},[66,30858,109],{"emptyLinePlaceholder":108},[66,30860,30861,30863,30865],{"class":68,"line":138},[66,30862,28354],{"class":3793},[66,30864,30816],{"class":356},[66,30866,30766],{"class":356},[66,30868,30869],{"class":68,"line":227},[66,30870,109],{"emptyLinePlaceholder":108},[66,30872,30873,30875,30877],{"class":68,"line":236},[66,30874,28354],{"class":3793},[66,30876,30816],{"class":356},[66,30878,30879],{"class":356}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[66,30881,30882],{"class":68,"line":241},[66,30883,109],{"emptyLinePlaceholder":108},[66,30885,30886,30888,30890],{"class":68,"line":372},[66,30887,28354],{"class":3793},[66,30889,30816],{"class":356},[66,30891,30796],{"class":356},[66,30893,30894],{"class":68,"line":377},[66,30895,109],{"emptyLinePlaceholder":108},[66,30897,30898,30900,30902],{"class":68,"line":392},[66,30899,28354],{"class":3793},[66,30901,30816],{"class":356},[66,30903,30904],{"class":356}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[31,30906,30907],{"start":112},[34,30908,30909],{},"验证推送成功",[19,30911,30912],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,30914,30915],{},[2141,30916,5601],{},[2982,30918,30919,30922],{},[34,30920,30921],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[34,30923,30924],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,30926,30927],{},[3304,30928],{"alt":62,"src":30929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,30931,30932],{},[3304,30933],{"alt":62,"src":30934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[23801,30936,30938],{"id":30937},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,30940,30941,30942,30945,30946,30949],{},"如果您想在 ",[2141,30943,30944],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[2141,30947,30948],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,30951,30952,30953],{},"1. ",[2141,30954,30955],{},"启用 Docker 跨平台构建",[19,30957,30958],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,30960,30961],{},"第一步：启用 buildx（只需执行一次）",[57,30963,30965],{"className":25625,"code":30964,"language":25627,"meta":62,"style":62},"docker buildx create --name multiarch_builder --use\n",[23,30966,30967],{"__ignoreMap":62},[66,30968,30969,30971,30974,30977,30980,30983],{"class":68,"line":69},[66,30970,28354],{"class":3793},[66,30972,30973],{"class":356}," buildx",[66,30975,30976],{"class":356}," create",[66,30978,30979],{"class":102}," --name",[66,30981,30982],{"class":356}," multiarch_builder",[66,30984,30985],{"class":102}," --use\n",[19,30987,30988],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,30990,30991],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[57,30993,30995],{"className":25625,"code":30994,"language":25627,"meta":62,"style":62},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[23,30996,30997],{"__ignoreMap":62},[66,30998,30999,31001,31003,31005,31008,31011,31014,31017],{"class":68,"line":69},[66,31000,28354],{"class":3793},[66,31002,29031],{"class":356},[66,31004,29034],{"class":102},[66,31006,31007],{"class":102}," --privileged",[66,31009,31010],{"class":356}," multiarch\u002Fqemu-user-static",[66,31012,31013],{"class":102}," --reset",[66,31015,31016],{"class":102}," -p",[66,31018,31019],{"class":356}," yes\n",[19,31021,31022],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,31024,31025],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[57,31027,31029],{"className":25625,"code":31028,"language":25627,"meta":62,"style":62},"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",[23,31030,31031,31073,31077,31082,31092,31102,31111,31117,31121,31125,31135,31143,31152,31158,31162,31166,31176,31184,31193,31199,31203,31207,31217,31225,31234,31240,31244,31248,31258,31266,31275,31281,31285,31289,31299,31307,31316,31322,31326,31330,31340,31348,31357,31363,31367,31371,31381,31389,31398,31404,31408,31412,31422,31430,31439,31445,31449,31453,31464,31472,31481,31487],{"__ignoreMap":62},[66,31032,31033,31035,31037,31039,31042,31045,31047,31049,31052,31054,31056,31058,31060,31063,31066,31068,31071],{"class":68,"line":69},[66,31034,28354],{"class":3793},[66,31036,30973],{"class":356},[66,31038,30532],{"class":356},[66,31040,31041],{"class":102}," --platform",[66,31043,31044],{"class":356}," linux\u002Famd64,linux\u002Farm64",[66,31046,30535],{"class":102},[66,31048,30702],{"class":72},[66,31050,31051],{"class":356},"你的镜像",[66,31053,30708],{"class":76},[66,31055,386],{"class":72},[66,31057,2838],{"class":356},[66,31059,413],{"class":72},[66,31061,31062],{"class":356},"标",[66,31064,31065],{"class":76},"签",[66,31067,386],{"class":72},[66,31069,31070],{"class":102}," --push",[66,31072,30541],{"class":356},[66,31074,31075],{"class":68,"line":80},[66,31076,109],{"emptyLinePlaceholder":108},[66,31078,31079],{"class":68,"line":112},[66,31080,31081],{"class":758},"# 例子：\n",[66,31083,31084,31086,31088,31090],{"class":68,"line":129},[66,31085,28354],{"class":3793},[66,31087,30973],{"class":356},[66,31089,30532],{"class":356},[66,31091,26481],{"class":102},[66,31093,31094,31097,31100],{"class":68,"line":138},[66,31095,31096],{"class":76},"--platform ",[66,31098,31099],{"class":356},"linux\u002Famd64,linux\u002Farm64",[66,31101,26481],{"class":102},[66,31103,31104,31106,31109],{"class":68,"line":227},[66,31105,30535],{"class":102},[66,31107,31108],{"class":356}," tungchiahui\u002Fros:noetic-focal",[66,31110,26481],{"class":102},[66,31112,31113,31115],{"class":68,"line":236},[66,31114,31070],{"class":102},[66,31116,26481],{"class":102},[66,31118,31119],{"class":68,"line":241},[66,31120,30541],{"class":356},[66,31122,31123],{"class":68,"line":372},[66,31124,109],{"emptyLinePlaceholder":108},[66,31126,31127,31129,31131,31133],{"class":68,"line":377},[66,31128,28354],{"class":3793},[66,31130,30973],{"class":356},[66,31132,30532],{"class":356},[66,31134,26481],{"class":102},[66,31136,31137,31139,31141],{"class":68,"line":392},[66,31138,31096],{"class":76},[66,31140,31099],{"class":356},[66,31142,26481],{"class":102},[66,31144,31145,31147,31150],{"class":68,"line":405},[66,31146,30535],{"class":102},[66,31148,31149],{"class":356}," tungchiahui\u002Fros:humble-jammy",[66,31151,26481],{"class":102},[66,31153,31154,31156],{"class":68,"line":418},[66,31155,31070],{"class":102},[66,31157,26481],{"class":102},[66,31159,31160],{"class":68,"line":430},[66,31161,30541],{"class":356},[66,31163,31164],{"class":68,"line":438},[66,31165,109],{"emptyLinePlaceholder":108},[66,31167,31168,31170,31172,31174],{"class":68,"line":465},[66,31169,28354],{"class":3793},[66,31171,30973],{"class":356},[66,31173,30532],{"class":356},[66,31175,26481],{"class":102},[66,31177,31178,31180,31182],{"class":68,"line":1805},[66,31179,31096],{"class":76},[66,31181,31099],{"class":356},[66,31183,26481],{"class":102},[66,31185,31186,31188,31191],{"class":68,"line":1817},[66,31187,30535],{"class":102},[66,31189,31190],{"class":356}," tungchiahui\u002Fros:jazzy-noble",[66,31192,26481],{"class":102},[66,31194,31195,31197],{"class":68,"line":1822},[66,31196,31070],{"class":102},[66,31198,26481],{"class":102},[66,31200,31201],{"class":68,"line":1829},[66,31202,30541],{"class":356},[66,31204,31205],{"class":68,"line":3529},[66,31206,109],{"emptyLinePlaceholder":108},[66,31208,31209,31211,31213,31215],{"class":68,"line":3557},[66,31210,28121],{"class":3793},[66,31212,30973],{"class":356},[66,31214,30532],{"class":356},[66,31216,26481],{"class":102},[66,31218,31219,31221,31223],{"class":68,"line":3562},[66,31220,31096],{"class":76},[66,31222,31099],{"class":356},[66,31224,26481],{"class":102},[66,31226,31227,31229,31232],{"class":68,"line":3579},[66,31228,30535],{"class":102},[66,31230,31231],{"class":356}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[66,31233,26481],{"class":102},[66,31235,31236,31238],{"class":68,"line":3584},[66,31237,31070],{"class":102},[66,31239,26481],{"class":102},[66,31241,31242],{"class":68,"line":3589},[66,31243,30541],{"class":356},[66,31245,31246],{"class":68,"line":3594},[66,31247,109],{"emptyLinePlaceholder":108},[66,31249,31250,31252,31254,31256],{"class":68,"line":3608},[66,31251,28354],{"class":3793},[66,31253,30973],{"class":356},[66,31255,30532],{"class":356},[66,31257,26481],{"class":102},[66,31259,31260,31262,31264],{"class":68,"line":3613},[66,31261,31096],{"class":76},[66,31263,31099],{"class":356},[66,31265,26481],{"class":102},[66,31267,31268,31270,31273],{"class":68,"line":4401},[66,31269,30535],{"class":102},[66,31271,31272],{"class":356}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[66,31274,26481],{"class":102},[66,31276,31277,31279],{"class":68,"line":4415},[66,31278,31070],{"class":102},[66,31280,26481],{"class":102},[66,31282,31283],{"class":68,"line":4423},[66,31284,30541],{"class":356},[66,31286,31287],{"class":68,"line":4428},[66,31288,109],{"emptyLinePlaceholder":108},[66,31290,31291,31293,31295,31297],{"class":68,"line":4434},[66,31292,28121],{"class":3793},[66,31294,30973],{"class":356},[66,31296,30532],{"class":356},[66,31298,26481],{"class":102},[66,31300,31301,31303,31305],{"class":68,"line":4440},[66,31302,31096],{"class":76},[66,31304,31099],{"class":356},[66,31306,26481],{"class":102},[66,31308,31309,31311,31314],{"class":68,"line":4445},[66,31310,30535],{"class":102},[66,31312,31313],{"class":356}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[66,31315,26481],{"class":102},[66,31317,31318,31320],{"class":68,"line":9759},[66,31319,31070],{"class":102},[66,31321,26481],{"class":102},[66,31323,31324],{"class":68,"line":9783},[66,31325,30541],{"class":356},[66,31327,31328],{"class":68,"line":9788},[66,31329,109],{"emptyLinePlaceholder":108},[66,31331,31332,31334,31336,31338],{"class":68,"line":9794},[66,31333,28354],{"class":3793},[66,31335,30973],{"class":356},[66,31337,30532],{"class":356},[66,31339,26481],{"class":102},[66,31341,31342,31344,31346],{"class":68,"line":9821},[66,31343,31096],{"class":76},[66,31345,31099],{"class":356},[66,31347,26481],{"class":102},[66,31349,31350,31352,31355],{"class":68,"line":9826},[66,31351,30535],{"class":102},[66,31353,31354],{"class":356}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[66,31356,26481],{"class":102},[66,31358,31359,31361],{"class":68,"line":9832},[66,31360,31070],{"class":102},[66,31362,26481],{"class":102},[66,31364,31365],{"class":68,"line":9844},[66,31366,30541],{"class":356},[66,31368,31369],{"class":68,"line":9856},[66,31370,109],{"emptyLinePlaceholder":108},[66,31372,31373,31375,31377,31379],{"class":68,"line":9868},[66,31374,28354],{"class":3793},[66,31376,30973],{"class":356},[66,31378,30532],{"class":356},[66,31380,26481],{"class":102},[66,31382,31383,31385,31387],{"class":68,"line":11523},[66,31384,31096],{"class":76},[66,31386,31099],{"class":356},[66,31388,26481],{"class":102},[66,31390,31391,31393,31396],{"class":68,"line":11548},[66,31392,30535],{"class":102},[66,31394,31395],{"class":356}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[66,31397,26481],{"class":102},[66,31399,31400,31402],{"class":68,"line":11571},[66,31401,31070],{"class":102},[66,31403,26481],{"class":102},[66,31405,31406],{"class":68,"line":11595},[66,31407,30541],{"class":356},[66,31409,31410],{"class":68,"line":11600},[66,31411,109],{"emptyLinePlaceholder":108},[66,31413,31414,31416,31418,31420],{"class":68,"line":11605},[66,31415,28121],{"class":3793},[66,31417,30973],{"class":356},[66,31419,30532],{"class":356},[66,31421,26481],{"class":102},[66,31423,31424,31426,31428],{"class":68,"line":11610},[66,31425,31096],{"class":76},[66,31427,31099],{"class":356},[66,31429,26481],{"class":102},[66,31431,31432,31434,31437],{"class":68,"line":11619},[66,31433,30535],{"class":102},[66,31435,31436],{"class":356}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[66,31438,26481],{"class":102},[66,31440,31441,31443],{"class":68,"line":11624},[66,31442,31070],{"class":102},[66,31444,26481],{"class":102},[66,31446,31447],{"class":68,"line":11630},[66,31448,30541],{"class":356},[66,31450,31451],{"class":68,"line":11651},[66,31452,109],{"emptyLinePlaceholder":108},[66,31454,31455,31458,31460,31462],{"class":68,"line":11657},[66,31456,31457],{"class":3793},"  docker",[66,31459,30973],{"class":356},[66,31461,30532],{"class":356},[66,31463,26481],{"class":102},[66,31465,31466,31468,31470],{"class":68,"line":11671},[66,31467,31096],{"class":76},[66,31469,31099],{"class":356},[66,31471,26481],{"class":102},[66,31473,31474,31476,31479],{"class":68,"line":11677},[66,31475,30535],{"class":102},[66,31477,31478],{"class":356}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[66,31480,26481],{"class":102},[66,31482,31483,31485],{"class":68,"line":11704},[66,31484,31070],{"class":102},[66,31486,26481],{"class":102},[66,31488,31489],{"class":68,"line":11713},[66,31490,30541],{"class":356},[19,31492,31493],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,31495,31496],{},[3304,31497],{"alt":62,"src":31498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,31500,31501],{},[3304,31502],{"alt":62,"src":31503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[23801,31505,31507],{"id":31506},"_623清除构建缓存","6.2.3.清除构建缓存",[57,31509,31511],{"className":25625,"code":31510,"language":25627,"meta":62,"style":62},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[23,31512,31513,31518],{"__ignoreMap":62},[66,31514,31515],{"class":68,"line":69},[66,31516,31517],{"class":758},"# 清理BuildKit构建缓存\n",[66,31519,31520,31522,31525,31528],{"class":68,"line":80},[66,31521,28354],{"class":3793},[66,31523,31524],{"class":356}," builder",[66,31526,31527],{"class":356}," prune",[66,31529,31530],{"class":102}," -f\n",[19,31532,31533],{},[3304,31534],{"alt":62,"src":31535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[484,31537,31539],{"id":31538},"_63补充","6.3.补充",[23801,31541,31543],{"id":31542},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,31545,31546],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,31548,31549],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,31551,31552],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[57,31554,31556],{"className":25625,"code":31555,"language":25627,"meta":62,"style":62},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[23,31557,31558,31565],{"__ignoreMap":62},[66,31559,31560,31562],{"class":68,"line":69},[66,31561,29171],{"class":3793},[66,31563,31564],{"class":356}," nginx\n",[66,31566,31567,31569,31572,31575,31577],{"class":68,"line":80},[66,31568,30355],{"class":3793},[66,31570,31571],{"class":356}," echo",[66,31573,31574],{"class":356}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[66,31576,28023],{"class":72},[66,31578,31579],{"class":356}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,31581,31582],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,31584,31585],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[57,31587,31589],{"className":25625,"code":31588,"language":25627,"meta":62,"style":62},"docker build -t nginx:tuling .\n",[23,31590,31591],{"__ignoreMap":62},[66,31592,31593,31595,31597,31599,31602],{"class":68,"line":69},[66,31594,28354],{"class":3793},[66,31596,30532],{"class":356},[66,31598,30535],{"class":102},[66,31600,31601],{"class":356}," nginx:tuling",[66,31603,30541],{"class":356},[19,31605,31606],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,31608,31609],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[57,31611,31613],{"className":25625,"code":31612,"language":25627,"meta":62,"style":62},"docker run -d -p 92:80 nginx:tuling\n",[23,31614,31615],{"__ignoreMap":62},[66,31616,31617,31619,31621,31624,31626,31629],{"class":68,"line":69},[66,31618,28354],{"class":3793},[66,31620,29031],{"class":356},[66,31622,31623],{"class":102}," -d",[66,31625,31016],{"class":102},[66,31627,31628],{"class":356}," 92:80",[66,31630,31631],{"class":356}," nginx:tuling\n",[19,31633,31634,31635],{},"4、访问 ",[2229,31636,31639],{"href":31637,"rel":31638},"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",[25668],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,31641,31642],{},[3304,31643],{"alt":62,"src":31644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,31646,31647],{},[3304,31648],{"alt":62,"src":31649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[23801,31651,31653],{"id":31652},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,31655,31656],{},"只需要知道大体流程即可",[19,31658,31659],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,31661,31662],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,31664,31665],{},"2、在Dockerfile中添加以下内容",[57,31667,31669],{"className":27892,"code":31668,"language":27894,"meta":62,"style":62},"# 基于哪个镜像\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",[23,31670,31671,31676,31681,31686,31691,31696,31701,31706],{"__ignoreMap":62},[66,31672,31673],{"class":68,"line":69},[66,31674,31675],{},"# 基于哪个镜像\n",[66,31677,31678],{"class":68,"line":80},[66,31679,31680],{},"From java:8\n",[66,31682,31683],{"class":68,"line":112},[66,31684,31685],{},"# 复制文件到容器\n",[66,31687,31688],{"class":68,"line":129},[66,31689,31690],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[66,31692,31693],{"class":68,"line":138},[66,31694,31695],{},"# 声明需要暴露的端口\n",[66,31697,31698],{"class":68,"line":227},[66,31699,31700],{},"EXPOSE 8877\n",[66,31702,31703],{"class":68,"line":236},[66,31704,31705],{},"# 配置容器启动后执行的命令\n",[66,31707,31708],{"class":68,"line":241},[66,31709,31710],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,31712,31713],{},"3、使用docker build命令构建镜像",[57,31715,31717],{"className":25625,"code":31716,"language":25627,"meta":62,"style":62},"docker build -t tulingmall-member:0.0.5 .\n",[23,31718,31719],{"__ignoreMap":62},[66,31720,31721,31723,31725,31727,31730],{"class":68,"line":69},[66,31722,28354],{"class":3793},[66,31724,30532],{"class":356},[66,31726,30535],{"class":102},[66,31728,31729],{"class":356}," tulingmall-member:0.0.5",[66,31731,30541],{"class":356},[19,31733,31734],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,31736,31737],{},[3304,31738],{"alt":62,"src":31739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,31741,31742],{},"4、启动镜像，加-d可在后台启动",[57,31744,31746],{"className":25625,"code":31745,"language":25627,"meta":62,"style":62},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[23,31747,31748],{"__ignoreMap":62},[66,31749,31750,31752,31754,31756,31758,31761],{"class":68,"line":69},[66,31751,28354],{"class":3793},[66,31753,29031],{"class":356},[66,31755,31623],{"class":102},[66,31757,31016],{"class":102},[66,31759,31760],{"class":356}," 8877:8877",[66,31762,31763],{"class":356}," tulingmall-member:0.0.5\n",[19,31765,31766],{},"加上JVM参数：",[57,31768,31770],{"className":25625,"code":31769,"language":25627,"meta":62,"style":62},"# --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",[23,31771,31772,31777,31792,31802,31811,31818],{"__ignoreMap":62},[66,31773,31774],{"class":68,"line":69},[66,31775,31776],{"class":758},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[66,31778,31779,31781,31783,31786,31788,31790],{"class":68,"line":80},[66,31780,28354],{"class":3793},[66,31782,29031],{"class":356},[66,31784,31785],{"class":102},"  -d",[66,31787,31016],{"class":102},[66,31789,31760],{"class":356},[66,31791,26481],{"class":102},[66,31793,31794,31796,31799],{"class":68,"line":112},[66,31795,29929],{"class":76},[66,31797,31798],{"class":356},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[66,31800,31801],{"class":102},"  \\\n",[66,31803,31804,31806,31809],{"class":68,"line":129},[66,31805,29929],{"class":76},[66,31807,31808],{"class":356},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[66,31810,31801],{"class":102},[66,31812,31813,31816],{"class":68,"line":138},[66,31814,31815],{"class":76},"--cap-add=SYS_PTRACE  ",[66,31817,27976],{"class":102},[66,31819,31820],{"class":68,"line":227},[66,31821,31822],{"class":76},"tulingmall-member:0.0.5\n",[19,31824,31825],{},"5、访问会员服务接口",[19,31827,31828],{},[3304,31829],{"alt":62,"src":31830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[23801,31832,31834],{"id":31833},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,31836,31837],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,31839,31840,31841],{},"阿里云docker镜像仓库：",[2229,31842,31843],{"href":31843,"rel":31844},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[25668],[19,31846,31847],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,31849,31850],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,31852,31853],{},[3304,31854],{"alt":62,"src":31855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,31857,31858],{},"要把镜像推送到镜像仓库",[57,31860,31862],{"className":25625,"code":31861,"language":25627,"meta":62,"style":62},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[23,31863,31864],{"__ignoreMap":62},[66,31865,31866,31868,31870,31872],{"class":68,"line":69},[66,31867,28354],{"class":3793},[66,31869,30697],{"class":356},[66,31871,31729],{"class":356},[66,31873,31874],{"class":356}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,31876,31877],{},"最后将镜像推送到远程仓库",[57,31879,31881],{"className":25625,"code":31880,"language":25627,"meta":62,"style":62},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[23,31882,31883],{"__ignoreMap":62},[66,31884,31885,31887,31889],{"class":68,"line":69},[66,31886,28354],{"class":3793},[66,31888,30816],{"class":356},[66,31890,31874],{"class":356},[1903,31892,31893],{},"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":62,"searchDepth":80,"depth":80,"links":31895},[31896,31897,31898],{"id":30283,"depth":112,"text":30284},{"id":30512,"depth":112,"text":30513},{"id":31538,"depth":112,"text":31539},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":30275,"description":62},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":31905,"title":31906,"body":31907,"description":62,"extension":1927,"meta":32050,"navigation":108,"path":32051,"seo":32052,"stem":32053,"__hash__":32054},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":31908,"toc":32048},[31909,31912,31917,31922,31925,31930,31935,31938,31943,31948,31951,31956,31959,31962,31965,31968,31971,31974,31994,32016,32019,32022,32042,32045],[10,31910,31906],{"id":31911},"_7vscode远程开发",[31,31913,31914],{},[34,31915,31916],{},"插件1：微软Docker工具",[19,31918,31919],{},[3304,31920],{"alt":62,"src":31921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,31923,31924],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,31926,31927],{},[3304,31928],{"alt":62,"src":31929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[31,31931,31932],{"start":80},[34,31933,31934],{},"插件2：微软Docker远程开发工具",[19,31936,31937],{},"下面这是远程开发的插件。",[19,31939,31940],{},[3304,31941],{"alt":62,"src":31942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,31944,31945],{},[3304,31946],{"alt":62,"src":31947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,31949,31950],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,31952,31953],{},[3304,31954],{"alt":62,"src":31955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,31957,31958],{},"安装完拓展之后，vscode进行链接：",[19,31960,31961],{},"1.按ctrl+shift+p",[19,31963,31964],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,31966,31967],{},"3.选择目前运行的容器",[19,31969,31970],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,31972,31973],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[57,31975,31977],{"className":25625,"code":31976,"language":25627,"meta":62,"style":62},"docker run -v 主机目录:容器目录 image-name\n",[23,31978,31979],{"__ignoreMap":62},[66,31980,31981,31983,31985,31988,31991],{"class":68,"line":69},[66,31982,28354],{"class":3793},[66,31984,29031],{"class":356},[66,31986,31987],{"class":102}," -v",[66,31989,31990],{"class":356}," 主机目录:容器目录",[66,31992,31993],{"class":356}," image-name\n",[57,31995,31997],{"className":25625,"code":31996,"language":25627,"meta":62,"style":62},"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",[23,31998,31999],{"__ignoreMap":62},[66,32000,32001,32003,32005,32008,32010,32013],{"class":68,"line":69},[66,32002,28354],{"class":3793},[66,32004,29031],{"class":356},[66,32006,32007],{"class":102}," -it",[66,32009,31987],{"class":102},[66,32011,32012],{"class":356}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[66,32014,32015],{"class":356}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,32017,32018],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,32020,32021],{},"查看挂载情况：",[57,32023,32025],{"className":25625,"code":32024,"language":25627,"meta":62,"style":62},"mount | grep -i project\n",[23,32026,32027],{"__ignoreMap":62},[66,32028,32029,32032,32034,32037,32039],{"class":68,"line":69},[66,32030,32031],{"class":3793},"mount",[66,32033,26912],{"class":72},[66,32035,32036],{"class":3793}," grep",[66,32038,28231],{"class":102},[66,32040,32041],{"class":356}," project\n",[19,32043,32044],{},"也可以通过ls来进行查看",[1903,32046,32047],{},"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":62,"searchDepth":80,"depth":80,"links":32049},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":31906,"description":62},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":32056,"title":32057,"body":32058,"description":1926,"extension":1927,"meta":32062,"navigation":108,"path":32064,"seo":32065,"stem":32066,"__hash__":32067},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":32059,"toc":32060},[],{"title":62,"searchDepth":80,"depth":80,"links":32061},[],{"category":32063},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":32057,"description":1926},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":32069,"title":32070,"body":32071,"description":1926,"extension":1927,"meta":32075,"navigation":108,"path":32076,"seo":32077,"stem":32078,"__hash__":32079},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":32072,"toc":32073},[],{"title":62,"searchDepth":80,"depth":80,"links":32074},[],{"category":32063},"\u002Fwiki\u002F2025-11-10-k8s",{"title":32070,"description":1926},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":32081,"title":32082,"body":32083,"description":1926,"extension":1927,"meta":32371,"navigation":108,"path":32372,"seo":32373,"stem":32374,"__hash__":32375},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":32084,"toc":32369},[32085,32088,32096,32111,32116,32167,32170,32176,32358,32363,32366],[10,32086,32082],{"id":32087},"_1验证深度学习环境",[19,32089,32090,32091],{},"关于环境的安装，看",[2229,32092,32095],{"href":32093,"rel":32094},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[25668],"Pytorch-->深度学习",[19,32097,32098,32099,32102,32103,32106,32107,32110],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[23,32100,32101],{},"pytorch-cuda=12.4"," 是一个“ ",[2141,32104,32105],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[2141,32108,32109],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,32112,32113],{},[3304,32114],{"alt":62,"src":32115},"\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",[57,32117,32119],{"className":25625,"code":32118,"language":25627,"meta":62,"style":62},"# 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",[23,32120,32121,32126],{"__ignoreMap":62},[66,32122,32123],{"class":68,"line":69},[66,32124,32125],{"class":758},"# CUDA 12.4\n",[66,32127,32128,32131,32133,32136,32139,32142,32145,32148,32150,32153,32156,32159,32162,32164],{"class":68,"line":80},[66,32129,32130],{"class":3793},"conda",[66,32132,25637],{"class":356},[66,32134,32135],{"class":356}," pytorch==",[66,32137,32138],{"class":102},"2.5.1",[66,32140,32141],{"class":356}," torchvision==",[66,32143,32144],{"class":102},"0.20.1",[66,32146,32147],{"class":356}," torchaudio==",[66,32149,32138],{"class":102},[66,32151,32152],{"class":356}," pytorch-cuda=",[66,32154,32155],{"class":102},"12.4",[66,32157,32158],{"class":102}," -c",[66,32160,32161],{"class":356}," pytorch",[66,32163,32158],{"class":102},[66,32165,32166],{"class":356}," nvidia\n",[19,32168,32169],{},"）：",[19,32171,32172],{},[2229,32173,32174],{"href":32174,"rel":32175},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[25668],[57,32177,32179],{"className":59,"code":32178,"language":61,"meta":62,"style":62},"# 对深度学习环境进行测试\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",[23,32180,32181,32186,32193,32198,32208,32223,32228,32238,32275,32282,32293,32309,32314,32324,32336,32346],{"__ignoreMap":62},[66,32182,32183],{"class":68,"line":69},[66,32184,32185],{"class":758},"# 对深度学习环境进行测试\n",[66,32187,32188,32190],{"class":68,"line":80},[66,32189,284],{"class":72},[66,32191,32192],{"class":76}," torch\n",[66,32194,32195],{"class":68,"line":112},[66,32196,32197],{"class":758},"# 查看cuda是否被激活\n",[66,32199,32200,32203,32205],{"class":68,"line":129},[66,32201,32202],{"class":76},"flag",[66,32204,99],{"class":72},[66,32206,32207],{"class":76},"torch.cuda.is_available()\n",[66,32209,32210,32212,32214,32217,32220],{"class":68,"line":138},[66,32211,244],{"class":102},[66,32213,348],{"class":76},[66,32215,32216],{"class":356},"\"cuda:\"",[66,32218,32219],{"class":76},", flag)   ",[66,32221,32222],{"class":758},"#返回true的话说明被激活\n",[66,32224,32225],{"class":68,"line":227},[66,32226,32227],{"class":758},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[66,32229,32230,32233,32235],{"class":68,"line":236},[66,32231,32232],{"class":76},"ngpu",[66,32234,99],{"class":72},[66,32236,32237],{"class":102},"1\n",[66,32239,32240,32243,32245,32248,32251,32253,32256,32259,32262,32264,32266,32268,32270,32273],{"class":68,"line":241},[66,32241,32242],{"class":76},"device",[66,32244,99],{"class":72},[66,32246,32247],{"class":76},"torch.device(",[66,32249,32250],{"class":356},"\"cuda:0\"",[66,32252,3534],{"class":72},[66,32254,32255],{"class":76},"(torch.cuda.is_available() ",[66,32257,32258],{"class":72},"and",[66,32260,32261],{"class":76}," ngpu",[66,32263,386],{"class":72},[66,32265,2183],{"class":102},[66,32267,15519],{"class":76},[66,32269,1292],{"class":72},[66,32271,32272],{"class":356}," \"cpu\"",[66,32274,313],{"class":76},[66,32276,32277,32279],{"class":68,"line":372},[66,32278,244],{"class":102},[66,32280,32281],{"class":76},"(device)\n",[66,32283,32284,32286,32289,32291],{"class":68,"line":377},[66,32285,244],{"class":102},[66,32287,32288],{"class":76},"(torch.cuda.get_device_name(",[66,32290,2183],{"class":102},[66,32292,360],{"class":76},[66,32294,32295,32297,32300,32302,32304,32306],{"class":68,"line":392},[66,32296,244],{"class":102},[66,32298,32299],{"class":76},"(torch.rand(",[66,32301,1520],{"class":102},[66,32303,2362],{"class":76},[66,32305,1520],{"class":102},[66,32307,32308],{"class":76},").cuda())\n",[66,32310,32311],{"class":68,"line":405},[66,32312,32313],{"class":758},"# 查看cuda和cudnn的版本\n",[66,32315,32316,32319,32321],{"class":68,"line":418},[66,32317,32318],{"class":76},"cuda_version",[66,32320,99],{"class":72},[66,32322,32323],{"class":76},"torch.version.cuda\n",[66,32325,32326,32328,32330,32333],{"class":68,"line":430},[66,32327,244],{"class":102},[66,32329,348],{"class":76},[66,32331,32332],{"class":356},"\"cuda version\"",[66,32334,32335],{"class":76},",cuda_version)\n",[66,32337,32338,32341,32343],{"class":68,"line":438},[66,32339,32340],{"class":76},"cudnn_version",[66,32342,99],{"class":72},[66,32344,32345],{"class":76},"torch.backends.cudnn.version()\n",[66,32347,32348,32350,32352,32355],{"class":68,"line":465},[66,32349,244],{"class":102},[66,32351,348],{"class":76},[66,32353,32354],{"class":356},"\"cudnn version\"",[66,32356,32357],{"class":76},",cudnn_version)\n",[19,32359,32360],{},[3304,32361],{"alt":62,"src":32362},"\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,32364,32365],{},"cuda:0 指的是一块显卡",[1903,32367,32368],{},"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":62,"searchDepth":80,"depth":80,"links":32370},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":32082,"description":1926},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":32377,"title":32378,"body":32379,"description":1926,"extension":1927,"meta":52172,"navigation":108,"path":52173,"seo":52174,"stem":52175,"__hash__":52176},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":32380,"toc":52166},[32381,32384,32388,32392,32395,32400,32405,32408,32413,32418,32423,32426,32430,32435,32439,32444,32447,32452,32455,32458,32461,32464,32469,32472,32477,32482,32487,32492,32495,32499,32502,32507,33109,33114,33117,33122,33125,33128,33591,33594,33597,33600,33603,35650,35653,35658,35663,36458,36461,36466,37244,37248,38907,38911,39625,39629,39633,39638,39643,39648,39651,39656,39661,39666,39671,39676,39680,39685,40967,40972,40975,40978,40981,41135,41138,41141,42357,42362,43057,43061,43065,43070,43075,43078,43083,43088,43093,43098,43103,43108,43113,43118,43123,43128,43133,43138,43143,43148,43153,43158,43163,43168,43173,43178,43183,43188,43193,43198,43203,43208,43213,43218,43223,43228,43232,43236,43239,44717,44721,46368,46372,47066,47070,47073,47076,47618,47621,47625,47628,49025,49029,49032,49609,51396,51400,51403,52163],[10,32382,32378],{"id":32383},"_2经典神经网络",[484,32385,32387],{"id":32386},"_21lenet与alexnet","2.1.LeNet与AlexNet",[23801,32389,32391],{"id":32390},"_211原理介绍","2.1.1.原理介绍",[19,32393,32394],{},"LeNet-5",[31,32396,32397],{},[34,32398,32399],{},"原理",[19,32401,32402],{},[3304,32403],{"alt":62,"src":32404},"\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,32406,32407],{},"B是batch批次；C是channel通道",[31,32409,32410],{"start":80},[34,32411,32412],{},"网络参数详细",[19,32414,32415],{},[3304,32416],{"alt":62,"src":32417},"\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,32419,32420],{},[3304,32421],{"alt":62,"src":32422},"\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,32424,32425],{},"AlexNet",[31,32427,32428],{},[34,32429,32399],{},[19,32431,32432],{},[3304,32433],{"alt":62,"src":32434},"\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",[31,32436,32437],{"start":80},[34,32438,32412],{},[19,32440,32441],{},[3304,32442],{"alt":62,"src":32443},"\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,32445,32446],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,32448,32449],{},[3304,32450],{"alt":62,"src":32451},"\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,32453,32454],{},"数据处理中的图像增强操作:",[19,32456,32457],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,32459,32460],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,32462,32463],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,32465,32466],{},[3304,32467],{"alt":62,"src":32468},"\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,32470,32471],{},"提升网络精确度的方法：LRN正则化",[19,32473,32474],{},[3304,32475],{"alt":62,"src":32476},"\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,32478,32479],{},[3304,32480],{"alt":62,"src":32481},"\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",[31,32483,32484],{"start":112},[34,32485,32486],{},"AlexNet的总结",[19,32488,32489],{},[3304,32490],{"alt":62,"src":32491},"\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,32493,32494],{},"比LeNet模型要深一丢丢",[23801,32496,32498],{"id":32497},"_212代码实现","2.1.2.代码实现",[19,32500,32501],{},"（1）LeNet",[31,32503,32504],{},[34,32505,32506],{},"模型搭建",[57,32508,32510],{"className":59,"code":32509,"language":61,"meta":62,"style":62},"# 导入库\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",[23,32511,32512,32517,32523,32528,32541,32546,32558,32562,32581,32586,32591,32602,32607,32626,32630,32635,32684,32696,32701,32730,32765,32792,32797,32809,32814,32834,32853,32872,32876,32881,32891,32908,32919,32934,32945,32956,32971,32986,32997,33004,33008,33022,33027,33050,33055,33060,33065,33069,33074,33079,33089],{"__ignoreMap":62},[66,32513,32514],{"class":68,"line":69},[66,32515,32516],{"class":758},"# 导入库\n",[66,32518,32519,32521],{"class":68,"line":80},[66,32520,284],{"class":72},[66,32522,32192],{"class":76},[66,32524,32525],{"class":68,"line":112},[66,32526,32527],{"class":758},"# 导入神经网络层\n",[66,32529,32530,32533,32536,32538],{"class":68,"line":129},[66,32531,32532],{"class":72},"from",[66,32534,32535],{"class":76}," torch ",[66,32537,284],{"class":72},[66,32539,32540],{"class":76}," nn\n",[66,32542,32543],{"class":68,"line":138},[66,32544,32545],{"class":758},"# 导入展示神经网络参数的包\n",[66,32547,32548,32550,32553,32555],{"class":68,"line":227},[66,32549,32532],{"class":72},[66,32551,32552],{"class":76}," torchsummary ",[66,32554,284],{"class":72},[66,32556,32557],{"class":76}," summary\n",[66,32559,32560],{"class":68,"line":236},[66,32561,109],{"emptyLinePlaceholder":108},[66,32563,32564,32566,32569,32571,32574,32576,32579],{"class":68,"line":241},[66,32565,16499],{"class":72},[66,32567,32568],{"class":3793}," LeNet",[66,32570,348],{"class":76},[66,32572,32573],{"class":3793},"nn",[66,32575,2537],{"class":76},[66,32577,32578],{"class":3793},"Module",[66,32580,522],{"class":76},[66,32582,32583],{"class":68,"line":372},[66,32584,32585],{"class":758},"    # 模型初始化:\n",[66,32587,32588],{"class":68,"line":377},[66,32589,32590],{"class":758},"    # 定义一些网络层和激活函数\n",[66,32592,32593,32596,32599],{"class":68,"line":392},[66,32594,32595],{"class":72},"    def",[66,32597,32598],{"class":102}," __init__",[66,32600,32601],{"class":76},"(self):\n",[66,32603,32604],{"class":68,"line":405},[66,32605,32606],{"class":758},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[66,32608,32609,32612,32615,32618,32621,32624],{"class":68,"line":418},[66,32610,32611],{"class":102},"        super",[66,32613,32614],{"class":76},"(LeNet,",[66,32616,32617],{"class":102},"self",[66,32619,32620],{"class":76},").",[66,32622,32623],{"class":102},"__init__",[66,32625,1253],{"class":76},[66,32627,32628],{"class":68,"line":430},[66,32629,109],{"emptyLinePlaceholder":108},[66,32631,32632],{"class":68,"line":438},[66,32633,32634],{"class":758},"        # 定义网络层\n",[66,32636,32637,32640,32643,32645,32648,32651,32653,32655,32657,32660,32662,32664,32666,32669,32671,32673,32675,32678,32680,32682],{"class":68,"line":465},[66,32638,32639],{"class":102},"        self",[66,32641,32642],{"class":76},".c1",[66,32644,99],{"class":72},[66,32646,32647],{"class":76},"nn.Conv2d(",[66,32649,32650],{"class":1234},"in_channels",[66,32652,99],{"class":72},[66,32654,304],{"class":102},[66,32656,2362],{"class":76},[66,32658,32659],{"class":1234},"out_channels",[66,32661,99],{"class":72},[66,32663,519],{"class":102},[66,32665,2362],{"class":76},[66,32667,32668],{"class":1234},"kernel_size",[66,32670,99],{"class":72},[66,32672,752],{"class":102},[66,32674,2362],{"class":76},[66,32676,32677],{"class":1234},"padding",[66,32679,99],{"class":72},[66,32681,795],{"class":102},[66,32683,313],{"class":76},[66,32685,32686,32688,32691,32693],{"class":68,"line":1805},[66,32687,32639],{"class":102},[66,32689,32690],{"class":76},".sig",[66,32692,99],{"class":72},[66,32694,32695],{"class":76},"nn.Sigmoid()\n",[66,32697,32698],{"class":68,"line":1817},[66,32699,32700],{"class":758},"        # 定义池化\n",[66,32702,32703,32705,32708,32710,32713,32715,32717,32719,32721,32724,32726,32728],{"class":68,"line":1822},[66,32704,32639],{"class":102},[66,32706,32707],{"class":76},".s2",[66,32709,99],{"class":72},[66,32711,32712],{"class":76},"nn.AvgPool2d(",[66,32714,32668],{"class":1234},[66,32716,99],{"class":72},[66,32718,795],{"class":102},[66,32720,2362],{"class":76},[66,32722,32723],{"class":1234},"stride",[66,32725,99],{"class":72},[66,32727,795],{"class":102},[66,32729,313],{"class":76},[66,32731,32732,32734,32737,32739,32741,32743,32745,32747,32749,32751,32753,32755,32757,32759,32761,32763],{"class":68,"line":1829},[66,32733,32639],{"class":102},[66,32735,32736],{"class":76},".c3",[66,32738,99],{"class":72},[66,32740,32647],{"class":76},[66,32742,32650],{"class":1234},[66,32744,99],{"class":72},[66,32746,519],{"class":102},[66,32748,2362],{"class":76},[66,32750,32659],{"class":1234},[66,32752,99],{"class":72},[66,32754,2580],{"class":102},[66,32756,2362],{"class":76},[66,32758,32668],{"class":1234},[66,32760,99],{"class":72},[66,32762,752],{"class":102},[66,32764,313],{"class":76},[66,32766,32767,32769,32772,32774,32776,32778,32780,32782,32784,32786,32788,32790],{"class":68,"line":3529},[66,32768,32639],{"class":102},[66,32770,32771],{"class":76},".s4",[66,32773,99],{"class":72},[66,32775,32712],{"class":76},[66,32777,32668],{"class":1234},[66,32779,99],{"class":72},[66,32781,795],{"class":102},[66,32783,2362],{"class":76},[66,32785,32723],{"class":1234},[66,32787,99],{"class":72},[66,32789,795],{"class":102},[66,32791,313],{"class":76},[66,32793,32794],{"class":68,"line":3557},[66,32795,32796],{"class":758},"        # 定义平展层\n",[66,32798,32799,32801,32804,32806],{"class":68,"line":3562},[66,32800,32639],{"class":102},[66,32802,32803],{"class":76},".flatten",[66,32805,99],{"class":72},[66,32807,32808],{"class":76},"nn.Flatten()\n",[66,32810,32811],{"class":68,"line":3579},[66,32812,32813],{"class":758},"        # 定义全连接层\n",[66,32815,32816,32818,32821,32823,32826,32828,32830,32832],{"class":68,"line":3584},[66,32817,32639],{"class":102},[66,32819,32820],{"class":76},".f5",[66,32822,99],{"class":72},[66,32824,32825],{"class":76},"nn.Linear(",[66,32827,5804],{"class":102},[66,32829,2362],{"class":76},[66,32831,2796],{"class":102},[66,32833,313],{"class":76},[66,32835,32836,32838,32841,32843,32845,32847,32849,32851],{"class":68,"line":3589},[66,32837,32639],{"class":102},[66,32839,32840],{"class":76},".f6",[66,32842,99],{"class":72},[66,32844,32825],{"class":76},[66,32846,2796],{"class":102},[66,32848,2362],{"class":76},[66,32850,2690],{"class":102},[66,32852,313],{"class":76},[66,32854,32855,32857,32860,32862,32864,32866,32868,32870],{"class":68,"line":3594},[66,32856,32639],{"class":102},[66,32858,32859],{"class":76},".f7",[66,32861,99],{"class":72},[66,32863,32825],{"class":76},[66,32865,2690],{"class":102},[66,32867,2362],{"class":76},[66,32869,790],{"class":102},[66,32871,313],{"class":76},[66,32873,32874],{"class":68,"line":3608},[66,32875,109],{"emptyLinePlaceholder":108},[66,32877,32878],{"class":68,"line":3613},[66,32879,32880],{"class":758},"    # 写工具->写前向传播\n",[66,32882,32883,32885,32888],{"class":68,"line":4401},[66,32884,32595],{"class":72},[66,32886,32887],{"class":3793}," forward",[66,32889,32890],{"class":76},"(self,x):\n",[66,32892,32893,32896,32898,32900,32903,32905],{"class":68,"line":4415},[66,32894,32895],{"class":76},"        x",[66,32897,99],{"class":72},[66,32899,32617],{"class":102},[66,32901,32902],{"class":76},".sig(",[66,32904,32617],{"class":102},[66,32906,32907],{"class":76},".c1(x))\n",[66,32909,32910,32912,32914,32916],{"class":68,"line":4423},[66,32911,32895],{"class":76},[66,32913,99],{"class":72},[66,32915,32617],{"class":102},[66,32917,32918],{"class":76},".s2(x)\n",[66,32920,32921,32923,32925,32927,32929,32931],{"class":68,"line":4428},[66,32922,32895],{"class":76},[66,32924,99],{"class":72},[66,32926,32617],{"class":102},[66,32928,32902],{"class":76},[66,32930,32617],{"class":102},[66,32932,32933],{"class":76},".c3(x))\n",[66,32935,32936,32938,32940,32942],{"class":68,"line":4434},[66,32937,32895],{"class":76},[66,32939,99],{"class":72},[66,32941,32617],{"class":102},[66,32943,32944],{"class":76},".s4(x)\n",[66,32946,32947,32949,32951,32953],{"class":68,"line":4440},[66,32948,32895],{"class":76},[66,32950,99],{"class":72},[66,32952,32617],{"class":102},[66,32954,32955],{"class":76},".flatten(x)\n",[66,32957,32958,32960,32962,32964,32966,32968],{"class":68,"line":4445},[66,32959,32895],{"class":76},[66,32961,99],{"class":72},[66,32963,32617],{"class":102},[66,32965,32902],{"class":76},[66,32967,32617],{"class":102},[66,32969,32970],{"class":76},".f5(x))\n",[66,32972,32973,32975,32977,32979,32981,32983],{"class":68,"line":9759},[66,32974,32895],{"class":76},[66,32976,99],{"class":72},[66,32978,32617],{"class":102},[66,32980,32902],{"class":76},[66,32982,32617],{"class":102},[66,32984,32985],{"class":76},".f6(x))\n",[66,32987,32988,32990,32992,32994],{"class":68,"line":9783},[66,32989,32895],{"class":76},[66,32991,99],{"class":72},[66,32993,32617],{"class":102},[66,32995,32996],{"class":76},".f7(x)\n",[66,32998,32999,33001],{"class":68,"line":9788},[66,33000,16557],{"class":72},[66,33002,33003],{"class":76}," x\n",[66,33005,33006],{"class":68,"line":9794},[66,33007,109],{"emptyLinePlaceholder":108},[66,33009,33010,33012,33015,33017,33020],{"class":68,"line":9821},[66,33011,3373],{"class":72},[66,33013,33014],{"class":102}," __name__",[66,33016,531],{"class":72},[66,33018,33019],{"class":356},"\"__main__\"",[66,33021,126],{"class":76},[66,33023,33024],{"class":68,"line":9826},[66,33025,33026],{"class":758},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[66,33028,33029,33032,33034,33036,33039,33041,33044,33046,33048],{"class":68,"line":9832},[66,33030,33031],{"class":76},"    device",[66,33033,99],{"class":72},[66,33035,32247],{"class":76},[66,33037,33038],{"class":356},"\"cuda\"",[66,33040,3534],{"class":72},[66,33042,33043],{"class":76}," torch.cuda.is_available() ",[66,33045,1292],{"class":72},[66,33047,32272],{"class":356},[66,33049,313],{"class":76},[66,33051,33052],{"class":68,"line":9844},[66,33053,33054],{"class":758},"    # 如果就是想指定用cpu用下方代码:\n",[66,33056,33057],{"class":68,"line":9856},[66,33058,33059],{"class":758},"    # device=\"cpu\"\n",[66,33061,33062],{"class":68,"line":9868},[66,33063,33064],{"class":758},"    # print(device)\n",[66,33066,33067],{"class":68,"line":11523},[66,33068,109],{"emptyLinePlaceholder":108},[66,33070,33071],{"class":68,"line":11548},[66,33072,33073],{"class":758},"    # 实例化模型\n",[66,33075,33076],{"class":68,"line":11571},[66,33077,33078],{"class":758},"    # 将模型放到设备中去运行\n",[66,33080,33081,33084,33086],{"class":68,"line":11595},[66,33082,33083],{"class":76},"    model",[66,33085,99],{"class":72},[66,33087,33088],{"class":76},"LeNet().to(device)\n",[66,33090,33091,33093,33096,33098,33100,33102,33104,33106],{"class":68,"line":11600},[66,33092,132],{"class":102},[66,33094,33095],{"class":76},"(summary(model,(",[66,33097,304],{"class":102},[66,33099,2362],{"class":76},[66,33101,2879],{"class":102},[66,33103,2362],{"class":76},[66,33105,2879],{"class":102},[66,33107,33108],{"class":76},")))\n",[19,33110,33111],{},[3304,33112],{"alt":62,"src":33113},"\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,33115,33116],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[31,33118,33119],{"start":80},[34,33120,33121],{},"训练",[19,33123,33124],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,33126,33127],{},"在训练之前可以将数据展示看一下",[57,33129,33131],{"className":59,"code":33130,"language":61,"meta":62,"style":62},"# 建立画图的函数，用于展示数据\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",[23,33132,33133,33138,33143,33155,33167,33180,33185,33197,33202,33214,33219,33231,33235,33239,33260,33272,33277,33298,33309,33313,33318,33336,33347,33352,33363,33368,33379,33383,33388,33403,33416,33420,33425,33438,33451,33464,33469,33473,33478,33498,33515,33535,33548,33561,33571,33586],{"__ignoreMap":62},[66,33134,33135],{"class":68,"line":69},[66,33136,33137],{"class":758},"# 建立画图的函数，用于展示数据\n",[66,33139,33140],{"class":68,"line":80},[66,33141,33142],{"class":758},"# torchvision中包含很多内置的数据集\n",[66,33144,33145,33147,33150,33152],{"class":68,"line":112},[66,33146,32532],{"class":72},[66,33148,33149],{"class":76}," sklearn.externals.array_api_compat.torch ",[66,33151,284],{"class":72},[66,33153,33154],{"class":76}," squeeze\n",[66,33156,33157,33159,33162,33164],{"class":68,"line":129},[66,33158,32532],{"class":72},[66,33160,33161],{"class":76}," torchvision.datasets ",[66,33163,284],{"class":72},[66,33165,33166],{"class":76}," FashionMNIST\n",[66,33168,33169,33171,33174,33177],{"class":68,"line":138},[66,33170,284],{"class":72},[66,33172,33173],{"class":76}," numpy ",[66,33175,33176],{"class":72},"as",[66,33178,33179],{"class":76}," np\n",[66,33181,33182],{"class":68,"line":227},[66,33183,33184],{"class":758},"# 引入处理数据集的包\n",[66,33186,33187,33189,33192,33194],{"class":68,"line":236},[66,33188,32532],{"class":72},[66,33190,33191],{"class":76}," torchvision ",[66,33193,284],{"class":72},[66,33195,33196],{"class":76}," transforms\n",[66,33198,33199],{"class":68,"line":241},[66,33200,33201],{"class":758},"# 从torch库中引入数据处理的包\n",[66,33203,33204,33206,33209,33211],{"class":68,"line":372},[66,33205,284],{"class":72},[66,33207,33208],{"class":76}," torch.utils.data ",[66,33210,33176],{"class":72},[66,33212,33213],{"class":76}," Data\n",[66,33215,33216],{"class":68,"line":377},[66,33217,33218],{"class":758},"# 导入画图的库\n",[66,33220,33221,33223,33226,33228],{"class":68,"line":392},[66,33222,284],{"class":72},[66,33224,33225],{"class":76}," matplotlib.pyplot ",[66,33227,33176],{"class":72},[66,33229,33230],{"class":76}," plt\n",[66,33232,33233],{"class":68,"line":405},[66,33234,109],{"emptyLinePlaceholder":108},[66,33236,33237],{"class":68,"line":418},[66,33238,109],{"emptyLinePlaceholder":108},[66,33240,33241,33244,33246,33249,33252,33254,33257],{"class":68,"line":430},[66,33242,33243],{"class":76},"train_data",[66,33245,99],{"class":72},[66,33247,33248],{"class":76},"FashionMNIST(",[66,33250,33251],{"class":1234},"root",[66,33253,99],{"class":72},[66,33255,33256],{"class":356},"'.\u002Fdata'",[66,33258,33259],{"class":76},",\n",[66,33261,33262,33265,33267,33270],{"class":68,"line":438},[66,33263,33264],{"class":1234},"                        train",[66,33266,99],{"class":72},[66,33268,33269],{"class":102},"True",[66,33271,33259],{"class":76},[66,33273,33274],{"class":68,"line":465},[66,33275,33276],{"class":758},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[66,33278,33279,33282,33284,33287,33290,33292,33295],{"class":68,"line":1805},[66,33280,33281],{"class":1234},"                        transform",[66,33283,99],{"class":72},[66,33285,33286],{"class":76},"transforms.Compose([transforms.Resize(",[66,33288,33289],{"class":1234},"size",[66,33291,99],{"class":72},[66,33293,33294],{"class":102},"224",[66,33296,33297],{"class":76},"),transforms.ToTensor()]),\n",[66,33299,33300,33303,33305,33307],{"class":68,"line":1817},[66,33301,33302],{"class":1234},"                        download",[66,33304,99],{"class":72},[66,33306,33269],{"class":102},[66,33308,313],{"class":76},[66,33310,33311],{"class":68,"line":1822},[66,33312,109],{"emptyLinePlaceholder":108},[66,33314,33315],{"class":68,"line":1829},[66,33316,33317],{"class":758},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[66,33319,33320,33323,33325,33328,33331,33333],{"class":68,"line":3529},[66,33321,33322],{"class":76},"train_loader",[66,33324,99],{"class":72},[66,33326,33327],{"class":76},"Data.DataLoader(",[66,33329,33330],{"class":1234},"dataset",[66,33332,99],{"class":72},[66,33334,33335],{"class":76},"train_data,\n",[66,33337,33338,33341,33343,33345],{"class":68,"line":3557},[66,33339,33340],{"class":1234},"                             batch_size",[66,33342,99],{"class":72},[66,33344,2195],{"class":102},[66,33346,33259],{"class":76},[66,33348,33349],{"class":68,"line":3562},[66,33350,33351],{"class":758},"                             # 数据是否打乱\n",[66,33353,33354,33357,33359,33361],{"class":68,"line":3579},[66,33355,33356],{"class":1234},"                             shuffle",[66,33358,99],{"class":72},[66,33360,33269],{"class":102},[66,33362,33259],{"class":76},[66,33364,33365],{"class":68,"line":3584},[66,33366,33367],{"class":758},"                             # 规定加载数据的进程\n",[66,33369,33370,33373,33375,33377],{"class":68,"line":3589},[66,33371,33372],{"class":1234},"                             num_workers",[66,33374,99],{"class":72},[66,33376,2183],{"class":102},[66,33378,313],{"class":76},[66,33380,33381],{"class":68,"line":3594},[66,33382,109],{"emptyLinePlaceholder":108},[66,33384,33385],{"class":68,"line":3608},[66,33386,33387],{"class":758},"# 获得一个batch的数据\n",[66,33389,33390,33392,33395,33397,33400],{"class":68,"line":3613},[66,33391,502],{"class":72},[66,33393,33394],{"class":76}," step,(b_x,b_y) ",[66,33396,507],{"class":72},[66,33398,33399],{"class":102}," enumerate",[66,33401,33402],{"class":76},"(train_loader):\n",[66,33404,33405,33407,33410,33412,33414],{"class":68,"line":4401},[66,33406,380],{"class":72},[66,33408,33409],{"class":76}," step ",[66,33411,386],{"class":72},[66,33413,962],{"class":102},[66,33415,126],{"class":76},[66,33417,33418],{"class":68,"line":4415},[66,33419,468],{"class":72},[66,33421,33422],{"class":68,"line":4423},[66,33423,33424],{"class":758},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[66,33426,33427,33430,33432,33435],{"class":68,"line":4428},[66,33428,33429],{"class":76},"batch_x",[66,33431,99],{"class":72},[66,33433,33434],{"class":76},"b_x.squeeze().numpy()  ",[66,33436,33437],{"class":758},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[66,33439,33440,33443,33445,33448],{"class":68,"line":4434},[66,33441,33442],{"class":76},"batch_y",[66,33444,99],{"class":72},[66,33446,33447],{"class":76},"b_y.numpy()   ",[66,33449,33450],{"class":758},"#将张量转换成功numpy数组\n",[66,33452,33453,33456,33458,33461],{"class":68,"line":4440},[66,33454,33455],{"class":76},"class_label",[66,33457,99],{"class":72},[66,33459,33460],{"class":76},"train_data.classes  ",[66,33462,33463],{"class":758},"#训练集标签\n",[66,33465,33466],{"class":68,"line":4445},[66,33467,33468],{"class":758},"# print(class_label)\n",[66,33470,33471],{"class":68,"line":9759},[66,33472,109],{"emptyLinePlaceholder":108},[66,33474,33475],{"class":68,"line":9783},[66,33476,33477],{"class":758},"# 可视化一个batch的图像\n",[66,33479,33480,33483,33486,33488,33490,33492,33494,33496],{"class":68,"line":9788},[66,33481,33482],{"class":76},"plt.figure(",[66,33484,33485],{"class":1234},"figsize",[66,33487,99],{"class":72},[66,33489,348],{"class":76},[66,33491,2477],{"class":102},[66,33493,2362],{"class":76},[66,33495,752],{"class":102},[66,33497,360],{"class":76},[66,33499,33500,33502,33505,33507,33510,33512],{"class":68,"line":9794},[66,33501,502],{"class":72},[66,33503,33504],{"class":76}," ii ",[66,33506,507],{"class":72},[66,33508,33509],{"class":76}," np.arange(",[66,33511,9169],{"class":102},[66,33513,33514],{"class":76},"(batch_y)):\n",[66,33516,33517,33520,33522,33524,33526,33529,33531,33533],{"class":68,"line":9821},[66,33518,33519],{"class":76},"    plt.subplot(",[66,33521,1076],{"class":102},[66,33523,2362],{"class":76},[66,33525,2580],{"class":102},[66,33527,33528],{"class":76},",ii ",[66,33530,1184],{"class":72},[66,33532,1187],{"class":102},[66,33534,313],{"class":76},[66,33536,33537,33540,33543,33545],{"class":68,"line":9826},[66,33538,33539],{"class":76},"    plt.imshow(batch_x[ii,:,:],",[66,33541,33542],{"class":1234},"cmap",[66,33544,99],{"class":72},[66,33546,33547],{"class":76},"plt.cm.gray)\n",[66,33549,33550,33553,33555,33557,33559],{"class":68,"line":9832},[66,33551,33552],{"class":76},"    plt.title(class_label[batch_y[ii]],",[66,33554,33289],{"class":1234},[66,33556,99],{"class":72},[66,33558,790],{"class":102},[66,33560,313],{"class":76},[66,33562,33563,33566,33569],{"class":68,"line":9844},[66,33564,33565],{"class":76},"    plt.axis(",[66,33567,33568],{"class":356},"\"off\"",[66,33570,313],{"class":76},[66,33572,33573,33576,33579,33581,33584],{"class":68,"line":9856},[66,33574,33575],{"class":76},"    plt.subplots_adjust(",[66,33577,33578],{"class":1234},"wspace",[66,33580,99],{"class":72},[66,33582,33583],{"class":102},"0.05",[66,33585,313],{"class":76},[66,33587,33588],{"class":68,"line":9868},[66,33589,33590],{"class":76},"plt.show()\n",[19,33592,33593],{},"用matplotlib进行展示的过程可以后续再补",[19,33595,33596],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,33598,33599],{},"训练次数就是按照批次过整个训练集数据的次数",[19,33601,33602],{},"模型训练：",[57,33604,33606],{"className":59,"code":33605,"language":61,"meta":62,"style":62},"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",[23,33607,33608,33615,33622,33626,33638,33644,33655,33665,33675,33685,33695,33700,33712,33722,33726,33730,33735,33746,33759,33770,33787,33798,33837,33853,33865,33876,33881,33892,33908,33919,33930,33941,33948,33952,33957,33962,33966,33971,33981,34002,34006,34010,34015,34020,34025,34045,34049,34054,34064,34068,34073,34082,34087,34092,34097,34107,34111,34115,34120,34125,34135,34140,34150,34155,34164,34169,34178,34183,34192,34196,34201,34211,34215,34219,34224,34238,34265,34280,34284,34289,34294,34303,34308,34317,34322,34331,34336,34345,34350,34359,34364,34373,34378,34391,34396,34406,34411,34421,34427,34433,34439,34445,34456,34462,34482,34488,34499,34505,34511,34517,34523,34529,34535,34541,34561,34567,34583,34589,34603,34609,34624,34630,34639,34645,34654,34660,34666,34675,34681,34692,34698,34717,34723,34734,34740,34760,34776,34782,34796,34802,34808,34819,34825,34831,34841,34847,34858,34864,34874,34879,34885,34934,34981,34986,34992,35011,35017,35036,35042,35048,35058,35063,35069,35085,35130,35136,35142,35148,35159,35165,35171,35177,35195,35208,35217,35226,35235,35244,35250,35256,35264,35269,35275,35286,35292,35312,35318,35324,35330,35347,35353,35359,35365,35371,35377,35404,35428,35434,35440,35446,35457,35468,35474,35491,35514,35537,35543,35548,35557,35567,35573,35578,35584,35597,35603,35614,35625,35644],{"__ignoreMap":62},[66,33609,33610,33612],{"class":68,"line":69},[66,33611,284],{"class":72},[66,33613,33614],{"class":76}," copy\n",[66,33616,33617,33619],{"class":68,"line":80},[66,33618,284],{"class":72},[66,33620,33621],{"class":76}," time\n",[66,33623,33624],{"class":68,"line":112},[66,33625,109],{"emptyLinePlaceholder":108},[66,33627,33628,33630,33633,33635],{"class":68,"line":129},[66,33629,284],{"class":72},[66,33631,33632],{"class":76}," pandas ",[66,33634,33176],{"class":72},[66,33636,33637],{"class":76}," pd\n",[66,33639,33640,33642],{"class":68,"line":138},[66,33641,284],{"class":72},[66,33643,32192],{"class":76},[66,33645,33646,33648,33650,33652],{"class":68,"line":227},[66,33647,32532],{"class":72},[66,33649,33208],{"class":76},[66,33651,284],{"class":72},[66,33653,33654],{"class":76}," Dataset\n",[66,33656,33657,33659,33661,33663],{"class":68,"line":236},[66,33658,32532],{"class":72},[66,33660,33161],{"class":76},[66,33662,284],{"class":72},[66,33664,33166],{"class":76},[66,33666,33667,33669,33671,33673],{"class":68,"line":241},[66,33668,32532],{"class":72},[66,33670,33191],{"class":76},[66,33672,284],{"class":72},[66,33674,33196],{"class":76},[66,33676,33677,33679,33681,33683],{"class":68,"line":372},[66,33678,284],{"class":72},[66,33680,33208],{"class":76},[66,33682,33176],{"class":72},[66,33684,33213],{"class":76},[66,33686,33687,33689,33691,33693],{"class":68,"line":377},[66,33688,284],{"class":72},[66,33690,33225],{"class":76},[66,33692,33176],{"class":72},[66,33694,33230],{"class":76},[66,33696,33697],{"class":68,"line":392},[66,33698,33699],{"class":758},"# 导入模型\n",[66,33701,33702,33704,33707,33709],{"class":68,"line":405},[66,33703,32532],{"class":72},[66,33705,33706],{"class":76}," model ",[66,33708,284],{"class":72},[66,33710,33711],{"class":76}," LeNet\n",[66,33713,33714,33716,33718,33720],{"class":68,"line":418},[66,33715,32532],{"class":72},[66,33717,32535],{"class":76},[66,33719,284],{"class":72},[66,33721,32540],{"class":76},[66,33723,33724],{"class":68,"line":430},[66,33725,109],{"emptyLinePlaceholder":108},[66,33727,33728],{"class":68,"line":438},[66,33729,109],{"emptyLinePlaceholder":108},[66,33731,33732],{"class":68,"line":465},[66,33733,33734],{"class":758},"# 处理训练集与验证集函数--->划分数据集\n",[66,33736,33737,33740,33743],{"class":68,"line":1805},[66,33738,33739],{"class":72},"def",[66,33741,33742],{"class":3793}," train_val_data_process",[66,33744,33745],{"class":76},"():\n",[66,33747,33748,33751,33753,33755,33757],{"class":68,"line":1817},[66,33749,33750],{"class":76},"    train_data",[66,33752,99],{"class":72},[66,33754,33248],{"class":76},[66,33756,33256],{"class":356},[66,33758,33259],{"class":76},[66,33760,33761,33764,33766,33768],{"class":68,"line":1822},[66,33762,33763],{"class":1234},"                            train",[66,33765,99],{"class":72},[66,33767,33269],{"class":102},[66,33769,33259],{"class":76},[66,33771,33772,33775,33777,33779,33781,33783,33785],{"class":68,"line":1829},[66,33773,33774],{"class":1234},"                            transform",[66,33776,99],{"class":72},[66,33778,33286],{"class":76},[66,33780,33289],{"class":1234},[66,33782,99],{"class":72},[66,33784,2879],{"class":102},[66,33786,33297],{"class":76},[66,33788,33789,33792,33794,33796],{"class":68,"line":3529},[66,33790,33791],{"class":1234},"                            download",[66,33793,99],{"class":72},[66,33795,33269],{"class":102},[66,33797,313],{"class":76},[66,33799,33800,33803,33805,33808,33811,33813,33816,33818,33820,33823,33825,33827,33830,33832,33834],{"class":68,"line":3557},[66,33801,33802],{"class":76},"    train_data,val_data",[66,33804,99],{"class":72},[66,33806,33807],{"class":76},"Data.random_split(train_data,[",[66,33809,33810],{"class":102},"round",[66,33812,348],{"class":76},[66,33814,33815],{"class":102},"0.8",[66,33817,1208],{"class":72},[66,33819,9169],{"class":102},[66,33821,33822],{"class":76},"(train_data)),",[66,33824,33810],{"class":102},[66,33826,348],{"class":76},[66,33828,33829],{"class":102},"0.2",[66,33831,1208],{"class":72},[66,33833,9169],{"class":102},[66,33835,33836],{"class":76},"(train_data))])\n",[66,33838,33839,33842,33844,33847,33849,33851],{"class":68,"line":3562},[66,33840,33841],{"class":76},"    train_dataloader ",[66,33843,99],{"class":72},[66,33845,33846],{"class":76}," Data.DataLoader(",[66,33848,33330],{"class":1234},[66,33850,99],{"class":72},[66,33852,33335],{"class":76},[66,33854,33855,33858,33860,33863],{"class":68,"line":3579},[66,33856,33857],{"class":1234},"                                       batch_size",[66,33859,99],{"class":72},[66,33861,33862],{"class":102},"128",[66,33864,33259],{"class":76},[66,33866,33867,33870,33872,33874],{"class":68,"line":3584},[66,33868,33869],{"class":1234},"                                       shuffle",[66,33871,99],{"class":72},[66,33873,33269],{"class":102},[66,33875,33259],{"class":76},[66,33877,33878],{"class":68,"line":3589},[66,33879,33880],{"class":758},"                                       # 规定8个进程\n",[66,33882,33883,33886,33888,33890],{"class":68,"line":3594},[66,33884,33885],{"class":1234},"                                       num_workers",[66,33887,99],{"class":72},[66,33889,2379],{"class":102},[66,33891,313],{"class":76},[66,33893,33894,33897,33899,33901,33903,33905],{"class":68,"line":3608},[66,33895,33896],{"class":76},"    val_dataloader",[66,33898,99],{"class":72},[66,33900,33327],{"class":76},[66,33902,33330],{"class":1234},[66,33904,99],{"class":72},[66,33906,33907],{"class":76},"val_data,\n",[66,33909,33910,33913,33915,33917],{"class":68,"line":3613},[66,33911,33912],{"class":1234},"                                   batch_size",[66,33914,99],{"class":72},[66,33916,33862],{"class":102},[66,33918,33259],{"class":76},[66,33920,33921,33924,33926,33928],{"class":68,"line":4401},[66,33922,33923],{"class":1234},"                                   shuffle",[66,33925,99],{"class":72},[66,33927,33269],{"class":102},[66,33929,33259],{"class":76},[66,33931,33932,33935,33937,33939],{"class":68,"line":4415},[66,33933,33934],{"class":1234},"                                   num_workers",[66,33936,99],{"class":72},[66,33938,2379],{"class":102},[66,33940,313],{"class":76},[66,33942,33943,33945],{"class":68,"line":4423},[66,33944,5907],{"class":72},[66,33946,33947],{"class":76}," train_dataloader,val_dataloader\n",[66,33949,33950],{"class":68,"line":4428},[66,33951,109],{"emptyLinePlaceholder":108},[66,33953,33954],{"class":68,"line":4434},[66,33955,33956],{"class":758},"# 验证是否出错\n",[66,33958,33959],{"class":68,"line":4440},[66,33960,33961],{"class":758},"# train_val_data_process()\n",[66,33963,33964],{"class":68,"line":4445},[66,33965,109],{"emptyLinePlaceholder":108},[66,33967,33968],{"class":68,"line":9759},[66,33969,33970],{"class":758},"# 定义模型训练函数\n",[66,33972,33973,33975,33978],{"class":68,"line":9783},[66,33974,33739],{"class":72},[66,33976,33977],{"class":3793}," train_model_process",[66,33979,33980],{"class":76},"(model,train_dataloader,val_dataloader,num_epochs):\n",[66,33982,33983,33985,33987,33989,33991,33993,33995,33997,34000],{"class":68,"line":9788},[66,33984,33031],{"class":76},[66,33986,99],{"class":72},[66,33988,32247],{"class":76},[66,33990,33038],{"class":356},[66,33992,3534],{"class":72},[66,33994,33043],{"class":76},[66,33996,1292],{"class":72},[66,33998,33999],{"class":356}," 'cpu'",[66,34001,313],{"class":76},[66,34003,34004],{"class":68,"line":9794},[66,34005,109],{"emptyLinePlaceholder":108},[66,34007,34008],{"class":68,"line":9821},[66,34009,109],{"emptyLinePlaceholder":108},[66,34011,34012],{"class":68,"line":9826},[66,34013,34014],{"class":758},"    # 定义优化器\n",[66,34016,34017],{"class":68,"line":9832},[66,34018,34019],{"class":758},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[66,34021,34022],{"class":68,"line":9844},[66,34023,34024],{"class":758},"    # lr为学习率\n",[66,34026,34027,34030,34032,34035,34038,34040,34043],{"class":68,"line":9856},[66,34028,34029],{"class":76},"    optimizer",[66,34031,99],{"class":72},[66,34033,34034],{"class":76},"torch.optim.Adam(model.parameters(),",[66,34036,34037],{"class":1234},"lr",[66,34039,99],{"class":72},[66,34041,34042],{"class":102},"0.001",[66,34044,313],{"class":76},[66,34046,34047],{"class":68,"line":9868},[66,34048,109],{"emptyLinePlaceholder":108},[66,34050,34051],{"class":68,"line":11523},[66,34052,34053],{"class":758},"    # 定义损失函数使用交叉熵损失函数\n",[66,34055,34056,34059,34061],{"class":68,"line":11548},[66,34057,34058],{"class":76},"    criterion",[66,34060,99],{"class":72},[66,34062,34063],{"class":76},"nn.CrossEntropyLoss()\n",[66,34065,34066],{"class":68,"line":11571},[66,34067,109],{"emptyLinePlaceholder":108},[66,34069,34070],{"class":68,"line":11595},[66,34071,34072],{"class":758},"    # 将模型放到GPU中进行训练\n",[66,34074,34075,34077,34079],{"class":68,"line":11600},[66,34076,33083],{"class":76},[66,34078,99],{"class":72},[66,34080,34081],{"class":76},"model.to(device)\n",[66,34083,34084],{"class":68,"line":11605},[66,34085,34086],{"class":758},"    # 复制当前模型的参数\n",[66,34088,34089],{"class":68,"line":11610},[66,34090,34091],{"class":758},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[66,34093,34094],{"class":68,"line":11619},[66,34095,34096],{"class":758},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[66,34098,34099,34102,34104],{"class":68,"line":11624},[66,34100,34101],{"class":76},"    best_model_wts",[66,34103,99],{"class":72},[66,34105,34106],{"class":76},"copy.deepcopy(model.state_dict())\n",[66,34108,34109],{"class":68,"line":11630},[66,34110,109],{"emptyLinePlaceholder":108},[66,34112,34113],{"class":68,"line":11651},[66,34114,109],{"emptyLinePlaceholder":108},[66,34116,34117],{"class":68,"line":11657},[66,34118,34119],{"class":758},"    # 初始化参数\n",[66,34121,34122],{"class":68,"line":11671},[66,34123,34124],{"class":758},"    # 最高准确度\n",[66,34126,34127,34130,34132],{"class":68,"line":11677},[66,34128,34129],{"class":76},"    best_acc",[66,34131,99],{"class":72},[66,34133,34134],{"class":102},"0.0\n",[66,34136,34137],{"class":68,"line":11704},[66,34138,34139],{"class":758},"    # 训练集损失列表\n",[66,34141,34142,34145,34147],{"class":68,"line":11713},[66,34143,34144],{"class":76},"    train_loss_all",[66,34146,99],{"class":72},[66,34148,34149],{"class":76},"[]\n",[66,34151,34152],{"class":68,"line":11719},[66,34153,34154],{"class":758},"    # 验证集函数列表\n",[66,34156,34157,34160,34162],{"class":68,"line":11727},[66,34158,34159],{"class":76},"    val_loss_all",[66,34161,99],{"class":72},[66,34163,34149],{"class":76},[66,34165,34166],{"class":68,"line":11732},[66,34167,34168],{"class":758},"    # 训练集准确度列表\n",[66,34170,34171,34174,34176],{"class":68,"line":18407},[66,34172,34173],{"class":76},"    train_acc_all",[66,34175,99],{"class":72},[66,34177,34149],{"class":76},[66,34179,34180],{"class":68,"line":18413},[66,34181,34182],{"class":758},"    # 验证集准确度列表\n",[66,34184,34185,34188,34190],{"class":68,"line":18436},[66,34186,34187],{"class":76},"    val_acc_all",[66,34189,99],{"class":72},[66,34191,34149],{"class":76},[66,34193,34194],{"class":68,"line":18442},[66,34195,109],{"emptyLinePlaceholder":108},[66,34197,34198],{"class":68,"line":18465},[66,34199,34200],{"class":758},"    # 保存当前时间--->方便看每轮训练的时间\n",[66,34202,34203,34206,34208],{"class":68,"line":18479},[66,34204,34205],{"class":76},"    since",[66,34207,99],{"class":72},[66,34209,34210],{"class":76},"time.time()\n",[66,34212,34213],{"class":68,"line":18499},[66,34214,109],{"emptyLinePlaceholder":108},[66,34216,34217],{"class":68,"line":18505},[66,34218,109],{"emptyLinePlaceholder":108},[66,34220,34221],{"class":68,"line":18516},[66,34222,34223],{"class":758},"    # 准备工作完成--->开始训练模型\n",[66,34225,34226,34228,34231,34233,34235],{"class":68,"line":18539},[66,34227,1083],{"class":72},[66,34229,34230],{"class":76}," epoch ",[66,34232,507],{"class":72},[66,34234,510],{"class":102},[66,34236,34237],{"class":76},"(num_epochs):\n",[66,34239,34240,34242,34244,34247,34250,34252,34254,34256,34259,34261,34263],{"class":68,"line":18561},[66,34241,395],{"class":102},[66,34243,348],{"class":76},[66,34245,34246],{"class":356},"\"Epoch ",[66,34248,34249],{"class":102},"{}",[66,34251,2563],{"class":356},[66,34253,34249],{"class":102},[66,34255,1130],{"class":356},[66,34257,34258],{"class":76},".format(epoch,num_epochs",[66,34260,2511],{"class":72},[66,34262,304],{"class":102},[66,34264,360],{"class":76},[66,34266,34267,34269,34271,34274,34276,34278],{"class":68,"line":18566},[66,34268,395],{"class":102},[66,34270,348],{"class":76},[66,34272,34273],{"class":356},"\"-\"",[66,34275,1208],{"class":72},[66,34277,790],{"class":102},[66,34279,313],{"class":76},[66,34281,34282],{"class":68,"line":18572},[66,34283,109],{"emptyLinePlaceholder":108},[66,34285,34286],{"class":68,"line":18586},[66,34287,34288],{"class":758},"        # 初始化参数\n",[66,34290,34291],{"class":68,"line":18599},[66,34292,34293],{"class":758},"        # 训练集损失函数\n",[66,34295,34296,34299,34301],{"class":68,"line":18604},[66,34297,34298],{"class":76},"        train_loss",[66,34300,99],{"class":72},[66,34302,34134],{"class":102},[66,34304,34305],{"class":68,"line":18618},[66,34306,34307],{"class":758},"        # 训练集准确度\n",[66,34309,34310,34313,34315],{"class":68,"line":18623},[66,34311,34312],{"class":76},"        train_corrects",[66,34314,99],{"class":72},[66,34316,4906],{"class":102},[66,34318,34319],{"class":68,"line":18629},[66,34320,34321],{"class":758},"        # 验证集损失函数\n",[66,34323,34324,34327,34329],{"class":68,"line":18634},[66,34325,34326],{"class":76},"        val_loss",[66,34328,99],{"class":72},[66,34330,34134],{"class":102},[66,34332,34333],{"class":68,"line":18648},[66,34334,34335],{"class":758},"        # 验证集准确度\n",[66,34337,34338,34341,34343],{"class":68,"line":18653},[66,34339,34340],{"class":76},"        val_corrects",[66,34342,99],{"class":72},[66,34344,4906],{"class":102},[66,34346,34347],{"class":68,"line":18658},[66,34348,34349],{"class":758},"        # 训练集样本数量\n",[66,34351,34352,34355,34357],{"class":68,"line":18672},[66,34353,34354],{"class":76},"        train_num",[66,34356,99],{"class":72},[66,34358,4906],{"class":102},[66,34360,34361],{"class":68,"line":18684},[66,34362,34363],{"class":758},"        # 验证集样本数量\n",[66,34365,34366,34369,34371],{"class":68,"line":18689},[66,34367,34368],{"class":76},"        val_num",[66,34370,99],{"class":72},[66,34372,4906],{"class":102},[66,34374,34375],{"class":68,"line":18702},[66,34376,34377],{"class":758},"        # 将数据放到设备,并开始训练\n",[66,34379,34380,34382,34384,34386,34388],{"class":68,"line":18707},[66,34381,5222],{"class":72},[66,34383,33394],{"class":76},[66,34385,507],{"class":72},[66,34387,33399],{"class":102},[66,34389,34390],{"class":76},"(train_dataloader):\n",[66,34392,34393],{"class":68,"line":18712},[66,34394,34395],{"class":758},"            # 将特征放入到训练设备\n",[66,34397,34398,34401,34403],{"class":68,"line":18717},[66,34399,34400],{"class":76},"            b_x",[66,34402,99],{"class":72},[66,34404,34405],{"class":76},"b_x.to(device)\n",[66,34407,34408],{"class":68,"line":18730},[66,34409,34410],{"class":758},"            # 将标签放入到训练设备当中\n",[66,34412,34413,34416,34418],{"class":68,"line":18735},[66,34414,34415],{"class":76},"            b_y",[66,34417,99],{"class":72},[66,34419,34420],{"class":76},"b_y.to(device)\n",[66,34422,34424],{"class":68,"line":34423},98,[66,34425,34426],{"class":758},"            # 设置模型为训练模式\n",[66,34428,34430],{"class":68,"line":34429},99,[66,34431,34432],{"class":76},"            model.train()\n",[66,34434,34436],{"class":68,"line":34435},100,[66,34437,34438],{"class":758},"            # 将数据放到模型当中,开始前向传播\n",[66,34440,34442],{"class":68,"line":34441},101,[66,34443,34444],{"class":758},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[66,34446,34448,34451,34453],{"class":68,"line":34447},102,[66,34449,34450],{"class":76},"            output",[66,34452,99],{"class":72},[66,34454,34455],{"class":76},"model(b_x)\n",[66,34457,34459],{"class":68,"line":34458},103,[66,34460,34461],{"class":758},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[66,34463,34465,34468,34470,34473,34476,34478,34480],{"class":68,"line":34464},104,[66,34466,34467],{"class":76},"            pre_lab",[66,34469,99],{"class":72},[66,34471,34472],{"class":76},"torch.argmax(output,",[66,34474,34475],{"class":1234},"dim",[66,34477,99],{"class":72},[66,34479,304],{"class":102},[66,34481,313],{"class":76},[66,34483,34485],{"class":68,"line":34484},105,[66,34486,34487],{"class":758},"            # 计算每一个batch的损失函数\n",[66,34489,34491,34494,34496],{"class":68,"line":34490},106,[66,34492,34493],{"class":76},"            loss",[66,34495,99],{"class":72},[66,34497,34498],{"class":76},"criterion(output,b_y)\n",[66,34500,34502],{"class":68,"line":34501},107,[66,34503,34504],{"class":758},"            # 将梯度初始化为0\n",[66,34506,34508],{"class":68,"line":34507},108,[66,34509,34510],{"class":76},"            optimizer.zero_grad()\n",[66,34512,34514],{"class":68,"line":34513},109,[66,34515,34516],{"class":758},"            # 梯度置为0后再进行反向传播\n",[66,34518,34520],{"class":68,"line":34519},110,[66,34521,34522],{"class":76},"            loss.backward()\n",[66,34524,34526],{"class":68,"line":34525},111,[66,34527,34528],{"class":758},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[66,34530,34532],{"class":68,"line":34531},112,[66,34533,34534],{"class":76},"            optimizer.step()\n",[66,34536,34538],{"class":68,"line":34537},113,[66,34539,34540],{"class":758},"            # loss.item()指的是batch的平均损失\n",[66,34542,34544,34547,34549,34552,34554,34557,34559],{"class":68,"line":34543},114,[66,34545,34546],{"class":76},"            train_loss",[66,34548,144],{"class":72},[66,34550,34551],{"class":76},"loss.item()",[66,34553,1208],{"class":72},[66,34555,34556],{"class":76},"b_x.size(",[66,34558,2183],{"class":102},[66,34560,313],{"class":76},[66,34562,34564],{"class":68,"line":34563},115,[66,34565,34566],{"class":758},"            # 计算每个批次中正确预测的数量\n",[66,34568,34570,34573,34575,34578,34580],{"class":68,"line":34569},116,[66,34571,34572],{"class":76},"            train_corrects",[66,34574,144],{"class":72},[66,34576,34577],{"class":76},"torch.sum(pre_lab",[66,34579,531],{"class":72},[66,34581,34582],{"class":76},"b_y.data)\n",[66,34584,34586],{"class":68,"line":34585},117,[66,34587,34588],{"class":758},"            # 计算目前为止一共处理了多少样本\n",[66,34590,34592,34595,34597,34599,34601],{"class":68,"line":34591},118,[66,34593,34594],{"class":76},"            train_num",[66,34596,144],{"class":72},[66,34598,34556],{"class":76},[66,34600,2183],{"class":102},[66,34602,313],{"class":76},[66,34604,34606],{"class":68,"line":34605},119,[66,34607,34608],{"class":758},"        # 验证数据\n",[66,34610,34612,34614,34617,34619,34621],{"class":68,"line":34611},120,[66,34613,5222],{"class":72},[66,34615,34616],{"class":76}," step ,(b_x,b_y) ",[66,34618,507],{"class":72},[66,34620,33399],{"class":102},[66,34622,34623],{"class":76},"(val_dataloader):\n",[66,34625,34627],{"class":68,"line":34626},121,[66,34628,34629],{"class":758},"            # 将特征放到验证设备当中\n",[66,34631,34633,34635,34637],{"class":68,"line":34632},122,[66,34634,34400],{"class":76},[66,34636,99],{"class":72},[66,34638,34405],{"class":76},[66,34640,34642],{"class":68,"line":34641},123,[66,34643,34644],{"class":758},"            # 将标签放到放到训练设备当中\n",[66,34646,34648,34650,34652],{"class":68,"line":34647},124,[66,34649,34415],{"class":76},[66,34651,99],{"class":72},[66,34653,34420],{"class":76},[66,34655,34657],{"class":68,"line":34656},125,[66,34658,34659],{"class":758},"            # 开启验证模式，设置模型为评估模式\n",[66,34661,34663],{"class":68,"line":34662},126,[66,34664,34665],{"class":76},"            model.eval()\n",[66,34667,34669,34672],{"class":68,"line":34668},127,[66,34670,34671],{"class":72},"            with",[66,34673,34674],{"class":76}," torch.no_grad():\n",[66,34676,34678],{"class":68,"line":34677},128,[66,34679,34680],{"class":758},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[66,34682,34684,34687,34689],{"class":68,"line":34683},129,[66,34685,34686],{"class":76},"                output ",[66,34688,99],{"class":72},[66,34690,34691],{"class":76}," model(b_x)\n",[66,34693,34695],{"class":68,"line":34694},130,[66,34696,34697],{"class":758},"                # 查找每一行中最大值对应的下标\n",[66,34699,34701,34704,34706,34709,34711,34713,34715],{"class":68,"line":34700},131,[66,34702,34703],{"class":76},"                pre_lab ",[66,34705,99],{"class":72},[66,34707,34708],{"class":76}," torch.argmax(output, ",[66,34710,34475],{"class":1234},[66,34712,99],{"class":72},[66,34714,304],{"class":102},[66,34716,313],{"class":76},[66,34718,34720],{"class":68,"line":34719},132,[66,34721,34722],{"class":758},"                # 计算验证集上的当前 batch 损失\n",[66,34724,34726,34729,34731],{"class":68,"line":34725},133,[66,34727,34728],{"class":76},"                val_batch_loss ",[66,34730,99],{"class":72},[66,34732,34733],{"class":76}," criterion(output, b_y)\n",[66,34735,34737],{"class":68,"line":34736},134,[66,34738,34739],{"class":758},"                # 对损失函数进行累加（按样本数加权）\n",[66,34741,34743,34746,34748,34751,34753,34756,34758],{"class":68,"line":34742},135,[66,34744,34745],{"class":76},"                val_loss ",[66,34747,144],{"class":72},[66,34749,34750],{"class":76}," val_batch_loss.item() ",[66,34752,1208],{"class":72},[66,34754,34755],{"class":76}," b_x.size(",[66,34757,2183],{"class":102},[66,34759,313],{"class":76},[66,34761,34763,34766,34768,34771,34773],{"class":68,"line":34762},136,[66,34764,34765],{"class":76},"                val_corrects ",[66,34767,144],{"class":72},[66,34769,34770],{"class":76}," torch.sum(pre_lab ",[66,34772,531],{"class":72},[66,34774,34775],{"class":76}," b_y.data)\n",[66,34777,34779],{"class":68,"line":34778},137,[66,34780,34781],{"class":758},"                # 当前用于验证的样本数量\n",[66,34783,34785,34788,34790,34792,34794],{"class":68,"line":34784},138,[66,34786,34787],{"class":76},"            val_num ",[66,34789,144],{"class":72},[66,34791,34755],{"class":76},[66,34793,2183],{"class":102},[66,34795,313],{"class":76},[66,34797,34799],{"class":68,"line":34798},139,[66,34800,34801],{"class":758},"        # 计算并保存每一次迭代的loss值和准确率\n",[66,34803,34805],{"class":68,"line":34804},140,[66,34806,34807],{"class":758},"        # 计算并保存训练集的loss值\n",[66,34809,34811,34814,34816],{"class":68,"line":34810},141,[66,34812,34813],{"class":76},"        train_loss_all.append(train_loss",[66,34815,2563],{"class":72},[66,34817,34818],{"class":76},"train_num)\n",[66,34820,34822],{"class":68,"line":34821},142,[66,34823,34824],{"class":758},"        # 取双精度\n",[66,34826,34828],{"class":68,"line":34827},143,[66,34829,34830],{"class":758},"        # 计算并保存训练集的准确率\n",[66,34832,34834,34837,34839],{"class":68,"line":34833},144,[66,34835,34836],{"class":76},"        train_acc_all.append(train_corrects.double().item()",[66,34838,2563],{"class":72},[66,34840,34818],{"class":76},[66,34842,34844],{"class":68,"line":34843},145,[66,34845,34846],{"class":758},"        # 计算并保存验证集的loss值\n",[66,34848,34850,34853,34855],{"class":68,"line":34849},146,[66,34851,34852],{"class":76},"        val_loss_all.append(val_loss",[66,34854,2563],{"class":72},[66,34856,34857],{"class":76},"val_num)\n",[66,34859,34861],{"class":68,"line":34860},147,[66,34862,34863],{"class":758},"        # 计算并保存验证集的准确率\n",[66,34865,34867,34870,34872],{"class":68,"line":34866},148,[66,34868,34869],{"class":76},"        val_acc_all.append(val_corrects.double().item()",[66,34871,2563],{"class":72},[66,34873,34857],{"class":76},[66,34875,34877],{"class":68,"line":34876},149,[66,34878,109],{"emptyLinePlaceholder":108},[66,34880,34882],{"class":68,"line":34881},150,[66,34883,34884],{"class":758},"        # 打印训练一轮的loss值和准确率\n",[66,34886,34888,34890,34892,34894,34896,34899,34901,34904,34906,34909,34911,34913,34915,34917,34920,34922,34924,34927,34929,34931],{"class":68,"line":34887},151,[66,34889,395],{"class":102},[66,34891,348],{"class":76},[66,34893,5410],{"class":356},[66,34895,34249],{"class":102},[66,34897,34898],{"class":356},"train loss:",[66,34900,451],{"class":102},[66,34902,34903],{"class":72},":.4f",[66,34905,457],{"class":102},[66,34907,34908],{"class":356}," train acc:",[66,34910,451],{"class":102},[66,34912,34903],{"class":72},[66,34914,457],{"class":102},[66,34916,5410],{"class":356},[66,34918,34919],{"class":76},".format(epoch,train_loss_all[",[66,34921,2511],{"class":72},[66,34923,304],{"class":102},[66,34925,34926],{"class":76},"],train_acc_all[",[66,34928,2511],{"class":72},[66,34930,304],{"class":102},[66,34932,34933],{"class":76},"]))\n",[66,34935,34937,34939,34941,34943,34945,34948,34950,34952,34954,34957,34959,34961,34963,34965,34968,34970,34972,34975,34977,34979],{"class":68,"line":34936},152,[66,34938,395],{"class":102},[66,34940,348],{"class":76},[66,34942,5410],{"class":356},[66,34944,34249],{"class":102},[66,34946,34947],{"class":356},"val loss:",[66,34949,451],{"class":102},[66,34951,34903],{"class":72},[66,34953,457],{"class":102},[66,34955,34956],{"class":356}," val acc:",[66,34958,451],{"class":102},[66,34960,34903],{"class":72},[66,34962,457],{"class":102},[66,34964,5410],{"class":356},[66,34966,34967],{"class":76},".format(epoch,val_loss_all[",[66,34969,2511],{"class":72},[66,34971,304],{"class":102},[66,34973,34974],{"class":76},"],val_acc_all[",[66,34976,2511],{"class":72},[66,34978,304],{"class":102},[66,34980,34933],{"class":76},[66,34982,34984],{"class":68,"line":34983},153,[66,34985,109],{"emptyLinePlaceholder":108},[66,34987,34989],{"class":68,"line":34988},154,[66,34990,34991],{"class":758},"        # 判断准确度--->保存最优模型\n",[66,34993,34995,34997,35000,35002,35004,35006,35008],{"class":68,"line":34994},155,[66,34996,4321],{"class":72},[66,34998,34999],{"class":76}," val_acc_all[",[66,35001,2511],{"class":72},[66,35003,304],{"class":102},[66,35005,2917],{"class":76},[66,35007,386],{"class":72},[66,35009,35010],{"class":76},"best_acc:\n",[66,35012,35014],{"class":68,"line":35013},156,[66,35015,35016],{"class":758},"            # 保存当前模型准确度\n",[66,35018,35020,35023,35025,35027,35030,35032,35034],{"class":68,"line":35019},157,[66,35021,35022],{"class":76},"            best_acc:",[66,35024,2038],{"class":102},[66,35026,99],{"class":72},[66,35028,35029],{"class":76},"val_acc_all[",[66,35031,2511],{"class":72},[66,35033,304],{"class":102},[66,35035,704],{"class":76},[66,35037,35039],{"class":68,"line":35038},158,[66,35040,35041],{"class":758},"            # 保存当前的准确度\n",[66,35043,35045],{"class":68,"line":35044},159,[66,35046,35047],{"class":758},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[66,35049,35051,35054,35056],{"class":68,"line":35050},160,[66,35052,35053],{"class":76},"            best_model_wts",[66,35055,99],{"class":72},[66,35057,34106],{"class":76},[66,35059,35061],{"class":68,"line":35060},161,[66,35062,109],{"emptyLinePlaceholder":108},[66,35064,35066],{"class":68,"line":35065},162,[66,35067,35068],{"class":758},"        # 计算耗时\n",[66,35070,35072,35075,35077,35080,35082],{"class":68,"line":35071},163,[66,35073,35074],{"class":76},"        time_use",[66,35076,99],{"class":72},[66,35078,35079],{"class":76},"time.time()",[66,35081,2511],{"class":72},[66,35083,35084],{"class":76},"since\n",[66,35086,35088,35090,35092,35095,35097,35100,35102,35104,35106,35108,35110,35113,35116,35119,35121,35124,35126,35128],{"class":68,"line":35087},164,[66,35089,395],{"class":102},[66,35091,348],{"class":76},[66,35093,35094],{"class":356},"'训练和验证耗费的时间",[66,35096,451],{"class":102},[66,35098,35099],{"class":72},":.0f",[66,35101,457],{"class":102},[66,35103,2523],{"class":356},[66,35105,451],{"class":102},[66,35107,35099],{"class":72},[66,35109,457],{"class":102},[66,35111,35112],{"class":356},"s'",[66,35114,35115],{"class":76},".format(time_use",[66,35117,35118],{"class":72},"\u002F\u002F",[66,35120,2885],{"class":102},[66,35122,35123],{"class":76},",time_use",[66,35125,953],{"class":72},[66,35127,2885],{"class":102},[66,35129,360],{"class":76},[66,35131,35133],{"class":68,"line":35132},165,[66,35134,35135],{"class":758},"    # 选择最优参数\n",[66,35137,35139],{"class":68,"line":35138},166,[66,35140,35141],{"class":758},"    # 加载最高准确率下的模型参数\n",[66,35143,35145],{"class":68,"line":35144},167,[66,35146,35147],{"class":758},"    # model.load_state_dict(best_model_wts)\n",[66,35149,35151,35154,35157],{"class":68,"line":35150},168,[66,35152,35153],{"class":76},"    torch.save(model.state_dict(best_model_wts), ",[66,35155,35156],{"class":356},"'.\u002Fbest_model.pth'",[66,35158,313],{"class":76},[66,35160,35162],{"class":68,"line":35161},169,[66,35163,35164],{"class":758},"    # 或者写成\n",[66,35166,35168],{"class":68,"line":35167},170,[66,35169,35170],{"class":758},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[66,35172,35174],{"class":68,"line":35173},171,[66,35175,35176],{"class":758},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[66,35178,35180,35183,35185,35188,35191,35193],{"class":68,"line":35179},172,[66,35181,35182],{"class":76},"    train_process",[66,35184,99],{"class":72},[66,35186,35187],{"class":76},"pd.DataFrame(",[66,35189,35190],{"class":1234},"data",[66,35192,99],{"class":72},[66,35194,3388],{"class":76},[66,35196,35198,35201,35203,35205],{"class":68,"line":35197},173,[66,35199,35200],{"class":356},"        \"epoch\"",[66,35202,2838],{"class":76},[66,35204,747],{"class":102},[66,35206,35207],{"class":76},"(num_epochs),\n",[66,35209,35211,35214],{"class":68,"line":35210},174,[66,35212,35213],{"class":356},"        \"train_loss_all\"",[66,35215,35216],{"class":76},":train_loss_all,\n",[66,35218,35220,35223],{"class":68,"line":35219},175,[66,35221,35222],{"class":356},"        \"val_loss_all\"",[66,35224,35225],{"class":76},":val_loss_all,\n",[66,35227,35229,35232],{"class":68,"line":35228},176,[66,35230,35231],{"class":356},"        \"train_acc_all\"",[66,35233,35234],{"class":76},":train_acc_all,\n",[66,35236,35238,35241],{"class":68,"line":35237},177,[66,35239,35240],{"class":356},"        \"val_acc_all\"",[66,35242,35243],{"class":76},":val_acc_all\n",[66,35245,35247],{"class":68,"line":35246},178,[66,35248,35249],{"class":76},"    })\n",[66,35251,35253],{"class":68,"line":35252},179,[66,35254,35255],{"class":758},"    # 返回训练保存的过程\n",[66,35257,35259,35261],{"class":68,"line":35258},180,[66,35260,5907],{"class":72},[66,35262,35263],{"class":76}," train_process\n",[66,35265,35267],{"class":68,"line":35266},181,[66,35268,109],{"emptyLinePlaceholder":108},[66,35270,35272],{"class":68,"line":35271},182,[66,35273,35274],{"class":758},"# 将loss值和精度按照图片的形式展示出来\n",[66,35276,35278,35280,35283],{"class":68,"line":35277},183,[66,35279,33739],{"class":72},[66,35281,35282],{"class":3793}," matplot_acc_loss",[66,35284,35285],{"class":76},"(train_process):\n",[66,35287,35289],{"class":68,"line":35288},184,[66,35290,35291],{"class":758},"    # 设置图的大小\n",[66,35293,35295,35298,35300,35302,35304,35306,35308,35310],{"class":68,"line":35294},185,[66,35296,35297],{"class":76},"    plt.figure(",[66,35299,33485],{"class":1234},[66,35301,99],{"class":72},[66,35303,348],{"class":76},[66,35305,2477],{"class":102},[66,35307,2362],{"class":76},[66,35309,1076],{"class":102},[66,35311,360],{"class":76},[66,35313,35315],{"class":68,"line":35314},186,[66,35316,35317],{"class":758},"    # 设置图中有几张图\n",[66,35319,35321],{"class":68,"line":35320},187,[66,35322,35323],{"class":758},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[66,35325,35327],{"class":68,"line":35326},188,[66,35328,35329],{"class":758},"    # ①loss图\n",[66,35331,35333,35335,35337,35339,35341,35343,35345],{"class":68,"line":35332},189,[66,35334,33519],{"class":76},[66,35336,304],{"class":102},[66,35338,2362],{"class":76},[66,35340,795],{"class":102},[66,35342,2362],{"class":76},[66,35344,304],{"class":102},[66,35346,313],{"class":76},[66,35348,35350],{"class":68,"line":35349},190,[66,35351,35352],{"class":758},"    # 补充:\n",[66,35354,35356],{"class":68,"line":35355},191,[66,35357,35358],{"class":758},"    # plt.subplot(nrows, ncols, index)\n",[66,35360,35362],{"class":68,"line":35361},192,[66,35363,35364],{"class":758},"    # nrows：行数\n",[66,35366,35368],{"class":68,"line":35367},193,[66,35369,35370],{"class":758},"    # ncols：列数\n",[66,35372,35374],{"class":68,"line":35373},194,[66,35375,35376],{"class":758},"    # index：目前选中第几个子图（从1开始）\n",[66,35378,35380,35383,35386,35389,35392,35394,35397,35399,35402],{"class":68,"line":35379},195,[66,35381,35382],{"class":76},"    plt.plot(train_process[",[66,35384,35385],{"class":356},"\"epoch\"",[66,35387,35388],{"class":76},"],train_process.train_loss_all,",[66,35390,35391],{"class":356},"'ro-'",[66,35393,2362],{"class":76},[66,35395,35396],{"class":1234},"label",[66,35398,99],{"class":72},[66,35400,35401],{"class":356},"'train loss'",[66,35403,313],{"class":76},[66,35405,35407,35409,35411,35414,35417,35419,35421,35423,35426],{"class":68,"line":35406},196,[66,35408,35382],{"class":76},[66,35410,35385],{"class":356},[66,35412,35413],{"class":76},"],train_process.val_loss_all,",[66,35415,35416],{"class":356},"'bs--'",[66,35418,2362],{"class":76},[66,35420,35396],{"class":1234},[66,35422,99],{"class":72},[66,35424,35425],{"class":356},"'val loss'",[66,35427,313],{"class":76},[66,35429,35431],{"class":68,"line":35430},197,[66,35432,35433],{"class":758},"    # 添加一个图例\n",[66,35435,35437],{"class":68,"line":35436},198,[66,35438,35439],{"class":76},"    plt.legend()\n",[66,35441,35443],{"class":68,"line":35442},199,[66,35444,35445],{"class":758},"    # 给轴添加标签\n",[66,35447,35449,35452,35455],{"class":68,"line":35448},200,[66,35450,35451],{"class":76},"    plt.xlabel(",[66,35453,35454],{"class":356},"'epoch'",[66,35456,313],{"class":76},[66,35458,35460,35463,35466],{"class":68,"line":35459},201,[66,35461,35462],{"class":76},"    plt.ylabel(",[66,35464,35465],{"class":356},"'loss'",[66,35467,313],{"class":76},[66,35469,35471],{"class":68,"line":35470},202,[66,35472,35473],{"class":758},"    # ②准确度图\n",[66,35475,35477,35479,35481,35483,35485,35487,35489],{"class":68,"line":35476},203,[66,35478,33519],{"class":76},[66,35480,304],{"class":102},[66,35482,2362],{"class":76},[66,35484,795],{"class":102},[66,35486,2362],{"class":76},[66,35488,795],{"class":102},[66,35490,313],{"class":76},[66,35492,35494,35496,35498,35501,35503,35505,35507,35509,35512],{"class":68,"line":35493},204,[66,35495,35382],{"class":76},[66,35497,35385],{"class":356},[66,35499,35500],{"class":76},"],train_process.train_acc_all,",[66,35502,35391],{"class":356},[66,35504,2362],{"class":76},[66,35506,35396],{"class":1234},[66,35508,99],{"class":72},[66,35510,35511],{"class":356},"'train acc'",[66,35513,313],{"class":76},[66,35515,35517,35519,35521,35524,35526,35528,35530,35532,35535],{"class":68,"line":35516},205,[66,35518,35382],{"class":76},[66,35520,35385],{"class":356},[66,35522,35523],{"class":76},"],train_process.val_acc_all,",[66,35525,35416],{"class":356},[66,35527,2362],{"class":76},[66,35529,35396],{"class":1234},[66,35531,99],{"class":72},[66,35533,35534],{"class":356},"'val acc'",[66,35536,313],{"class":76},[66,35538,35540],{"class":68,"line":35539},206,[66,35541,35542],{"class":758},"    # 添加图例\n",[66,35544,35546],{"class":68,"line":35545},207,[66,35547,35439],{"class":76},[66,35549,35551,35553,35555],{"class":68,"line":35550},208,[66,35552,35451],{"class":76},[66,35554,35385],{"class":356},[66,35556,313],{"class":76},[66,35558,35560,35562,35565],{"class":68,"line":35559},209,[66,35561,35462],{"class":76},[66,35563,35564],{"class":356},"\"acc\"",[66,35566,313],{"class":76},[66,35568,35570],{"class":68,"line":35569},210,[66,35571,35572],{"class":76},"    plt.show()\n",[66,35574,35576],{"class":68,"line":35575},211,[66,35577,109],{"emptyLinePlaceholder":108},[66,35579,35581],{"class":68,"line":35580},212,[66,35582,35583],{"class":758},"# 正式开始训练:\n",[66,35585,35587,35589,35591,35593,35595],{"class":68,"line":35586},213,[66,35588,3373],{"class":72},[66,35590,33014],{"class":102},[66,35592,531],{"class":72},[66,35594,33019],{"class":356},[66,35596,126],{"class":76},[66,35598,35600],{"class":68,"line":35599},214,[66,35601,35602],{"class":758},"    # 将模型实例化\n",[66,35604,35606,35609,35611],{"class":68,"line":35605},215,[66,35607,35608],{"class":76},"    LeNet",[66,35610,99],{"class":72},[66,35612,35613],{"class":76},"LeNet()\n",[66,35615,35617,35620,35622],{"class":68,"line":35616},216,[66,35618,35619],{"class":76},"    train_dataloader,val_dataloader",[66,35621,99],{"class":72},[66,35623,35624],{"class":76},"train_val_data_process()\n",[66,35626,35628,35630,35632,35635,35638,35640,35642],{"class":68,"line":35627},217,[66,35629,35182],{"class":76},[66,35631,99],{"class":72},[66,35633,35634],{"class":76},"train_model_process(LeNet,train_dataloader,val_dataloader,",[66,35636,35637],{"class":1234},"num_epochs",[66,35639,99],{"class":72},[66,35641,2679],{"class":102},[66,35643,313],{"class":76},[66,35645,35647],{"class":68,"line":35646},218,[66,35648,35649],{"class":76},"    matplot_acc_loss(train_process)\n",[19,35651,35652],{},"画图的补充点学习：",[19,35654,35655],{},[3304,35656],{"alt":62,"src":35657},"\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",[31,35659,35660],{"start":112},[34,35661,35662],{},"测试",[57,35664,35666],{"className":59,"code":35665,"language":61,"meta":62,"style":62},"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",[23,35667,35668,35674,35684,35696,35706,35711,35721,35731,35735,35740,35749,35766,35778,35795,35806,35822,35827,35838,35849,35860,35867,35871,35876,35886,35891,35908,35916,35920,35925,35934,35943,35947,35952,35957,35962,35969,35974,35986,35996,36006,36011,36015,36020,36029,36034,36050,36055,36060,36065,36079,36084,36098,36102,36107,36122,36127,36139,36143,36148,36160,36165,36173,36178,36183,36193,36198,36207,36212,36217,36221,36226,36231,36247,36255,36260,36265,36324,36330,36335,36346,36354,36362,36366,36371,36375,36380,36388,36393,36409,36414,36424,36434],{"__ignoreMap":62},[66,35669,35670,35672],{"class":68,"line":69},[66,35671,284],{"class":72},[66,35673,32192],{"class":76},[66,35675,35676,35678,35680,35682],{"class":68,"line":80},[66,35677,284],{"class":72},[66,35679,33208],{"class":76},[66,35681,33176],{"class":72},[66,35683,33213],{"class":76},[66,35685,35686,35688,35691,35693],{"class":68,"line":112},[66,35687,32532],{"class":72},[66,35689,35690],{"class":76}," jupyter_client.consoleapp ",[66,35692,284],{"class":72},[66,35694,35695],{"class":76}," classes\n",[66,35697,35698,35700,35702,35704],{"class":68,"line":129},[66,35699,32532],{"class":72},[66,35701,33191],{"class":76},[66,35703,284],{"class":72},[66,35705,33196],{"class":76},[66,35707,35708],{"class":68,"line":138},[66,35709,35710],{"class":758},"# 导入数据集\n",[66,35712,35713,35715,35717,35719],{"class":68,"line":227},[66,35714,32532],{"class":72},[66,35716,33161],{"class":76},[66,35718,284],{"class":72},[66,35720,33166],{"class":76},[66,35722,35723,35725,35727,35729],{"class":68,"line":236},[66,35724,32532],{"class":72},[66,35726,33706],{"class":76},[66,35728,284],{"class":72},[66,35730,33711],{"class":76},[66,35732,35733],{"class":68,"line":241},[66,35734,109],{"emptyLinePlaceholder":108},[66,35736,35737],{"class":68,"line":372},[66,35738,35739],{"class":758},"# 测试数据处理\n",[66,35741,35742,35744,35747],{"class":68,"line":377},[66,35743,33739],{"class":72},[66,35745,35746],{"class":3793}," test_data_process",[66,35748,33745],{"class":76},[66,35750,35751,35754,35756,35758,35760,35762,35764],{"class":68,"line":392},[66,35752,35753],{"class":76},"    test_data",[66,35755,99],{"class":72},[66,35757,33248],{"class":76},[66,35759,33251],{"class":1234},[66,35761,99],{"class":72},[66,35763,33256],{"class":356},[66,35765,33259],{"class":76},[66,35767,35768,35771,35773,35776],{"class":68,"line":405},[66,35769,35770],{"class":1234},"                           train",[66,35772,99],{"class":72},[66,35774,35775],{"class":102},"False",[66,35777,33259],{"class":76},[66,35779,35780,35783,35785,35787,35789,35791,35793],{"class":68,"line":418},[66,35781,35782],{"class":1234},"                           transform",[66,35784,99],{"class":72},[66,35786,33286],{"class":76},[66,35788,33289],{"class":1234},[66,35790,99],{"class":72},[66,35792,2879],{"class":102},[66,35794,33297],{"class":76},[66,35796,35797,35800,35802,35804],{"class":68,"line":430},[66,35798,35799],{"class":1234},"                           download",[66,35801,99],{"class":72},[66,35803,33269],{"class":102},[66,35805,313],{"class":76},[66,35807,35808,35811,35813,35815,35817,35819],{"class":68,"line":438},[66,35809,35810],{"class":76},"    test_dataloader",[66,35812,99],{"class":72},[66,35814,33327],{"class":76},[66,35816,33330],{"class":1234},[66,35818,99],{"class":72},[66,35820,35821],{"class":76},"test_data,\n",[66,35823,35824],{"class":68,"line":465},[66,35825,35826],{"class":758},"                                    # 这里是一张一张进行测试\n",[66,35828,35829,35832,35834,35836],{"class":68,"line":1805},[66,35830,35831],{"class":1234},"                                    batch_size",[66,35833,99],{"class":72},[66,35835,304],{"class":102},[66,35837,33259],{"class":76},[66,35839,35840,35843,35845,35847],{"class":68,"line":1817},[66,35841,35842],{"class":1234},"                                    shuffle",[66,35844,99],{"class":72},[66,35846,33269],{"class":102},[66,35848,33259],{"class":76},[66,35850,35851,35854,35856,35858],{"class":68,"line":1822},[66,35852,35853],{"class":1234},"                                    num_workers",[66,35855,99],{"class":72},[66,35857,2183],{"class":102},[66,35859,313],{"class":76},[66,35861,35862,35864],{"class":68,"line":1829},[66,35863,5907],{"class":72},[66,35865,35866],{"class":76}," test_dataloader\n",[66,35868,35869],{"class":68,"line":3529},[66,35870,109],{"emptyLinePlaceholder":108},[66,35872,35873],{"class":68,"line":3557},[66,35874,35875],{"class":758},"# 定义模型测试函数\n",[66,35877,35878,35880,35883],{"class":68,"line":3562},[66,35879,33739],{"class":72},[66,35881,35882],{"class":3793}," test_model_process",[66,35884,35885],{"class":76},"(model,test_dataloader):\n",[66,35887,35888],{"class":68,"line":3579},[66,35889,35890],{"class":758},"    # 将模型放到设备当中，先进行判断\n",[66,35892,35893,35895,35897,35899,35901,35903,35905],{"class":68,"line":3584},[66,35894,33031],{"class":76},[66,35896,99],{"class":72},[66,35898,33038],{"class":356},[66,35900,3534],{"class":72},[66,35902,33043],{"class":76},[66,35904,1292],{"class":72},[66,35906,35907],{"class":356}," \"cpu\"\n",[66,35909,35910,35912,35914],{"class":68,"line":3589},[66,35911,33083],{"class":76},[66,35913,99],{"class":72},[66,35915,34081],{"class":76},[66,35917,35918],{"class":68,"line":3594},[66,35919,109],{"emptyLinePlaceholder":108},[66,35921,35922],{"class":68,"line":3608},[66,35923,35924],{"class":758},"    # 设置初始化参数\n",[66,35926,35927,35930,35932],{"class":68,"line":3613},[66,35928,35929],{"class":76},"    test_corrects",[66,35931,99],{"class":72},[66,35933,34134],{"class":102},[66,35935,35936,35939,35941],{"class":68,"line":4401},[66,35937,35938],{"class":76},"    test_num",[66,35940,99],{"class":72},[66,35942,4906],{"class":102},[66,35944,35945],{"class":68,"line":4415},[66,35946,109],{"emptyLinePlaceholder":108},[66,35948,35949],{"class":68,"line":4423},[66,35950,35951],{"class":758},"    # 进行模型测试\n",[66,35953,35954],{"class":68,"line":4428},[66,35955,35956],{"class":758},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[66,35958,35959],{"class":68,"line":4434},[66,35960,35961],{"class":758},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[66,35963,35964,35967],{"class":68,"line":4440},[66,35965,35966],{"class":72},"    with",[66,35968,34674],{"class":76},[66,35970,35971],{"class":68,"line":4445},[66,35972,35973],{"class":758},"        # 从数据中进行\n",[66,35975,35976,35978,35981,35983],{"class":68,"line":9759},[66,35977,5222],{"class":72},[66,35979,35980],{"class":76}," test_data_x,test_data_y ",[66,35982,507],{"class":72},[66,35984,35985],{"class":76}," test_dataloader:\n",[66,35987,35988,35991,35993],{"class":68,"line":9783},[66,35989,35990],{"class":76},"            test_data_x",[66,35992,99],{"class":72},[66,35994,35995],{"class":76},"test_data_x.to(device)\n",[66,35997,35998,36001,36003],{"class":68,"line":9788},[66,35999,36000],{"class":76},"            test_data_y",[66,36002,99],{"class":72},[66,36004,36005],{"class":76},"test_data_y.to(device)\n",[66,36007,36008],{"class":68,"line":9794},[66,36009,36010],{"class":758},"            # 设置为验证模式\n",[66,36012,36013],{"class":68,"line":9821},[66,36014,34665],{"class":76},[66,36016,36017],{"class":68,"line":9826},[66,36018,36019],{"class":758},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[66,36021,36022,36024,36026],{"class":68,"line":9832},[66,36023,34450],{"class":76},[66,36025,99],{"class":72},[66,36027,36028],{"class":76},"model(test_data_x)\n",[66,36030,36031],{"class":68,"line":9844},[66,36032,36033],{"class":758},"            # 查找每一行中最大值对应的下标\n",[66,36035,36036,36038,36040,36042,36044,36046,36048],{"class":68,"line":9856},[66,36037,34467],{"class":76},[66,36039,99],{"class":72},[66,36041,34472],{"class":76},[66,36043,34475],{"class":1234},[66,36045,99],{"class":72},[66,36047,304],{"class":102},[66,36049,313],{"class":76},[66,36051,36052],{"class":68,"line":9868},[66,36053,36054],{"class":758},"            # 计算正确率\n",[66,36056,36057],{"class":68,"line":11523},[66,36058,36059],{"class":758},"            # .data表示是一个不带梯度信息的tensor\n",[66,36061,36062],{"class":68,"line":11548},[66,36063,36064],{"class":758},"            # 如果预测正确，则准确度test_corrects加1\n",[66,36066,36067,36070,36072,36074,36076],{"class":68,"line":11571},[66,36068,36069],{"class":76},"            test_corrects",[66,36071,144],{"class":72},[66,36073,34577],{"class":76},[66,36075,531],{"class":72},[66,36077,36078],{"class":76},"test_data_y.data)\n",[66,36080,36081],{"class":68,"line":11595},[66,36082,36083],{"class":758},"            # 将所有的测试样本进行累计\n",[66,36085,36086,36089,36091,36094,36096],{"class":68,"line":11600},[66,36087,36088],{"class":76},"            test_num",[66,36090,144],{"class":72},[66,36092,36093],{"class":76},"test_data_x.size(",[66,36095,2183],{"class":102},[66,36097,313],{"class":76},[66,36099,36100],{"class":68,"line":11605},[66,36101,109],{"emptyLinePlaceholder":108},[66,36103,36104],{"class":68,"line":11610},[66,36105,36106],{"class":758},"        # 计算准确度\n",[66,36108,36109,36112,36114,36117,36119],{"class":68,"line":11619},[66,36110,36111],{"class":76},"        test_acc",[66,36113,99],{"class":72},[66,36115,36116],{"class":76},"test_corrects.double().item()",[66,36118,2563],{"class":72},[66,36120,36121],{"class":76},"test_num\n",[66,36123,36124],{"class":68,"line":11624},[66,36125,36126],{"class":758},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[66,36128,36129,36131,36133,36136],{"class":68,"line":11630},[66,36130,395],{"class":102},[66,36132,348],{"class":76},[66,36134,36135],{"class":356},"\"测试的准确率：\"",[66,36137,36138],{"class":76},",test_acc)\n",[66,36140,36141],{"class":68,"line":11651},[66,36142,109],{"emptyLinePlaceholder":108},[66,36144,36145],{"class":68,"line":11657},[66,36146,36147],{"class":758},"# 实现模型的测试功能\n",[66,36149,36150,36152,36154,36156,36158],{"class":68,"line":11671},[66,36151,3373],{"class":72},[66,36153,33014],{"class":102},[66,36155,531],{"class":72},[66,36157,33019],{"class":356},[66,36159,126],{"class":76},[66,36161,36162],{"class":68,"line":11677},[66,36163,36164],{"class":758},"    # 加载模型\n",[66,36166,36167,36169,36171],{"class":68,"line":11704},[66,36168,33083],{"class":76},[66,36170,99],{"class":72},[66,36172,35613],{"class":76},[66,36174,36175],{"class":68,"line":11713},[66,36176,36177],{"class":758},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[66,36179,36180],{"class":68,"line":11719},[66,36181,36182],{"class":758},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[66,36184,36185,36188,36191],{"class":68,"line":11727},[66,36186,36187],{"class":76},"    model.load_state_dict(torch.load(",[66,36189,36190],{"class":356},"'best_model.pth'",[66,36192,360],{"class":76},[66,36194,36195],{"class":68,"line":11732},[66,36196,36197],{"class":758},"    # 数据加载\n",[66,36199,36200,36202,36204],{"class":68,"line":18407},[66,36201,35810],{"class":76},[66,36203,99],{"class":72},[66,36205,36206],{"class":76},"test_data_process()\n",[66,36208,36209],{"class":68,"line":18413},[66,36210,36211],{"class":758},"    # 加载模型测试的函数\n",[66,36213,36214],{"class":68,"line":18436},[66,36215,36216],{"class":76},"    test_model_process(model,test_dataloader)\n",[66,36218,36219],{"class":68,"line":18442},[66,36220,109],{"emptyLinePlaceholder":108},[66,36222,36223],{"class":68,"line":18465},[66,36224,36225],{"class":758},"    # 验证集推理实现：\n",[66,36227,36228],{"class":68,"line":18479},[66,36229,36230],{"class":758},"    # 加载数据加载的更详细一些\n",[66,36232,36233,36235,36237,36239,36241,36243,36245],{"class":68,"line":18499},[66,36234,33031],{"class":76},[66,36236,99],{"class":72},[66,36238,33038],{"class":356},[66,36240,3534],{"class":72},[66,36242,33043],{"class":76},[66,36244,1292],{"class":72},[66,36246,35907],{"class":356},[66,36248,36249,36251,36253],{"class":68,"line":18505},[66,36250,33083],{"class":76},[66,36252,99],{"class":72},[66,36254,34081],{"class":76},[66,36256,36257],{"class":68,"line":18516},[66,36258,36259],{"class":758},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[66,36261,36262],{"class":68,"line":18539},[66,36263,36264],{"class":758},"    # 顺序不可改变\n",[66,36266,36267,36270,36272,36274,36277,36279,36282,36284,36287,36289,36292,36294,36297,36299,36302,36304,36307,36309,36312,36314,36317,36319,36322],{"class":68,"line":18561},[66,36268,36269],{"class":76},"    classes",[66,36271,99],{"class":72},[66,36273,2869],{"class":76},[66,36275,36276],{"class":356},"'T-shirt\u002Ftop'",[66,36278,2362],{"class":76},[66,36280,36281],{"class":356},"'Trouser'",[66,36283,2362],{"class":76},[66,36285,36286],{"class":356},"'Pullover'",[66,36288,2362],{"class":76},[66,36290,36291],{"class":356},"'Dress'",[66,36293,2362],{"class":76},[66,36295,36296],{"class":356},"'Coat'",[66,36298,2362],{"class":76},[66,36300,36301],{"class":356},"'Sandal'",[66,36303,2362],{"class":76},[66,36305,36306],{"class":356},"'Shirt'",[66,36308,2362],{"class":76},[66,36310,36311],{"class":356},"'Sneaker'",[66,36313,2362],{"class":76},[66,36315,36316],{"class":356},"'Bag'",[66,36318,2362],{"class":76},[66,36320,36321],{"class":356},"'Ankle boot'",[66,36323,704],{"class":76},[66,36325,36326,36328],{"class":68,"line":18566},[66,36327,35966],{"class":72},[66,36329,34674],{"class":76},[66,36331,36332],{"class":68,"line":18572},[66,36333,36334],{"class":758},"        # 将数据和标签都放到设备当中\n",[66,36336,36337,36339,36342,36344],{"class":68,"line":18586},[66,36338,5222],{"class":72},[66,36340,36341],{"class":76}," b_x,b_y ",[66,36343,507],{"class":72},[66,36345,35985],{"class":76},[66,36347,36348,36350,36352],{"class":68,"line":18599},[66,36349,34400],{"class":76},[66,36351,99],{"class":72},[66,36353,34405],{"class":76},[66,36355,36356,36358,36360],{"class":68,"line":18604},[66,36357,34415],{"class":76},[66,36359,99],{"class":72},[66,36361,34420],{"class":76},[66,36363,36364],{"class":68,"line":18618},[66,36365,109],{"emptyLinePlaceholder":108},[66,36367,36368],{"class":68,"line":18623},[66,36369,36370],{"class":758},"            # 设置模型为验证模式\n",[66,36372,36373],{"class":68,"line":18629},[66,36374,34665],{"class":76},[66,36376,36377],{"class":68,"line":18634},[66,36378,36379],{"class":758},"            # 模型推理结果\n",[66,36381,36382,36384,36386],{"class":68,"line":18648},[66,36383,34450],{"class":76},[66,36385,99],{"class":72},[66,36387,34455],{"class":76},[66,36389,36390],{"class":68,"line":18653},[66,36391,36392],{"class":758},"            # 获取最大下标，最大下标就是类别号\n",[66,36394,36395,36397,36399,36401,36403,36405,36407],{"class":68,"line":18658},[66,36396,34467],{"class":76},[66,36398,99],{"class":72},[66,36400,34472],{"class":76},[66,36402,34475],{"class":1234},[66,36404,99],{"class":72},[66,36406,304],{"class":102},[66,36408,313],{"class":76},[66,36410,36411],{"class":68,"line":18672},[66,36412,36413],{"class":758},"            # 取出张量中的数值\n",[66,36415,36416,36419,36421],{"class":68,"line":18684},[66,36417,36418],{"class":76},"            result",[66,36420,99],{"class":72},[66,36422,36423],{"class":76},"pre_lab.item()\n",[66,36425,36426,36429,36431],{"class":68,"line":18689},[66,36427,36428],{"class":76},"            label",[66,36430,99],{"class":72},[66,36432,36433],{"class":76},"b_y.item()\n",[66,36435,36436,36439,36441,36444,36447,36450,36452,36455],{"class":68,"line":18702},[66,36437,36438],{"class":102},"            print",[66,36440,348],{"class":76},[66,36442,36443],{"class":356},"\"预测值：\"",[66,36445,36446],{"class":76},",classes[result],",[66,36448,36449],{"class":356},"\"------\"",[66,36451,2362],{"class":76},[66,36453,36454],{"class":356},"\"真实值：\"",[66,36456,36457],{"class":76},",classes[label])\n",[19,36459,36460],{},"（2）AlexNet",[31,36462,36463],{},[34,36464,36465],{},"神经网络构建",[57,36467,36469],{"className":59,"code":36468,"language":61,"meta":62,"style":62},"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",[23,36470,36471,36477,36487,36497,36509,36513,36530,36538,36553,36565,36607,36634,36677,36703,36747,36790,36833,36860,36864,36874,36879,36907,36926,36945,36949,36954,36962,36977,36987,37001,37011,37026,37041,37056,37067,37071,37076,37086,37101,37106,37120,37135,37147,37152,37163,37168,37174,37179,37191,37211,37216,37225],{"__ignoreMap":62},[66,36472,36473,36475],{"class":68,"line":69},[66,36474,284],{"class":72},[66,36476,32192],{"class":76},[66,36478,36479,36481,36483,36485],{"class":68,"line":80},[66,36480,32532],{"class":72},[66,36482,32535],{"class":76},[66,36484,284],{"class":72},[66,36486,32540],{"class":76},[66,36488,36489,36491,36493,36495],{"class":68,"line":112},[66,36490,32532],{"class":72},[66,36492,32552],{"class":76},[66,36494,284],{"class":72},[66,36496,32557],{"class":76},[66,36498,36499,36501,36504,36506],{"class":68,"line":129},[66,36500,284],{"class":72},[66,36502,36503],{"class":76}," torch.nn.functional ",[66,36505,33176],{"class":72},[66,36507,36508],{"class":76}," F\n",[66,36510,36511],{"class":68,"line":138},[66,36512,109],{"emptyLinePlaceholder":108},[66,36514,36515,36517,36520,36522,36524,36526,36528],{"class":68,"line":227},[66,36516,16499],{"class":72},[66,36518,36519],{"class":3793}," AlexNet",[66,36521,348],{"class":76},[66,36523,32573],{"class":3793},[66,36525,2537],{"class":76},[66,36527,32578],{"class":3793},[66,36529,522],{"class":76},[66,36531,36532,36534,36536],{"class":68,"line":236},[66,36533,32595],{"class":72},[66,36535,32598],{"class":102},[66,36537,32601],{"class":76},[66,36539,36540,36542,36545,36547,36549,36551],{"class":68,"line":241},[66,36541,32611],{"class":102},[66,36543,36544],{"class":76},"(AlexNet,",[66,36546,32617],{"class":102},[66,36548,32620],{"class":76},[66,36550,32623],{"class":102},[66,36552,1253],{"class":76},[66,36554,36555,36557,36560,36562],{"class":68,"line":372},[66,36556,32639],{"class":102},[66,36558,36559],{"class":76},".ReLu",[66,36561,99],{"class":72},[66,36563,36564],{"class":76},"nn.ReLU()\n",[66,36566,36567,36569,36571,36573,36575,36577,36579,36581,36583,36585,36587,36589,36591,36593,36595,36597,36599,36601,36603,36605],{"class":68,"line":377},[66,36568,32639],{"class":102},[66,36570,32642],{"class":76},[66,36572,99],{"class":72},[66,36574,32647],{"class":76},[66,36576,32650],{"class":1234},[66,36578,99],{"class":72},[66,36580,304],{"class":102},[66,36582,2362],{"class":76},[66,36584,32659],{"class":1234},[66,36586,99],{"class":72},[66,36588,2201],{"class":102},[66,36590,2362],{"class":76},[66,36592,32668],{"class":1234},[66,36594,99],{"class":72},[66,36596,2452],{"class":102},[66,36598,2362],{"class":76},[66,36600,32723],{"class":1234},[66,36602,99],{"class":72},[66,36604,1076],{"class":102},[66,36606,313],{"class":76},[66,36608,36609,36611,36613,36615,36618,36620,36622,36624,36626,36628,36630,36632],{"class":68,"line":392},[66,36610,32639],{"class":102},[66,36612,32707],{"class":76},[66,36614,99],{"class":72},[66,36616,36617],{"class":76},"nn.MaxPool2d(",[66,36619,32668],{"class":1234},[66,36621,99],{"class":72},[66,36623,1520],{"class":102},[66,36625,2362],{"class":76},[66,36627,32723],{"class":1234},[66,36629,99],{"class":72},[66,36631,795],{"class":102},[66,36633,313],{"class":76},[66,36635,36636,36638,36640,36642,36644,36646,36648,36650,36652,36654,36656,36659,36661,36663,36665,36667,36669,36671,36673,36675],{"class":68,"line":405},[66,36637,32639],{"class":102},[66,36639,32736],{"class":76},[66,36641,99],{"class":72},[66,36643,32647],{"class":76},[66,36645,32650],{"class":1234},[66,36647,99],{"class":72},[66,36649,2201],{"class":102},[66,36651,2362],{"class":76},[66,36653,32659],{"class":1234},[66,36655,99],{"class":72},[66,36657,36658],{"class":102},"256",[66,36660,2362],{"class":76},[66,36662,32668],{"class":1234},[66,36664,99],{"class":72},[66,36666,752],{"class":102},[66,36668,2362],{"class":76},[66,36670,32677],{"class":1234},[66,36672,99],{"class":72},[66,36674,795],{"class":102},[66,36676,313],{"class":76},[66,36678,36679,36681,36683,36685,36687,36689,36691,36693,36695,36697,36699,36701],{"class":68,"line":418},[66,36680,32639],{"class":102},[66,36682,32771],{"class":76},[66,36684,99],{"class":72},[66,36686,36617],{"class":76},[66,36688,32668],{"class":1234},[66,36690,99],{"class":72},[66,36692,1520],{"class":102},[66,36694,2362],{"class":76},[66,36696,32723],{"class":1234},[66,36698,99],{"class":72},[66,36700,795],{"class":102},[66,36702,313],{"class":76},[66,36704,36705,36707,36710,36712,36714,36716,36718,36720,36722,36724,36726,36729,36731,36733,36735,36737,36739,36741,36743,36745],{"class":68,"line":430},[66,36706,32639],{"class":102},[66,36708,36709],{"class":76},".c5",[66,36711,99],{"class":72},[66,36713,32647],{"class":76},[66,36715,32650],{"class":1234},[66,36717,99],{"class":72},[66,36719,36658],{"class":102},[66,36721,2362],{"class":76},[66,36723,32659],{"class":1234},[66,36725,99],{"class":72},[66,36727,36728],{"class":102},"384",[66,36730,2362],{"class":76},[66,36732,32668],{"class":1234},[66,36734,99],{"class":72},[66,36736,1520],{"class":102},[66,36738,2362],{"class":76},[66,36740,32677],{"class":1234},[66,36742,99],{"class":72},[66,36744,304],{"class":102},[66,36746,313],{"class":76},[66,36748,36749,36751,36754,36756,36758,36760,36762,36764,36766,36768,36770,36772,36774,36776,36778,36780,36782,36784,36786,36788],{"class":68,"line":438},[66,36750,32639],{"class":102},[66,36752,36753],{"class":76},".c6",[66,36755,99],{"class":72},[66,36757,32647],{"class":76},[66,36759,32650],{"class":1234},[66,36761,99],{"class":72},[66,36763,36728],{"class":102},[66,36765,2362],{"class":76},[66,36767,32659],{"class":1234},[66,36769,99],{"class":72},[66,36771,36728],{"class":102},[66,36773,2362],{"class":76},[66,36775,32668],{"class":1234},[66,36777,99],{"class":72},[66,36779,1520],{"class":102},[66,36781,2362],{"class":76},[66,36783,32677],{"class":1234},[66,36785,99],{"class":72},[66,36787,304],{"class":102},[66,36789,313],{"class":76},[66,36791,36792,36794,36797,36799,36801,36803,36805,36807,36809,36811,36813,36815,36817,36819,36821,36823,36825,36827,36829,36831],{"class":68,"line":465},[66,36793,32639],{"class":102},[66,36795,36796],{"class":76},".c7",[66,36798,99],{"class":72},[66,36800,32647],{"class":76},[66,36802,32650],{"class":1234},[66,36804,99],{"class":72},[66,36806,36728],{"class":102},[66,36808,2362],{"class":76},[66,36810,32659],{"class":1234},[66,36812,99],{"class":72},[66,36814,36658],{"class":102},[66,36816,2362],{"class":76},[66,36818,32668],{"class":1234},[66,36820,99],{"class":72},[66,36822,1520],{"class":102},[66,36824,2362],{"class":76},[66,36826,32677],{"class":1234},[66,36828,99],{"class":72},[66,36830,304],{"class":102},[66,36832,313],{"class":76},[66,36834,36835,36837,36840,36842,36844,36846,36848,36850,36852,36854,36856,36858],{"class":68,"line":1805},[66,36836,32639],{"class":102},[66,36838,36839],{"class":76},".s8",[66,36841,99],{"class":72},[66,36843,36617],{"class":76},[66,36845,32668],{"class":1234},[66,36847,99],{"class":72},[66,36849,1520],{"class":102},[66,36851,2362],{"class":76},[66,36853,32723],{"class":1234},[66,36855,99],{"class":72},[66,36857,795],{"class":102},[66,36859,313],{"class":76},[66,36861,36862],{"class":68,"line":1817},[66,36863,32796],{"class":758},[66,36865,36866,36868,36870,36872],{"class":68,"line":1822},[66,36867,32639],{"class":102},[66,36869,32803],{"class":76},[66,36871,99],{"class":72},[66,36873,32808],{"class":76},[66,36875,36876],{"class":68,"line":1829},[66,36877,36878],{"class":758},"       # 定义全连接层\n",[66,36880,36881,36883,36886,36888,36890,36892,36894,36896,36898,36900,36902,36905],{"class":68,"line":3529},[66,36882,32639],{"class":102},[66,36884,36885],{"class":76},".f1",[66,36887,99],{"class":72},[66,36889,32825],{"class":76},[66,36891,519],{"class":102},[66,36893,1208],{"class":72},[66,36895,519],{"class":102},[66,36897,1208],{"class":72},[66,36899,36658],{"class":102},[66,36901,2362],{"class":76},[66,36903,36904],{"class":102},"4096",[66,36906,313],{"class":76},[66,36908,36909,36911,36914,36916,36918,36920,36922,36924],{"class":68,"line":3557},[66,36910,32639],{"class":102},[66,36912,36913],{"class":76},".f2",[66,36915,99],{"class":72},[66,36917,32825],{"class":76},[66,36919,36904],{"class":102},[66,36921,2362],{"class":76},[66,36923,36904],{"class":102},[66,36925,313],{"class":76},[66,36927,36928,36930,36933,36935,36937,36939,36941,36943],{"class":68,"line":3562},[66,36929,32639],{"class":102},[66,36931,36932],{"class":76},".f3",[66,36934,99],{"class":72},[66,36936,32825],{"class":76},[66,36938,36904],{"class":102},[66,36940,2362],{"class":76},[66,36942,790],{"class":102},[66,36944,313],{"class":76},[66,36946,36947],{"class":68,"line":3579},[66,36948,109],{"emptyLinePlaceholder":108},[66,36950,36951],{"class":68,"line":3584},[66,36952,36953],{"class":758},"    # 定义前向传播\n",[66,36955,36956,36958,36960],{"class":68,"line":3589},[66,36957,32595],{"class":72},[66,36959,32887],{"class":3793},[66,36961,32890],{"class":76},[66,36963,36964,36966,36968,36970,36973,36975],{"class":68,"line":3594},[66,36965,32895],{"class":76},[66,36967,99],{"class":72},[66,36969,32617],{"class":102},[66,36971,36972],{"class":76},".ReLu(",[66,36974,32617],{"class":102},[66,36976,32907],{"class":76},[66,36978,36979,36981,36983,36985],{"class":68,"line":3608},[66,36980,32895],{"class":76},[66,36982,99],{"class":72},[66,36984,32617],{"class":102},[66,36986,32918],{"class":76},[66,36988,36989,36991,36993,36995,36997,36999],{"class":68,"line":3613},[66,36990,32895],{"class":76},[66,36992,99],{"class":72},[66,36994,32617],{"class":102},[66,36996,36972],{"class":76},[66,36998,32617],{"class":102},[66,37000,32933],{"class":76},[66,37002,37003,37005,37007,37009],{"class":68,"line":4401},[66,37004,32895],{"class":76},[66,37006,99],{"class":72},[66,37008,32617],{"class":102},[66,37010,32944],{"class":76},[66,37012,37013,37015,37017,37019,37021,37023],{"class":68,"line":4415},[66,37014,32895],{"class":76},[66,37016,99],{"class":72},[66,37018,32617],{"class":102},[66,37020,36972],{"class":76},[66,37022,32617],{"class":102},[66,37024,37025],{"class":76},".c5(x))\n",[66,37027,37028,37030,37032,37034,37036,37038],{"class":68,"line":4423},[66,37029,32895],{"class":76},[66,37031,99],{"class":72},[66,37033,32617],{"class":102},[66,37035,36972],{"class":76},[66,37037,32617],{"class":102},[66,37039,37040],{"class":76},".c6(x))\n",[66,37042,37043,37045,37047,37049,37051,37053],{"class":68,"line":4428},[66,37044,32895],{"class":76},[66,37046,99],{"class":72},[66,37048,32617],{"class":102},[66,37050,36972],{"class":76},[66,37052,32617],{"class":102},[66,37054,37055],{"class":76},".c7(x))\n",[66,37057,37058,37060,37062,37064],{"class":68,"line":4434},[66,37059,32895],{"class":76},[66,37061,99],{"class":72},[66,37063,32617],{"class":102},[66,37065,37066],{"class":76},".s8(x)\n",[66,37068,37069],{"class":68,"line":4440},[66,37070,109],{"emptyLinePlaceholder":108},[66,37072,37073],{"class":68,"line":4445},[66,37074,37075],{"class":758},"        # 展平加线性全连接层\n",[66,37077,37078,37080,37082,37084],{"class":68,"line":9759},[66,37079,32895],{"class":76},[66,37081,99],{"class":72},[66,37083,32617],{"class":102},[66,37085,32955],{"class":76},[66,37087,37088,37090,37092,37094,37096,37098],{"class":68,"line":9783},[66,37089,32895],{"class":76},[66,37091,99],{"class":72},[66,37093,32617],{"class":102},[66,37095,36972],{"class":76},[66,37097,32617],{"class":102},[66,37099,37100],{"class":76},".f1(x))\n",[66,37102,37103],{"class":68,"line":9788},[66,37104,37105],{"class":758},"        # 还需要dropout对神经元随机进行失活\n",[66,37107,37108,37110,37112,37115,37118],{"class":68,"line":9794},[66,37109,32895],{"class":76},[66,37111,99],{"class":72},[66,37113,37114],{"class":76},"F.dropout(x,",[66,37116,37117],{"class":102},"0.5",[66,37119,313],{"class":76},[66,37121,37122,37124,37126,37128,37130,37132],{"class":68,"line":9821},[66,37123,32895],{"class":76},[66,37125,99],{"class":72},[66,37127,32617],{"class":102},[66,37129,36972],{"class":76},[66,37131,32617],{"class":102},[66,37133,37134],{"class":76},".f2(x))\n",[66,37136,37137,37139,37141,37143,37145],{"class":68,"line":9826},[66,37138,32895],{"class":76},[66,37140,99],{"class":72},[66,37142,37114],{"class":76},[66,37144,37117],{"class":102},[66,37146,313],{"class":76},[66,37148,37149],{"class":68,"line":9832},[66,37150,37151],{"class":758},"        # 直接输出\n",[66,37153,37154,37156,37158,37160],{"class":68,"line":9844},[66,37155,32895],{"class":76},[66,37157,99],{"class":72},[66,37159,32617],{"class":102},[66,37161,37162],{"class":76},".f3(x)\n",[66,37164,37165],{"class":68,"line":9856},[66,37166,37167],{"class":758},"        # 前向传播输出\n",[66,37169,37170,37172],{"class":68,"line":9868},[66,37171,16557],{"class":72},[66,37173,33003],{"class":76},[66,37175,37176],{"class":68,"line":11523},[66,37177,37178],{"class":758},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[66,37180,37181,37183,37185,37187,37189],{"class":68,"line":11548},[66,37182,3373],{"class":72},[66,37184,33014],{"class":102},[66,37186,531],{"class":72},[66,37188,33019],{"class":356},[66,37190,126],{"class":76},[66,37192,37193,37195,37197,37199,37201,37203,37205,37207,37209],{"class":68,"line":11571},[66,37194,33031],{"class":76},[66,37196,99],{"class":72},[66,37198,32247],{"class":76},[66,37200,33038],{"class":356},[66,37202,3534],{"class":72},[66,37204,33043],{"class":76},[66,37206,1292],{"class":72},[66,37208,32272],{"class":356},[66,37210,313],{"class":76},[66,37212,37213],{"class":68,"line":11595},[66,37214,37215],{"class":758},"    # 模型实例化，然后将实例化的模型放到设备中\n",[66,37217,37218,37220,37222],{"class":68,"line":11600},[66,37219,33083],{"class":76},[66,37221,99],{"class":72},[66,37223,37224],{"class":76},"AlexNet().to(device)\n",[66,37226,37227,37229,37231,37233,37235,37238,37240,37242],{"class":68,"line":11605},[66,37228,132],{"class":102},[66,37230,33095],{"class":76},[66,37232,304],{"class":102},[66,37234,2362],{"class":76},[66,37236,37237],{"class":102},"227",[66,37239,2362],{"class":76},[66,37241,37237],{"class":102},[66,37243,33108],{"class":76},[31,37245,37246],{"start":80},[34,37247,33121],{},[57,37249,37251],{"className":59,"code":37250,"language":61,"meta":62,"style":62},"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",[23,37252,37253,37259,37265,37275,37281,37291,37301,37311,37321,37331,37335,37346,37356,37360,37364,37368,37376,37388,37398,37414,37424,37456,37470,37480,37490,37494,37504,37518,37528,37538,37548,37554,37558,37562,37566,37570,37574,37582,37602,37606,37610,37614,37618,37622,37638,37642,37646,37654,37658,37662,37670,37674,37678,37682,37690,37694,37698,37702,37706,37714,37718,37726,37730,37738,37742,37750,37754,37762,37766,37770,37778,37782,37786,37790,37802,37826,37840,37844,37848,37852,37860,37864,37872,37876,37884,37888,37896,37900,37908,37912,37920,37924,37936,37940,37948,37952,37960,37964,37968,37972,37976,37984,37988,38004,38008,38016,38020,38024,38028,38032,38036,38040,38044,38060,38064,38076,38080,38092,38096,38108,38112,38120,38124,38132,38136,38140,38145,38151,38155,38164,38168,38185,38189,38198,38202,38220,38233,38238,38251,38255,38259,38267,38271,38275,38283,38287,38295,38299,38307,38311,38315,38357,38399,38403,38407,38423,38427,38443,38447,38451,38459,38463,38467,38479,38517,38522,38527,38536,38540,38554,38564,38570,38576,38582,38588,38592,38596,38602,38606,38610,38618,38622,38640,38644,38648,38652,38668,38672,38676,38680,38684,38688,38708,38728,38732,38736,38740,38748,38756,38760,38776,38796,38816,38820,38824,38832,38840,38844,38848,38852,38864,38868,38878,38886,38903],{"__ignoreMap":62},[66,37254,37255,37257],{"class":68,"line":69},[66,37256,284],{"class":72},[66,37258,33614],{"class":76},[66,37260,37261,37263],{"class":68,"line":80},[66,37262,284],{"class":72},[66,37264,33621],{"class":76},[66,37266,37267,37269,37271,37273],{"class":68,"line":112},[66,37268,284],{"class":72},[66,37270,33632],{"class":76},[66,37272,33176],{"class":72},[66,37274,33637],{"class":76},[66,37276,37277,37279],{"class":68,"line":129},[66,37278,284],{"class":72},[66,37280,32192],{"class":76},[66,37282,37283,37285,37287,37289],{"class":68,"line":138},[66,37284,32532],{"class":72},[66,37286,33208],{"class":76},[66,37288,284],{"class":72},[66,37290,33654],{"class":76},[66,37292,37293,37295,37297,37299],{"class":68,"line":227},[66,37294,32532],{"class":72},[66,37296,33161],{"class":76},[66,37298,284],{"class":72},[66,37300,33166],{"class":76},[66,37302,37303,37305,37307,37309],{"class":68,"line":236},[66,37304,32532],{"class":72},[66,37306,33191],{"class":76},[66,37308,284],{"class":72},[66,37310,33196],{"class":76},[66,37312,37313,37315,37317,37319],{"class":68,"line":241},[66,37314,284],{"class":72},[66,37316,33208],{"class":76},[66,37318,33176],{"class":72},[66,37320,33213],{"class":76},[66,37322,37323,37325,37327,37329],{"class":68,"line":372},[66,37324,284],{"class":72},[66,37326,33225],{"class":76},[66,37328,33176],{"class":72},[66,37330,33230],{"class":76},[66,37332,37333],{"class":68,"line":377},[66,37334,33699],{"class":758},[66,37336,37337,37339,37341,37343],{"class":68,"line":392},[66,37338,32532],{"class":72},[66,37340,33706],{"class":76},[66,37342,284],{"class":72},[66,37344,37345],{"class":76}," AlexNet\n",[66,37347,37348,37350,37352,37354],{"class":68,"line":405},[66,37349,32532],{"class":72},[66,37351,32535],{"class":76},[66,37353,284],{"class":72},[66,37355,32540],{"class":76},[66,37357,37358],{"class":68,"line":418},[66,37359,109],{"emptyLinePlaceholder":108},[66,37361,37362],{"class":68,"line":430},[66,37363,109],{"emptyLinePlaceholder":108},[66,37365,37366],{"class":68,"line":438},[66,37367,33734],{"class":758},[66,37369,37370,37372,37374],{"class":68,"line":465},[66,37371,33739],{"class":72},[66,37373,33742],{"class":3793},[66,37375,33745],{"class":76},[66,37377,37378,37380,37382,37384,37386],{"class":68,"line":1805},[66,37379,33750],{"class":76},[66,37381,99],{"class":72},[66,37383,33248],{"class":76},[66,37385,33256],{"class":356},[66,37387,33259],{"class":76},[66,37389,37390,37392,37394,37396],{"class":68,"line":1817},[66,37391,33763],{"class":1234},[66,37393,99],{"class":72},[66,37395,33269],{"class":102},[66,37397,33259],{"class":76},[66,37399,37400,37402,37404,37406,37408,37410,37412],{"class":68,"line":1822},[66,37401,33774],{"class":1234},[66,37403,99],{"class":72},[66,37405,33286],{"class":76},[66,37407,33289],{"class":1234},[66,37409,99],{"class":72},[66,37411,37237],{"class":102},[66,37413,33297],{"class":76},[66,37415,37416,37418,37420,37422],{"class":68,"line":1829},[66,37417,33791],{"class":1234},[66,37419,99],{"class":72},[66,37421,33269],{"class":102},[66,37423,313],{"class":76},[66,37425,37426,37428,37430,37432,37434,37436,37438,37440,37442,37444,37446,37448,37450,37452,37454],{"class":68,"line":3529},[66,37427,33802],{"class":76},[66,37429,99],{"class":72},[66,37431,33807],{"class":76},[66,37433,33810],{"class":102},[66,37435,348],{"class":76},[66,37437,33815],{"class":102},[66,37439,1208],{"class":72},[66,37441,9169],{"class":102},[66,37443,33822],{"class":76},[66,37445,33810],{"class":102},[66,37447,348],{"class":76},[66,37449,33829],{"class":102},[66,37451,1208],{"class":72},[66,37453,9169],{"class":102},[66,37455,33836],{"class":76},[66,37457,37458,37460,37462,37464,37466,37468],{"class":68,"line":3557},[66,37459,33841],{"class":76},[66,37461,99],{"class":72},[66,37463,33846],{"class":76},[66,37465,33330],{"class":1234},[66,37467,99],{"class":72},[66,37469,33335],{"class":76},[66,37471,37472,37474,37476,37478],{"class":68,"line":3562},[66,37473,33857],{"class":1234},[66,37475,99],{"class":72},[66,37477,33862],{"class":102},[66,37479,33259],{"class":76},[66,37481,37482,37484,37486,37488],{"class":68,"line":3579},[66,37483,33869],{"class":1234},[66,37485,99],{"class":72},[66,37487,33269],{"class":102},[66,37489,33259],{"class":76},[66,37491,37492],{"class":68,"line":3584},[66,37493,33880],{"class":758},[66,37495,37496,37498,37500,37502],{"class":68,"line":3589},[66,37497,33885],{"class":1234},[66,37499,99],{"class":72},[66,37501,2379],{"class":102},[66,37503,313],{"class":76},[66,37505,37506,37508,37510,37512,37514,37516],{"class":68,"line":3594},[66,37507,33896],{"class":76},[66,37509,99],{"class":72},[66,37511,33327],{"class":76},[66,37513,33330],{"class":1234},[66,37515,99],{"class":72},[66,37517,33907],{"class":76},[66,37519,37520,37522,37524,37526],{"class":68,"line":3608},[66,37521,33912],{"class":1234},[66,37523,99],{"class":72},[66,37525,33862],{"class":102},[66,37527,33259],{"class":76},[66,37529,37530,37532,37534,37536],{"class":68,"line":3613},[66,37531,33923],{"class":1234},[66,37533,99],{"class":72},[66,37535,33269],{"class":102},[66,37537,33259],{"class":76},[66,37539,37540,37542,37544,37546],{"class":68,"line":4401},[66,37541,33934],{"class":1234},[66,37543,99],{"class":72},[66,37545,2379],{"class":102},[66,37547,313],{"class":76},[66,37549,37550,37552],{"class":68,"line":4415},[66,37551,5907],{"class":72},[66,37553,33947],{"class":76},[66,37555,37556],{"class":68,"line":4423},[66,37557,109],{"emptyLinePlaceholder":108},[66,37559,37560],{"class":68,"line":4428},[66,37561,33956],{"class":758},[66,37563,37564],{"class":68,"line":4434},[66,37565,33961],{"class":758},[66,37567,37568],{"class":68,"line":4440},[66,37569,109],{"emptyLinePlaceholder":108},[66,37571,37572],{"class":68,"line":4445},[66,37573,33970],{"class":758},[66,37575,37576,37578,37580],{"class":68,"line":9759},[66,37577,33739],{"class":72},[66,37579,33977],{"class":3793},[66,37581,33980],{"class":76},[66,37583,37584,37586,37588,37590,37592,37594,37596,37598,37600],{"class":68,"line":9783},[66,37585,33031],{"class":76},[66,37587,99],{"class":72},[66,37589,32247],{"class":76},[66,37591,33038],{"class":356},[66,37593,3534],{"class":72},[66,37595,33043],{"class":76},[66,37597,1292],{"class":72},[66,37599,33999],{"class":356},[66,37601,313],{"class":76},[66,37603,37604],{"class":68,"line":9788},[66,37605,109],{"emptyLinePlaceholder":108},[66,37607,37608],{"class":68,"line":9794},[66,37609,109],{"emptyLinePlaceholder":108},[66,37611,37612],{"class":68,"line":9821},[66,37613,34014],{"class":758},[66,37615,37616],{"class":68,"line":9826},[66,37617,34019],{"class":758},[66,37619,37620],{"class":68,"line":9832},[66,37621,34024],{"class":758},[66,37623,37624,37626,37628,37630,37632,37634,37636],{"class":68,"line":9844},[66,37625,34029],{"class":76},[66,37627,99],{"class":72},[66,37629,34034],{"class":76},[66,37631,34037],{"class":1234},[66,37633,99],{"class":72},[66,37635,34042],{"class":102},[66,37637,313],{"class":76},[66,37639,37640],{"class":68,"line":9856},[66,37641,109],{"emptyLinePlaceholder":108},[66,37643,37644],{"class":68,"line":9868},[66,37645,34053],{"class":758},[66,37647,37648,37650,37652],{"class":68,"line":11523},[66,37649,34058],{"class":76},[66,37651,99],{"class":72},[66,37653,34063],{"class":76},[66,37655,37656],{"class":68,"line":11548},[66,37657,109],{"emptyLinePlaceholder":108},[66,37659,37660],{"class":68,"line":11571},[66,37661,34072],{"class":758},[66,37663,37664,37666,37668],{"class":68,"line":11595},[66,37665,33083],{"class":76},[66,37667,99],{"class":72},[66,37669,34081],{"class":76},[66,37671,37672],{"class":68,"line":11600},[66,37673,34086],{"class":758},[66,37675,37676],{"class":68,"line":11605},[66,37677,34091],{"class":758},[66,37679,37680],{"class":68,"line":11610},[66,37681,34096],{"class":758},[66,37683,37684,37686,37688],{"class":68,"line":11619},[66,37685,34101],{"class":76},[66,37687,99],{"class":72},[66,37689,34106],{"class":76},[66,37691,37692],{"class":68,"line":11624},[66,37693,109],{"emptyLinePlaceholder":108},[66,37695,37696],{"class":68,"line":11630},[66,37697,109],{"emptyLinePlaceholder":108},[66,37699,37700],{"class":68,"line":11651},[66,37701,34119],{"class":758},[66,37703,37704],{"class":68,"line":11657},[66,37705,34124],{"class":758},[66,37707,37708,37710,37712],{"class":68,"line":11671},[66,37709,34129],{"class":76},[66,37711,99],{"class":72},[66,37713,34134],{"class":102},[66,37715,37716],{"class":68,"line":11677},[66,37717,34139],{"class":758},[66,37719,37720,37722,37724],{"class":68,"line":11704},[66,37721,34144],{"class":76},[66,37723,99],{"class":72},[66,37725,34149],{"class":76},[66,37727,37728],{"class":68,"line":11713},[66,37729,34154],{"class":758},[66,37731,37732,37734,37736],{"class":68,"line":11719},[66,37733,34159],{"class":76},[66,37735,99],{"class":72},[66,37737,34149],{"class":76},[66,37739,37740],{"class":68,"line":11727},[66,37741,34168],{"class":758},[66,37743,37744,37746,37748],{"class":68,"line":11732},[66,37745,34173],{"class":76},[66,37747,99],{"class":72},[66,37749,34149],{"class":76},[66,37751,37752],{"class":68,"line":18407},[66,37753,34182],{"class":758},[66,37755,37756,37758,37760],{"class":68,"line":18413},[66,37757,34187],{"class":76},[66,37759,99],{"class":72},[66,37761,34149],{"class":76},[66,37763,37764],{"class":68,"line":18436},[66,37765,109],{"emptyLinePlaceholder":108},[66,37767,37768],{"class":68,"line":18442},[66,37769,34200],{"class":758},[66,37771,37772,37774,37776],{"class":68,"line":18465},[66,37773,34205],{"class":76},[66,37775,99],{"class":72},[66,37777,34210],{"class":76},[66,37779,37780],{"class":68,"line":18479},[66,37781,109],{"emptyLinePlaceholder":108},[66,37783,37784],{"class":68,"line":18499},[66,37785,109],{"emptyLinePlaceholder":108},[66,37787,37788],{"class":68,"line":18505},[66,37789,34223],{"class":758},[66,37791,37792,37794,37796,37798,37800],{"class":68,"line":18516},[66,37793,1083],{"class":72},[66,37795,34230],{"class":76},[66,37797,507],{"class":72},[66,37799,510],{"class":102},[66,37801,34237],{"class":76},[66,37803,37804,37806,37808,37810,37812,37814,37816,37818,37820,37822,37824],{"class":68,"line":18539},[66,37805,395],{"class":102},[66,37807,348],{"class":76},[66,37809,34246],{"class":356},[66,37811,34249],{"class":102},[66,37813,2563],{"class":356},[66,37815,34249],{"class":102},[66,37817,1130],{"class":356},[66,37819,34258],{"class":76},[66,37821,2511],{"class":72},[66,37823,304],{"class":102},[66,37825,360],{"class":76},[66,37827,37828,37830,37832,37834,37836,37838],{"class":68,"line":18561},[66,37829,395],{"class":102},[66,37831,348],{"class":76},[66,37833,34273],{"class":356},[66,37835,1208],{"class":72},[66,37837,790],{"class":102},[66,37839,313],{"class":76},[66,37841,37842],{"class":68,"line":18566},[66,37843,109],{"emptyLinePlaceholder":108},[66,37845,37846],{"class":68,"line":18572},[66,37847,34288],{"class":758},[66,37849,37850],{"class":68,"line":18586},[66,37851,34293],{"class":758},[66,37853,37854,37856,37858],{"class":68,"line":18599},[66,37855,34298],{"class":76},[66,37857,99],{"class":72},[66,37859,34134],{"class":102},[66,37861,37862],{"class":68,"line":18604},[66,37863,34307],{"class":758},[66,37865,37866,37868,37870],{"class":68,"line":18618},[66,37867,34312],{"class":76},[66,37869,99],{"class":72},[66,37871,4906],{"class":102},[66,37873,37874],{"class":68,"line":18623},[66,37875,34321],{"class":758},[66,37877,37878,37880,37882],{"class":68,"line":18629},[66,37879,34326],{"class":76},[66,37881,99],{"class":72},[66,37883,34134],{"class":102},[66,37885,37886],{"class":68,"line":18634},[66,37887,34335],{"class":758},[66,37889,37890,37892,37894],{"class":68,"line":18648},[66,37891,34340],{"class":76},[66,37893,99],{"class":72},[66,37895,4906],{"class":102},[66,37897,37898],{"class":68,"line":18653},[66,37899,34349],{"class":758},[66,37901,37902,37904,37906],{"class":68,"line":18658},[66,37903,34354],{"class":76},[66,37905,99],{"class":72},[66,37907,4906],{"class":102},[66,37909,37910],{"class":68,"line":18672},[66,37911,34363],{"class":758},[66,37913,37914,37916,37918],{"class":68,"line":18684},[66,37915,34368],{"class":76},[66,37917,99],{"class":72},[66,37919,4906],{"class":102},[66,37921,37922],{"class":68,"line":18689},[66,37923,34377],{"class":758},[66,37925,37926,37928,37930,37932,37934],{"class":68,"line":18702},[66,37927,5222],{"class":72},[66,37929,33394],{"class":76},[66,37931,507],{"class":72},[66,37933,33399],{"class":102},[66,37935,34390],{"class":76},[66,37937,37938],{"class":68,"line":18707},[66,37939,34395],{"class":758},[66,37941,37942,37944,37946],{"class":68,"line":18712},[66,37943,34400],{"class":76},[66,37945,99],{"class":72},[66,37947,34405],{"class":76},[66,37949,37950],{"class":68,"line":18717},[66,37951,34410],{"class":758},[66,37953,37954,37956,37958],{"class":68,"line":18730},[66,37955,34415],{"class":76},[66,37957,99],{"class":72},[66,37959,34420],{"class":76},[66,37961,37962],{"class":68,"line":18735},[66,37963,34426],{"class":758},[66,37965,37966],{"class":68,"line":34423},[66,37967,34432],{"class":76},[66,37969,37970],{"class":68,"line":34429},[66,37971,34438],{"class":758},[66,37973,37974],{"class":68,"line":34435},[66,37975,34444],{"class":758},[66,37977,37978,37980,37982],{"class":68,"line":34441},[66,37979,34450],{"class":76},[66,37981,99],{"class":72},[66,37983,34455],{"class":76},[66,37985,37986],{"class":68,"line":34447},[66,37987,34461],{"class":758},[66,37989,37990,37992,37994,37996,37998,38000,38002],{"class":68,"line":34458},[66,37991,34467],{"class":76},[66,37993,99],{"class":72},[66,37995,34472],{"class":76},[66,37997,34475],{"class":1234},[66,37999,99],{"class":72},[66,38001,304],{"class":102},[66,38003,313],{"class":76},[66,38005,38006],{"class":68,"line":34464},[66,38007,34487],{"class":758},[66,38009,38010,38012,38014],{"class":68,"line":34484},[66,38011,34493],{"class":76},[66,38013,99],{"class":72},[66,38015,34498],{"class":76},[66,38017,38018],{"class":68,"line":34490},[66,38019,34504],{"class":758},[66,38021,38022],{"class":68,"line":34501},[66,38023,34510],{"class":76},[66,38025,38026],{"class":68,"line":34507},[66,38027,34516],{"class":758},[66,38029,38030],{"class":68,"line":34513},[66,38031,34522],{"class":76},[66,38033,38034],{"class":68,"line":34519},[66,38035,34528],{"class":758},[66,38037,38038],{"class":68,"line":34525},[66,38039,34534],{"class":76},[66,38041,38042],{"class":68,"line":34531},[66,38043,34540],{"class":758},[66,38045,38046,38048,38050,38052,38054,38056,38058],{"class":68,"line":34537},[66,38047,34546],{"class":76},[66,38049,144],{"class":72},[66,38051,34551],{"class":76},[66,38053,1208],{"class":72},[66,38055,34556],{"class":76},[66,38057,2183],{"class":102},[66,38059,313],{"class":76},[66,38061,38062],{"class":68,"line":34543},[66,38063,34566],{"class":758},[66,38065,38066,38068,38070,38072,38074],{"class":68,"line":34563},[66,38067,34572],{"class":76},[66,38069,144],{"class":72},[66,38071,34577],{"class":76},[66,38073,531],{"class":72},[66,38075,34582],{"class":76},[66,38077,38078],{"class":68,"line":34569},[66,38079,34588],{"class":758},[66,38081,38082,38084,38086,38088,38090],{"class":68,"line":34585},[66,38083,34594],{"class":76},[66,38085,144],{"class":72},[66,38087,34556],{"class":76},[66,38089,2183],{"class":102},[66,38091,313],{"class":76},[66,38093,38094],{"class":68,"line":34591},[66,38095,34608],{"class":758},[66,38097,38098,38100,38102,38104,38106],{"class":68,"line":34605},[66,38099,5222],{"class":72},[66,38101,34616],{"class":76},[66,38103,507],{"class":72},[66,38105,33399],{"class":102},[66,38107,34623],{"class":76},[66,38109,38110],{"class":68,"line":34611},[66,38111,34629],{"class":758},[66,38113,38114,38116,38118],{"class":68,"line":34626},[66,38115,34400],{"class":76},[66,38117,99],{"class":72},[66,38119,34405],{"class":76},[66,38121,38122],{"class":68,"line":34632},[66,38123,34644],{"class":758},[66,38125,38126,38128,38130],{"class":68,"line":34641},[66,38127,34415],{"class":76},[66,38129,99],{"class":72},[66,38131,34420],{"class":76},[66,38133,38134],{"class":68,"line":34647},[66,38135,34659],{"class":758},[66,38137,38138],{"class":68,"line":34656},[66,38139,34665],{"class":76},[66,38141,38142],{"class":68,"line":34662},[66,38143,38144],{"class":758},"            # 验证时不计算梯度以节省内存\u002F计算\n",[66,38146,38147,38149],{"class":68,"line":34668},[66,38148,34671],{"class":72},[66,38150,34674],{"class":76},[66,38152,38153],{"class":68,"line":34677},[66,38154,34680],{"class":758},[66,38156,38157,38160,38162],{"class":68,"line":34683},[66,38158,38159],{"class":76},"                output",[66,38161,99],{"class":72},[66,38163,34455],{"class":76},[66,38165,38166],{"class":68,"line":34694},[66,38167,34697],{"class":758},[66,38169,38170,38173,38175,38177,38179,38181,38183],{"class":68,"line":34700},[66,38171,38172],{"class":76},"                pre_lab",[66,38174,99],{"class":72},[66,38176,34472],{"class":76},[66,38178,34475],{"class":1234},[66,38180,99],{"class":72},[66,38182,304],{"class":102},[66,38184,313],{"class":76},[66,38186,38187],{"class":68,"line":34719},[66,38188,34722],{"class":758},[66,38190,38191,38194,38196],{"class":68,"line":34725},[66,38192,38193],{"class":76},"                val_batch_loss",[66,38195,99],{"class":72},[66,38197,34498],{"class":76},[66,38199,38200],{"class":68,"line":34736},[66,38201,34739],{"class":758},[66,38203,38204,38207,38209,38212,38214,38216,38218],{"class":68,"line":34742},[66,38205,38206],{"class":76},"                val_loss",[66,38208,144],{"class":72},[66,38210,38211],{"class":76},"val_batch_loss.item()",[66,38213,1208],{"class":72},[66,38215,34556],{"class":76},[66,38217,2183],{"class":102},[66,38219,313],{"class":76},[66,38221,38222,38225,38227,38229,38231],{"class":68,"line":34762},[66,38223,38224],{"class":76},"                val_corrects",[66,38226,144],{"class":72},[66,38228,34577],{"class":76},[66,38230,531],{"class":72},[66,38232,34582],{"class":76},[66,38234,38235],{"class":68,"line":34778},[66,38236,38237],{"class":758},"            # 当前用于验证的样本数量\n",[66,38239,38240,38243,38245,38247,38249],{"class":68,"line":34784},[66,38241,38242],{"class":76},"            val_num",[66,38244,144],{"class":72},[66,38246,34556],{"class":76},[66,38248,2183],{"class":102},[66,38250,313],{"class":76},[66,38252,38253],{"class":68,"line":34798},[66,38254,34801],{"class":758},[66,38256,38257],{"class":68,"line":34804},[66,38258,34807],{"class":758},[66,38260,38261,38263,38265],{"class":68,"line":34810},[66,38262,34813],{"class":76},[66,38264,2563],{"class":72},[66,38266,34818],{"class":76},[66,38268,38269],{"class":68,"line":34821},[66,38270,34824],{"class":758},[66,38272,38273],{"class":68,"line":34827},[66,38274,34830],{"class":758},[66,38276,38277,38279,38281],{"class":68,"line":34833},[66,38278,34836],{"class":76},[66,38280,2563],{"class":72},[66,38282,34818],{"class":76},[66,38284,38285],{"class":68,"line":34843},[66,38286,34846],{"class":758},[66,38288,38289,38291,38293],{"class":68,"line":34849},[66,38290,34852],{"class":76},[66,38292,2563],{"class":72},[66,38294,34857],{"class":76},[66,38296,38297],{"class":68,"line":34860},[66,38298,34863],{"class":758},[66,38300,38301,38303,38305],{"class":68,"line":34866},[66,38302,34869],{"class":76},[66,38304,2563],{"class":72},[66,38306,34857],{"class":76},[66,38308,38309],{"class":68,"line":34876},[66,38310,109],{"emptyLinePlaceholder":108},[66,38312,38313],{"class":68,"line":34881},[66,38314,34884],{"class":758},[66,38316,38317,38319,38321,38323,38325,38327,38329,38331,38333,38335,38337,38339,38341,38343,38345,38347,38349,38351,38353,38355],{"class":68,"line":34887},[66,38318,395],{"class":102},[66,38320,348],{"class":76},[66,38322,5410],{"class":356},[66,38324,34249],{"class":102},[66,38326,34898],{"class":356},[66,38328,451],{"class":102},[66,38330,34903],{"class":72},[66,38332,457],{"class":102},[66,38334,34908],{"class":356},[66,38336,451],{"class":102},[66,38338,34903],{"class":72},[66,38340,457],{"class":102},[66,38342,5410],{"class":356},[66,38344,34919],{"class":76},[66,38346,2511],{"class":72},[66,38348,304],{"class":102},[66,38350,34926],{"class":76},[66,38352,2511],{"class":72},[66,38354,304],{"class":102},[66,38356,34933],{"class":76},[66,38358,38359,38361,38363,38365,38367,38369,38371,38373,38375,38377,38379,38381,38383,38385,38387,38389,38391,38393,38395,38397],{"class":68,"line":34936},[66,38360,395],{"class":102},[66,38362,348],{"class":76},[66,38364,5410],{"class":356},[66,38366,34249],{"class":102},[66,38368,34947],{"class":356},[66,38370,451],{"class":102},[66,38372,34903],{"class":72},[66,38374,457],{"class":102},[66,38376,34956],{"class":356},[66,38378,451],{"class":102},[66,38380,34903],{"class":72},[66,38382,457],{"class":102},[66,38384,5410],{"class":356},[66,38386,34967],{"class":76},[66,38388,2511],{"class":72},[66,38390,304],{"class":102},[66,38392,34974],{"class":76},[66,38394,2511],{"class":72},[66,38396,304],{"class":102},[66,38398,34933],{"class":76},[66,38400,38401],{"class":68,"line":34983},[66,38402,109],{"emptyLinePlaceholder":108},[66,38404,38405],{"class":68,"line":34988},[66,38406,34991],{"class":758},[66,38408,38409,38411,38413,38415,38417,38419,38421],{"class":68,"line":34994},[66,38410,4321],{"class":72},[66,38412,34999],{"class":76},[66,38414,2511],{"class":72},[66,38416,304],{"class":102},[66,38418,2917],{"class":76},[66,38420,386],{"class":72},[66,38422,35010],{"class":76},[66,38424,38425],{"class":68,"line":35013},[66,38426,35016],{"class":758},[66,38428,38429,38431,38433,38435,38437,38439,38441],{"class":68,"line":35019},[66,38430,35022],{"class":76},[66,38432,2038],{"class":102},[66,38434,99],{"class":72},[66,38436,35029],{"class":76},[66,38438,2511],{"class":72},[66,38440,304],{"class":102},[66,38442,704],{"class":76},[66,38444,38445],{"class":68,"line":35038},[66,38446,35041],{"class":758},[66,38448,38449],{"class":68,"line":35044},[66,38450,35047],{"class":758},[66,38452,38453,38455,38457],{"class":68,"line":35050},[66,38454,35053],{"class":76},[66,38456,99],{"class":72},[66,38458,34106],{"class":76},[66,38460,38461],{"class":68,"line":35060},[66,38462,109],{"emptyLinePlaceholder":108},[66,38464,38465],{"class":68,"line":35065},[66,38466,35068],{"class":758},[66,38468,38469,38471,38473,38475,38477],{"class":68,"line":35071},[66,38470,35074],{"class":76},[66,38472,99],{"class":72},[66,38474,35079],{"class":76},[66,38476,2511],{"class":72},[66,38478,35084],{"class":76},[66,38480,38481,38483,38485,38487,38489,38491,38493,38495,38497,38499,38501,38503,38505,38507,38509,38511,38513,38515],{"class":68,"line":35087},[66,38482,395],{"class":102},[66,38484,348],{"class":76},[66,38486,35094],{"class":356},[66,38488,451],{"class":102},[66,38490,35099],{"class":72},[66,38492,457],{"class":102},[66,38494,2523],{"class":356},[66,38496,451],{"class":102},[66,38498,35099],{"class":72},[66,38500,457],{"class":102},[66,38502,35112],{"class":356},[66,38504,35115],{"class":76},[66,38506,35118],{"class":72},[66,38508,2885],{"class":102},[66,38510,35123],{"class":76},[66,38512,953],{"class":72},[66,38514,2885],{"class":102},[66,38516,360],{"class":76},[66,38518,38519],{"class":68,"line":35132},[66,38520,38521],{"class":758},"    # 选择最优参数并保存\n",[66,38523,38524],{"class":68,"line":35138},[66,38525,38526],{"class":758},"    # 保存最佳模型权重字典\n",[66,38528,38529,38532,38534],{"class":68,"line":35144},[66,38530,38531],{"class":76},"    torch.save(best_model_wts,",[66,38533,35156],{"class":356},[66,38535,313],{"class":76},[66,38537,38538],{"class":68,"line":35150},[66,38539,35176],{"class":758},[66,38541,38542,38544,38546,38548,38550,38552],{"class":68,"line":35161},[66,38543,35182],{"class":76},[66,38545,99],{"class":72},[66,38547,35187],{"class":76},[66,38549,35190],{"class":1234},[66,38551,99],{"class":72},[66,38553,3388],{"class":76},[66,38555,38556,38558,38560,38562],{"class":68,"line":35167},[66,38557,35200],{"class":356},[66,38559,2838],{"class":76},[66,38561,747],{"class":102},[66,38563,35207],{"class":76},[66,38565,38566,38568],{"class":68,"line":35173},[66,38567,35213],{"class":356},[66,38569,35216],{"class":76},[66,38571,38572,38574],{"class":68,"line":35179},[66,38573,35222],{"class":356},[66,38575,35225],{"class":76},[66,38577,38578,38580],{"class":68,"line":35197},[66,38579,35231],{"class":356},[66,38581,35234],{"class":76},[66,38583,38584,38586],{"class":68,"line":35210},[66,38585,35240],{"class":356},[66,38587,35243],{"class":76},[66,38589,38590],{"class":68,"line":35219},[66,38591,35249],{"class":76},[66,38593,38594],{"class":68,"line":35228},[66,38595,35255],{"class":758},[66,38597,38598,38600],{"class":68,"line":35237},[66,38599,5907],{"class":72},[66,38601,35263],{"class":76},[66,38603,38604],{"class":68,"line":35246},[66,38605,109],{"emptyLinePlaceholder":108},[66,38607,38608],{"class":68,"line":35252},[66,38609,35274],{"class":758},[66,38611,38612,38614,38616],{"class":68,"line":35258},[66,38613,33739],{"class":72},[66,38615,35282],{"class":3793},[66,38617,35285],{"class":76},[66,38619,38620],{"class":68,"line":35266},[66,38621,35291],{"class":758},[66,38623,38624,38626,38628,38630,38632,38634,38636,38638],{"class":68,"line":35271},[66,38625,35297],{"class":76},[66,38627,33485],{"class":1234},[66,38629,99],{"class":72},[66,38631,348],{"class":76},[66,38633,2477],{"class":102},[66,38635,2362],{"class":76},[66,38637,1076],{"class":102},[66,38639,360],{"class":76},[66,38641,38642],{"class":68,"line":35277},[66,38643,35317],{"class":758},[66,38645,38646],{"class":68,"line":35288},[66,38647,35323],{"class":758},[66,38649,38650],{"class":68,"line":35294},[66,38651,35329],{"class":758},[66,38653,38654,38656,38658,38660,38662,38664,38666],{"class":68,"line":35314},[66,38655,33519],{"class":76},[66,38657,304],{"class":102},[66,38659,2362],{"class":76},[66,38661,795],{"class":102},[66,38663,2362],{"class":76},[66,38665,304],{"class":102},[66,38667,313],{"class":76},[66,38669,38670],{"class":68,"line":35320},[66,38671,35352],{"class":758},[66,38673,38674],{"class":68,"line":35326},[66,38675,35358],{"class":758},[66,38677,38678],{"class":68,"line":35332},[66,38679,35364],{"class":758},[66,38681,38682],{"class":68,"line":35349},[66,38683,35370],{"class":758},[66,38685,38686],{"class":68,"line":35355},[66,38687,35376],{"class":758},[66,38689,38690,38692,38694,38696,38698,38700,38702,38704,38706],{"class":68,"line":35361},[66,38691,35382],{"class":76},[66,38693,35385],{"class":356},[66,38695,35388],{"class":76},[66,38697,35391],{"class":356},[66,38699,2362],{"class":76},[66,38701,35396],{"class":1234},[66,38703,99],{"class":72},[66,38705,35401],{"class":356},[66,38707,313],{"class":76},[66,38709,38710,38712,38714,38716,38718,38720,38722,38724,38726],{"class":68,"line":35367},[66,38711,35382],{"class":76},[66,38713,35385],{"class":356},[66,38715,35413],{"class":76},[66,38717,35416],{"class":356},[66,38719,2362],{"class":76},[66,38721,35396],{"class":1234},[66,38723,99],{"class":72},[66,38725,35425],{"class":356},[66,38727,313],{"class":76},[66,38729,38730],{"class":68,"line":35373},[66,38731,35433],{"class":758},[66,38733,38734],{"class":68,"line":35379},[66,38735,35439],{"class":76},[66,38737,38738],{"class":68,"line":35406},[66,38739,35445],{"class":758},[66,38741,38742,38744,38746],{"class":68,"line":35430},[66,38743,35451],{"class":76},[66,38745,35454],{"class":356},[66,38747,313],{"class":76},[66,38749,38750,38752,38754],{"class":68,"line":35436},[66,38751,35462],{"class":76},[66,38753,35465],{"class":356},[66,38755,313],{"class":76},[66,38757,38758],{"class":68,"line":35442},[66,38759,35473],{"class":758},[66,38761,38762,38764,38766,38768,38770,38772,38774],{"class":68,"line":35448},[66,38763,33519],{"class":76},[66,38765,304],{"class":102},[66,38767,2362],{"class":76},[66,38769,795],{"class":102},[66,38771,2362],{"class":76},[66,38773,795],{"class":102},[66,38775,313],{"class":76},[66,38777,38778,38780,38782,38784,38786,38788,38790,38792,38794],{"class":68,"line":35459},[66,38779,35382],{"class":76},[66,38781,35385],{"class":356},[66,38783,35500],{"class":76},[66,38785,35391],{"class":356},[66,38787,2362],{"class":76},[66,38789,35396],{"class":1234},[66,38791,99],{"class":72},[66,38793,35511],{"class":356},[66,38795,313],{"class":76},[66,38797,38798,38800,38802,38804,38806,38808,38810,38812,38814],{"class":68,"line":35470},[66,38799,35382],{"class":76},[66,38801,35385],{"class":356},[66,38803,35523],{"class":76},[66,38805,35416],{"class":356},[66,38807,2362],{"class":76},[66,38809,35396],{"class":1234},[66,38811,99],{"class":72},[66,38813,35534],{"class":356},[66,38815,313],{"class":76},[66,38817,38818],{"class":68,"line":35476},[66,38819,35542],{"class":758},[66,38821,38822],{"class":68,"line":35493},[66,38823,35439],{"class":76},[66,38825,38826,38828,38830],{"class":68,"line":35516},[66,38827,35451],{"class":76},[66,38829,35385],{"class":356},[66,38831,313],{"class":76},[66,38833,38834,38836,38838],{"class":68,"line":35539},[66,38835,35462],{"class":76},[66,38837,35564],{"class":356},[66,38839,313],{"class":76},[66,38841,38842],{"class":68,"line":35545},[66,38843,35572],{"class":76},[66,38845,38846],{"class":68,"line":35550},[66,38847,109],{"emptyLinePlaceholder":108},[66,38849,38850],{"class":68,"line":35559},[66,38851,35583],{"class":758},[66,38853,38854,38856,38858,38860,38862],{"class":68,"line":35569},[66,38855,3373],{"class":72},[66,38857,33014],{"class":102},[66,38859,531],{"class":72},[66,38861,33019],{"class":356},[66,38863,126],{"class":76},[66,38865,38866],{"class":68,"line":35575},[66,38867,35602],{"class":758},[66,38869,38870,38873,38875],{"class":68,"line":35580},[66,38871,38872],{"class":76},"    AlexNet",[66,38874,99],{"class":72},[66,38876,38877],{"class":76},"AlexNet()\n",[66,38879,38880,38882,38884],{"class":68,"line":35586},[66,38881,35619],{"class":76},[66,38883,99],{"class":72},[66,38885,35624],{"class":76},[66,38887,38888,38890,38892,38895,38897,38899,38901],{"class":68,"line":35599},[66,38889,35182],{"class":76},[66,38891,99],{"class":72},[66,38893,38894],{"class":76},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[66,38896,35637],{"class":1234},[66,38898,99],{"class":72},[66,38900,2679],{"class":102},[66,38902,313],{"class":76},[66,38904,38905],{"class":68,"line":35605},[66,38906,35649],{"class":76},[31,38908,38909],{"start":112},[34,38910,35662],{},[57,38912,38914],{"className":59,"code":38913,"language":61,"meta":62,"style":62},"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",[23,38915,38916,38922,38932,38942,38952,38956,38966,38976,38987,38991,38995,38999,39007,39023,39033,39049,39059,39073,39077,39087,39097,39107,39113,39117,39121,39129,39133,39149,39157,39161,39165,39173,39181,39185,39189,39193,39197,39203,39207,39217,39225,39233,39237,39241,39245,39253,39257,39273,39277,39281,39285,39297,39301,39313,39317,39321,39333,39337,39347,39351,39355,39367,39371,39379,39383,39387,39395,39399,39407,39411,39415,39419,39423,39427,39443,39451,39455,39459,39507,39513,39517,39527,39535,39543,39547,39551,39555,39559,39567,39571,39587,39591,39599,39607],{"__ignoreMap":62},[66,38917,38918,38920],{"class":68,"line":69},[66,38919,284],{"class":72},[66,38921,32192],{"class":76},[66,38923,38924,38926,38928,38930],{"class":68,"line":80},[66,38925,284],{"class":72},[66,38927,33208],{"class":76},[66,38929,33176],{"class":72},[66,38931,33213],{"class":76},[66,38933,38934,38936,38938,38940],{"class":68,"line":112},[66,38935,32532],{"class":72},[66,38937,35690],{"class":76},[66,38939,284],{"class":72},[66,38941,35695],{"class":76},[66,38943,38944,38946,38948,38950],{"class":68,"line":129},[66,38945,32532],{"class":72},[66,38947,33191],{"class":76},[66,38949,284],{"class":72},[66,38951,33196],{"class":76},[66,38953,38954],{"class":68,"line":138},[66,38955,35710],{"class":758},[66,38957,38958,38960,38962,38964],{"class":68,"line":227},[66,38959,32532],{"class":72},[66,38961,33161],{"class":76},[66,38963,284],{"class":72},[66,38965,33166],{"class":76},[66,38967,38968,38970,38972,38974],{"class":68,"line":236},[66,38969,32532],{"class":72},[66,38971,33706],{"class":76},[66,38973,284],{"class":72},[66,38975,37345],{"class":76},[66,38977,38978,38980,38983,38985],{"class":68,"line":241},[66,38979,32532],{"class":72},[66,38981,38982],{"class":76}," 练习.AlexNet.model ",[66,38984,284],{"class":72},[66,38986,37345],{"class":76},[66,38988,38989],{"class":68,"line":372},[66,38990,109],{"emptyLinePlaceholder":108},[66,38992,38993],{"class":68,"line":377},[66,38994,109],{"emptyLinePlaceholder":108},[66,38996,38997],{"class":68,"line":392},[66,38998,35739],{"class":758},[66,39000,39001,39003,39005],{"class":68,"line":405},[66,39002,33739],{"class":72},[66,39004,35746],{"class":3793},[66,39006,33745],{"class":76},[66,39008,39009,39011,39013,39015,39017,39019,39021],{"class":68,"line":418},[66,39010,35753],{"class":76},[66,39012,99],{"class":72},[66,39014,33248],{"class":76},[66,39016,33251],{"class":1234},[66,39018,99],{"class":72},[66,39020,33256],{"class":356},[66,39022,33259],{"class":76},[66,39024,39025,39027,39029,39031],{"class":68,"line":430},[66,39026,35770],{"class":1234},[66,39028,99],{"class":72},[66,39030,35775],{"class":102},[66,39032,33259],{"class":76},[66,39034,39035,39037,39039,39041,39043,39045,39047],{"class":68,"line":438},[66,39036,35782],{"class":1234},[66,39038,99],{"class":72},[66,39040,33286],{"class":76},[66,39042,33289],{"class":1234},[66,39044,99],{"class":72},[66,39046,37237],{"class":102},[66,39048,33297],{"class":76},[66,39050,39051,39053,39055,39057],{"class":68,"line":465},[66,39052,35799],{"class":1234},[66,39054,99],{"class":72},[66,39056,33269],{"class":102},[66,39058,313],{"class":76},[66,39060,39061,39063,39065,39067,39069,39071],{"class":68,"line":1805},[66,39062,35810],{"class":76},[66,39064,99],{"class":72},[66,39066,33327],{"class":76},[66,39068,33330],{"class":1234},[66,39070,99],{"class":72},[66,39072,35821],{"class":76},[66,39074,39075],{"class":68,"line":1817},[66,39076,35826],{"class":758},[66,39078,39079,39081,39083,39085],{"class":68,"line":1822},[66,39080,35831],{"class":1234},[66,39082,99],{"class":72},[66,39084,304],{"class":102},[66,39086,33259],{"class":76},[66,39088,39089,39091,39093,39095],{"class":68,"line":1829},[66,39090,35842],{"class":1234},[66,39092,99],{"class":72},[66,39094,33269],{"class":102},[66,39096,33259],{"class":76},[66,39098,39099,39101,39103,39105],{"class":68,"line":3529},[66,39100,35853],{"class":1234},[66,39102,99],{"class":72},[66,39104,2183],{"class":102},[66,39106,313],{"class":76},[66,39108,39109,39111],{"class":68,"line":3557},[66,39110,5907],{"class":72},[66,39112,35866],{"class":76},[66,39114,39115],{"class":68,"line":3562},[66,39116,109],{"emptyLinePlaceholder":108},[66,39118,39119],{"class":68,"line":3579},[66,39120,35875],{"class":758},[66,39122,39123,39125,39127],{"class":68,"line":3584},[66,39124,33739],{"class":72},[66,39126,35882],{"class":3793},[66,39128,35885],{"class":76},[66,39130,39131],{"class":68,"line":3589},[66,39132,35890],{"class":758},[66,39134,39135,39137,39139,39141,39143,39145,39147],{"class":68,"line":3594},[66,39136,33031],{"class":76},[66,39138,99],{"class":72},[66,39140,33038],{"class":356},[66,39142,3534],{"class":72},[66,39144,33043],{"class":76},[66,39146,1292],{"class":72},[66,39148,35907],{"class":356},[66,39150,39151,39153,39155],{"class":68,"line":3608},[66,39152,33083],{"class":76},[66,39154,99],{"class":72},[66,39156,34081],{"class":76},[66,39158,39159],{"class":68,"line":3613},[66,39160,109],{"emptyLinePlaceholder":108},[66,39162,39163],{"class":68,"line":4401},[66,39164,35924],{"class":758},[66,39166,39167,39169,39171],{"class":68,"line":4415},[66,39168,35929],{"class":76},[66,39170,99],{"class":72},[66,39172,34134],{"class":102},[66,39174,39175,39177,39179],{"class":68,"line":4423},[66,39176,35938],{"class":76},[66,39178,99],{"class":72},[66,39180,4906],{"class":102},[66,39182,39183],{"class":68,"line":4428},[66,39184,109],{"emptyLinePlaceholder":108},[66,39186,39187],{"class":68,"line":4434},[66,39188,35951],{"class":758},[66,39190,39191],{"class":68,"line":4440},[66,39192,35956],{"class":758},[66,39194,39195],{"class":68,"line":4445},[66,39196,35961],{"class":758},[66,39198,39199,39201],{"class":68,"line":9759},[66,39200,35966],{"class":72},[66,39202,34674],{"class":76},[66,39204,39205],{"class":68,"line":9783},[66,39206,35973],{"class":758},[66,39208,39209,39211,39213,39215],{"class":68,"line":9788},[66,39210,5222],{"class":72},[66,39212,35980],{"class":76},[66,39214,507],{"class":72},[66,39216,35985],{"class":76},[66,39218,39219,39221,39223],{"class":68,"line":9794},[66,39220,35990],{"class":76},[66,39222,99],{"class":72},[66,39224,35995],{"class":76},[66,39226,39227,39229,39231],{"class":68,"line":9821},[66,39228,36000],{"class":76},[66,39230,99],{"class":72},[66,39232,36005],{"class":76},[66,39234,39235],{"class":68,"line":9826},[66,39236,36010],{"class":758},[66,39238,39239],{"class":68,"line":9832},[66,39240,34665],{"class":76},[66,39242,39243],{"class":68,"line":9844},[66,39244,36019],{"class":758},[66,39246,39247,39249,39251],{"class":68,"line":9856},[66,39248,34450],{"class":76},[66,39250,99],{"class":72},[66,39252,36028],{"class":76},[66,39254,39255],{"class":68,"line":9868},[66,39256,36033],{"class":758},[66,39258,39259,39261,39263,39265,39267,39269,39271],{"class":68,"line":11523},[66,39260,34467],{"class":76},[66,39262,99],{"class":72},[66,39264,34472],{"class":76},[66,39266,34475],{"class":1234},[66,39268,99],{"class":72},[66,39270,304],{"class":102},[66,39272,313],{"class":76},[66,39274,39275],{"class":68,"line":11548},[66,39276,36054],{"class":758},[66,39278,39279],{"class":68,"line":11571},[66,39280,36059],{"class":758},[66,39282,39283],{"class":68,"line":11595},[66,39284,36064],{"class":758},[66,39286,39287,39289,39291,39293,39295],{"class":68,"line":11600},[66,39288,36069],{"class":76},[66,39290,144],{"class":72},[66,39292,34577],{"class":76},[66,39294,531],{"class":72},[66,39296,36078],{"class":76},[66,39298,39299],{"class":68,"line":11605},[66,39300,36083],{"class":758},[66,39302,39303,39305,39307,39309,39311],{"class":68,"line":11610},[66,39304,36088],{"class":76},[66,39306,144],{"class":72},[66,39308,36093],{"class":76},[66,39310,2183],{"class":102},[66,39312,313],{"class":76},[66,39314,39315],{"class":68,"line":11619},[66,39316,109],{"emptyLinePlaceholder":108},[66,39318,39319],{"class":68,"line":11624},[66,39320,36106],{"class":758},[66,39322,39323,39325,39327,39329,39331],{"class":68,"line":11630},[66,39324,36111],{"class":76},[66,39326,99],{"class":72},[66,39328,36116],{"class":76},[66,39330,2563],{"class":72},[66,39332,36121],{"class":76},[66,39334,39335],{"class":68,"line":11651},[66,39336,36126],{"class":758},[66,39338,39339,39341,39343,39345],{"class":68,"line":11657},[66,39340,395],{"class":102},[66,39342,348],{"class":76},[66,39344,36135],{"class":356},[66,39346,36138],{"class":76},[66,39348,39349],{"class":68,"line":11671},[66,39350,109],{"emptyLinePlaceholder":108},[66,39352,39353],{"class":68,"line":11677},[66,39354,36147],{"class":758},[66,39356,39357,39359,39361,39363,39365],{"class":68,"line":11704},[66,39358,3373],{"class":72},[66,39360,33014],{"class":102},[66,39362,531],{"class":72},[66,39364,33019],{"class":356},[66,39366,126],{"class":76},[66,39368,39369],{"class":68,"line":11713},[66,39370,36164],{"class":758},[66,39372,39373,39375,39377],{"class":68,"line":11719},[66,39374,33083],{"class":76},[66,39376,99],{"class":72},[66,39378,38877],{"class":76},[66,39380,39381],{"class":68,"line":11727},[66,39382,36177],{"class":758},[66,39384,39385],{"class":68,"line":11732},[66,39386,36182],{"class":758},[66,39388,39389,39391,39393],{"class":68,"line":18407},[66,39390,36187],{"class":76},[66,39392,36190],{"class":356},[66,39394,360],{"class":76},[66,39396,39397],{"class":68,"line":18413},[66,39398,36197],{"class":758},[66,39400,39401,39403,39405],{"class":68,"line":18436},[66,39402,35810],{"class":76},[66,39404,99],{"class":72},[66,39406,36206],{"class":76},[66,39408,39409],{"class":68,"line":18442},[66,39410,36211],{"class":758},[66,39412,39413],{"class":68,"line":18465},[66,39414,36216],{"class":76},[66,39416,39417],{"class":68,"line":18479},[66,39418,109],{"emptyLinePlaceholder":108},[66,39420,39421],{"class":68,"line":18499},[66,39422,36225],{"class":758},[66,39424,39425],{"class":68,"line":18505},[66,39426,36230],{"class":758},[66,39428,39429,39431,39433,39435,39437,39439,39441],{"class":68,"line":18516},[66,39430,33031],{"class":76},[66,39432,99],{"class":72},[66,39434,33038],{"class":356},[66,39436,3534],{"class":72},[66,39438,33043],{"class":76},[66,39440,1292],{"class":72},[66,39442,35907],{"class":356},[66,39444,39445,39447,39449],{"class":68,"line":18539},[66,39446,33083],{"class":76},[66,39448,99],{"class":72},[66,39450,34081],{"class":76},[66,39452,39453],{"class":68,"line":18561},[66,39454,36259],{"class":758},[66,39456,39457],{"class":68,"line":18566},[66,39458,36264],{"class":758},[66,39460,39461,39463,39465,39467,39469,39471,39473,39475,39477,39479,39481,39483,39485,39487,39489,39491,39493,39495,39497,39499,39501,39503,39505],{"class":68,"line":18572},[66,39462,36269],{"class":76},[66,39464,99],{"class":72},[66,39466,2869],{"class":76},[66,39468,36276],{"class":356},[66,39470,2362],{"class":76},[66,39472,36281],{"class":356},[66,39474,2362],{"class":76},[66,39476,36286],{"class":356},[66,39478,2362],{"class":76},[66,39480,36291],{"class":356},[66,39482,2362],{"class":76},[66,39484,36296],{"class":356},[66,39486,2362],{"class":76},[66,39488,36301],{"class":356},[66,39490,2362],{"class":76},[66,39492,36306],{"class":356},[66,39494,2362],{"class":76},[66,39496,36311],{"class":356},[66,39498,2362],{"class":76},[66,39500,36316],{"class":356},[66,39502,2362],{"class":76},[66,39504,36321],{"class":356},[66,39506,704],{"class":76},[66,39508,39509,39511],{"class":68,"line":18586},[66,39510,35966],{"class":72},[66,39512,34674],{"class":76},[66,39514,39515],{"class":68,"line":18599},[66,39516,36334],{"class":758},[66,39518,39519,39521,39523,39525],{"class":68,"line":18604},[66,39520,5222],{"class":72},[66,39522,36341],{"class":76},[66,39524,507],{"class":72},[66,39526,35985],{"class":76},[66,39528,39529,39531,39533],{"class":68,"line":18618},[66,39530,34400],{"class":76},[66,39532,99],{"class":72},[66,39534,34405],{"class":76},[66,39536,39537,39539,39541],{"class":68,"line":18623},[66,39538,34415],{"class":76},[66,39540,99],{"class":72},[66,39542,34420],{"class":76},[66,39544,39545],{"class":68,"line":18629},[66,39546,109],{"emptyLinePlaceholder":108},[66,39548,39549],{"class":68,"line":18634},[66,39550,36370],{"class":758},[66,39552,39553],{"class":68,"line":18648},[66,39554,34665],{"class":76},[66,39556,39557],{"class":68,"line":18653},[66,39558,36379],{"class":758},[66,39560,39561,39563,39565],{"class":68,"line":18658},[66,39562,34450],{"class":76},[66,39564,99],{"class":72},[66,39566,34455],{"class":76},[66,39568,39569],{"class":68,"line":18672},[66,39570,36392],{"class":758},[66,39572,39573,39575,39577,39579,39581,39583,39585],{"class":68,"line":18684},[66,39574,34467],{"class":76},[66,39576,99],{"class":72},[66,39578,34472],{"class":76},[66,39580,34475],{"class":1234},[66,39582,99],{"class":72},[66,39584,304],{"class":102},[66,39586,313],{"class":76},[66,39588,39589],{"class":68,"line":18689},[66,39590,36413],{"class":758},[66,39592,39593,39595,39597],{"class":68,"line":18702},[66,39594,36418],{"class":76},[66,39596,99],{"class":72},[66,39598,36423],{"class":76},[66,39600,39601,39603,39605],{"class":68,"line":18707},[66,39602,36428],{"class":76},[66,39604,99],{"class":72},[66,39606,36433],{"class":76},[66,39608,39609,39611,39613,39615,39617,39619,39621,39623],{"class":68,"line":18712},[66,39610,36438],{"class":102},[66,39612,348],{"class":76},[66,39614,36443],{"class":356},[66,39616,36446],{"class":76},[66,39618,36449],{"class":356},[66,39620,2362],{"class":76},[66,39622,36454],{"class":356},[66,39624,36457],{"class":76},[484,39626,39628],{"id":39627},"_22vgg","2.2.VGG",[23801,39630,39632],{"id":39631},"_221原理","2.2.1.原理",[19,39634,39635],{},[3304,39636],{"alt":62,"src":39637},"\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,39639,39640],{},[3304,39641],{"alt":62,"src":39642},"\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,39644,39645],{},[3304,39646],{"alt":62,"src":39647},"\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,39649,39650],{},"参数详细描述：",[19,39652,39653],{},[3304,39654],{"alt":62,"src":39655},"\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,39657,39658],{},[3304,39659],{"alt":62,"src":39660},"\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,39662,39663],{},[3304,39664],{"alt":62,"src":39665},"\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,39667,39668],{},[3304,39669],{"alt":62,"src":39670},"\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,39672,39673],{},[3304,39674],{"alt":62,"src":39675},"\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",[23801,39677,39679],{"id":39678},"_222代码实现","2.2.2.代码实现",[31,39681,39682],{},[34,39683,39684],{},"网络搭建",[57,39686,39688],{"className":59,"code":39687,"language":61,"meta":62,"style":62},"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",[23,39689,39690,39696,39708,39718,39728,39732,39749,39757,39776,39781,39786,39798,39836,39841,39877,39881,39910,39915,39920,39931,39967,39971,40007,40011,40039,40043,40048,40059,40095,40099,40135,40139,40175,40179,40207,40211,40216,40227,40264,40268,40304,40308,40344,40348,40376,40380,40385,40396,40432,40436,40472,40476,40512,40516,40544,40548,40553,40564,40569,40574,40579,40600,40604,40616,40620,40632,40636,40640,40645,40650,40665,40670,40680,40685,40700,40705,40724,40729,40738,40743,40753,40758,40763,40777,40782,40796,40804,40808,40812,40820,40831,40842,40853,40864,40875,40886,40892,40896,40901,40914,40934,40940,40949],{"__ignoreMap":62},[66,39691,39692,39694],{"class":68,"line":69},[66,39693,284],{"class":72},[66,39695,32192],{"class":76},[66,39697,39698,39700,39703,39705],{"class":68,"line":80},[66,39699,32532],{"class":72},[66,39701,39702],{"class":76}," sympy.core.sympify ",[66,39704,284],{"class":72},[66,39706,39707],{"class":76}," kernS\n",[66,39709,39710,39712,39714,39716],{"class":68,"line":112},[66,39711,32532],{"class":72},[66,39713,32535],{"class":76},[66,39715,284],{"class":72},[66,39717,32540],{"class":76},[66,39719,39720,39722,39724,39726],{"class":68,"line":129},[66,39721,32532],{"class":72},[66,39723,32552],{"class":76},[66,39725,284],{"class":72},[66,39727,32557],{"class":76},[66,39729,39730],{"class":68,"line":138},[66,39731,109],{"emptyLinePlaceholder":108},[66,39733,39734,39736,39739,39741,39743,39745,39747],{"class":68,"line":227},[66,39735,16499],{"class":72},[66,39737,39738],{"class":3793}," VGG16",[66,39740,348],{"class":76},[66,39742,32573],{"class":3793},[66,39744,2537],{"class":76},[66,39746,32578],{"class":3793},[66,39748,522],{"class":76},[66,39750,39751,39753,39755],{"class":68,"line":236},[66,39752,32595],{"class":72},[66,39754,32598],{"class":102},[66,39756,32601],{"class":76},[66,39758,39759,39761,39763,39766,39768,39770,39772,39774],{"class":68,"line":241},[66,39760,32611],{"class":102},[66,39762,348],{"class":76},[66,39764,39765],{"class":102},"VGG16",[66,39767,307],{"class":76},[66,39769,32617],{"class":102},[66,39771,32620],{"class":76},[66,39773,32623],{"class":102},[66,39775,1253],{"class":76},[66,39777,39778],{"class":68,"line":372},[66,39779,39780],{"class":758},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[66,39782,39783],{"class":68,"line":377},[66,39784,39785],{"class":758},"        # 这里用的是灰度图\n",[66,39787,39788,39790,39793,39795],{"class":68,"line":392},[66,39789,32639],{"class":102},[66,39791,39792],{"class":76},".block1",[66,39794,99],{"class":72},[66,39796,39797],{"class":76},"nn.Sequential(\n",[66,39799,39800,39803,39805,39807,39809,39811,39813,39815,39817,39819,39821,39823,39825,39827,39829,39831,39833],{"class":68,"line":405},[66,39801,39802],{"class":76},"            nn.Conv2d(",[66,39804,32650],{"class":1234},[66,39806,99],{"class":72},[66,39808,304],{"class":102},[66,39810,2362],{"class":76},[66,39812,32659],{"class":1234},[66,39814,99],{"class":72},[66,39816,2195],{"class":102},[66,39818,2362],{"class":76},[66,39820,32668],{"class":1234},[66,39822,99],{"class":72},[66,39824,1520],{"class":102},[66,39826,2362],{"class":76},[66,39828,32677],{"class":1234},[66,39830,99],{"class":72},[66,39832,304],{"class":102},[66,39834,39835],{"class":76},"),\n",[66,39837,39838],{"class":68,"line":418},[66,39839,39840],{"class":76},"            nn.ReLU(),\n",[66,39842,39843,39845,39847,39849,39851,39853,39855,39857,39859,39861,39863,39865,39867,39869,39871,39873,39875],{"class":68,"line":430},[66,39844,39802],{"class":76},[66,39846,32650],{"class":1234},[66,39848,99],{"class":72},[66,39850,2195],{"class":102},[66,39852,2362],{"class":76},[66,39854,32659],{"class":1234},[66,39856,99],{"class":72},[66,39858,2195],{"class":102},[66,39860,2362],{"class":76},[66,39862,32668],{"class":1234},[66,39864,99],{"class":72},[66,39866,1520],{"class":102},[66,39868,2362],{"class":76},[66,39870,32677],{"class":1234},[66,39872,99],{"class":72},[66,39874,304],{"class":102},[66,39876,39835],{"class":76},[66,39878,39879],{"class":68,"line":438},[66,39880,39840],{"class":76},[66,39882,39883,39886,39888,39890,39892,39894,39896,39898,39900,39902,39904,39906,39908],{"class":68,"line":465},[66,39884,39885],{"class":76},"            nn.MaxPool2d(",[66,39887,32668],{"class":1234},[66,39889,99],{"class":72},[66,39891,795],{"class":102},[66,39893,2362],{"class":76},[66,39895,32723],{"class":1234},[66,39897,99],{"class":72},[66,39899,795],{"class":102},[66,39901,2362],{"class":76},[66,39903,32677],{"class":1234},[66,39905,99],{"class":72},[66,39907,2183],{"class":102},[66,39909,313],{"class":76},[66,39911,39912],{"class":68,"line":1805},[66,39913,39914],{"class":76},"        )\n",[66,39916,39917],{"class":68,"line":1817},[66,39918,39919],{"class":758},"        # 第二层\n",[66,39921,39922,39924,39927,39929],{"class":68,"line":1822},[66,39923,32639],{"class":102},[66,39925,39926],{"class":76},".block2",[66,39928,99],{"class":72},[66,39930,39797],{"class":76},[66,39932,39933,39935,39937,39939,39941,39943,39945,39947,39949,39951,39953,39955,39957,39959,39961,39963,39965],{"class":68,"line":1829},[66,39934,39802],{"class":76},[66,39936,32650],{"class":1234},[66,39938,99],{"class":72},[66,39940,2195],{"class":102},[66,39942,2362],{"class":76},[66,39944,32659],{"class":1234},[66,39946,99],{"class":72},[66,39948,33862],{"class":102},[66,39950,2362],{"class":76},[66,39952,32668],{"class":1234},[66,39954,99],{"class":72},[66,39956,1520],{"class":102},[66,39958,2362],{"class":76},[66,39960,32677],{"class":1234},[66,39962,99],{"class":72},[66,39964,304],{"class":102},[66,39966,39835],{"class":76},[66,39968,39969],{"class":68,"line":3529},[66,39970,39840],{"class":76},[66,39972,39973,39975,39977,39979,39981,39983,39985,39987,39989,39991,39993,39995,39997,39999,40001,40003,40005],{"class":68,"line":3557},[66,39974,39802],{"class":76},[66,39976,32650],{"class":1234},[66,39978,99],{"class":72},[66,39980,33862],{"class":102},[66,39982,2362],{"class":76},[66,39984,32659],{"class":1234},[66,39986,99],{"class":72},[66,39988,33862],{"class":102},[66,39990,2362],{"class":76},[66,39992,32668],{"class":1234},[66,39994,99],{"class":72},[66,39996,1520],{"class":102},[66,39998,2362],{"class":76},[66,40000,32677],{"class":1234},[66,40002,99],{"class":72},[66,40004,304],{"class":102},[66,40006,39835],{"class":76},[66,40008,40009],{"class":68,"line":3562},[66,40010,39840],{"class":76},[66,40012,40013,40015,40017,40019,40021,40023,40025,40027,40029,40031,40033,40035,40037],{"class":68,"line":3579},[66,40014,39885],{"class":76},[66,40016,32668],{"class":1234},[66,40018,99],{"class":72},[66,40020,795],{"class":102},[66,40022,2362],{"class":76},[66,40024,32723],{"class":1234},[66,40026,99],{"class":72},[66,40028,795],{"class":102},[66,40030,2362],{"class":76},[66,40032,32677],{"class":1234},[66,40034,99],{"class":72},[66,40036,2183],{"class":102},[66,40038,313],{"class":76},[66,40040,40041],{"class":68,"line":3584},[66,40042,39914],{"class":76},[66,40044,40045],{"class":68,"line":3589},[66,40046,40047],{"class":758},"        # 第三层\n",[66,40049,40050,40052,40055,40057],{"class":68,"line":3594},[66,40051,32639],{"class":102},[66,40053,40054],{"class":76},".block3",[66,40056,99],{"class":72},[66,40058,39797],{"class":76},[66,40060,40061,40063,40065,40067,40069,40071,40073,40075,40077,40079,40081,40083,40085,40087,40089,40091,40093],{"class":68,"line":3608},[66,40062,39802],{"class":76},[66,40064,32650],{"class":1234},[66,40066,99],{"class":72},[66,40068,33862],{"class":102},[66,40070,2362],{"class":76},[66,40072,32659],{"class":1234},[66,40074,99],{"class":72},[66,40076,36658],{"class":102},[66,40078,2362],{"class":76},[66,40080,32668],{"class":1234},[66,40082,99],{"class":72},[66,40084,1520],{"class":102},[66,40086,2362],{"class":76},[66,40088,32677],{"class":1234},[66,40090,99],{"class":72},[66,40092,304],{"class":102},[66,40094,39835],{"class":76},[66,40096,40097],{"class":68,"line":3613},[66,40098,39840],{"class":76},[66,40100,40101,40103,40105,40107,40109,40111,40113,40115,40117,40119,40121,40123,40125,40127,40129,40131,40133],{"class":68,"line":4401},[66,40102,39802],{"class":76},[66,40104,32650],{"class":1234},[66,40106,99],{"class":72},[66,40108,36658],{"class":102},[66,40110,2362],{"class":76},[66,40112,32659],{"class":1234},[66,40114,99],{"class":72},[66,40116,36658],{"class":102},[66,40118,2362],{"class":76},[66,40120,32668],{"class":1234},[66,40122,99],{"class":72},[66,40124,1520],{"class":102},[66,40126,2362],{"class":76},[66,40128,32677],{"class":1234},[66,40130,99],{"class":72},[66,40132,304],{"class":102},[66,40134,39835],{"class":76},[66,40136,40137],{"class":68,"line":4415},[66,40138,39840],{"class":76},[66,40140,40141,40143,40145,40147,40149,40151,40153,40155,40157,40159,40161,40163,40165,40167,40169,40171,40173],{"class":68,"line":4423},[66,40142,39802],{"class":76},[66,40144,32650],{"class":1234},[66,40146,99],{"class":72},[66,40148,36658],{"class":102},[66,40150,2362],{"class":76},[66,40152,32659],{"class":1234},[66,40154,99],{"class":72},[66,40156,36658],{"class":102},[66,40158,2362],{"class":76},[66,40160,32668],{"class":1234},[66,40162,99],{"class":72},[66,40164,1520],{"class":102},[66,40166,2362],{"class":76},[66,40168,32677],{"class":1234},[66,40170,99],{"class":72},[66,40172,304],{"class":102},[66,40174,39835],{"class":76},[66,40176,40177],{"class":68,"line":4428},[66,40178,39840],{"class":76},[66,40180,40181,40183,40185,40187,40189,40191,40193,40195,40197,40199,40201,40203,40205],{"class":68,"line":4434},[66,40182,39885],{"class":76},[66,40184,32668],{"class":1234},[66,40186,99],{"class":72},[66,40188,795],{"class":102},[66,40190,2362],{"class":76},[66,40192,32723],{"class":1234},[66,40194,99],{"class":72},[66,40196,795],{"class":102},[66,40198,2362],{"class":76},[66,40200,32677],{"class":1234},[66,40202,99],{"class":72},[66,40204,2183],{"class":102},[66,40206,313],{"class":76},[66,40208,40209],{"class":68,"line":4440},[66,40210,39914],{"class":76},[66,40212,40213],{"class":68,"line":4445},[66,40214,40215],{"class":758},"        # 第四层\n",[66,40217,40218,40220,40223,40225],{"class":68,"line":9759},[66,40219,32639],{"class":102},[66,40221,40222],{"class":76},".block4",[66,40224,99],{"class":72},[66,40226,39797],{"class":76},[66,40228,40229,40231,40233,40235,40237,40239,40241,40243,40246,40248,40250,40252,40254,40256,40258,40260,40262],{"class":68,"line":9783},[66,40230,39802],{"class":76},[66,40232,32650],{"class":1234},[66,40234,99],{"class":72},[66,40236,36658],{"class":102},[66,40238,2362],{"class":76},[66,40240,32659],{"class":1234},[66,40242,99],{"class":72},[66,40244,40245],{"class":102},"512",[66,40247,2362],{"class":76},[66,40249,32668],{"class":1234},[66,40251,99],{"class":72},[66,40253,1520],{"class":102},[66,40255,2362],{"class":76},[66,40257,32677],{"class":1234},[66,40259,99],{"class":72},[66,40261,304],{"class":102},[66,40263,39835],{"class":76},[66,40265,40266],{"class":68,"line":9788},[66,40267,39840],{"class":76},[66,40269,40270,40272,40274,40276,40278,40280,40282,40284,40286,40288,40290,40292,40294,40296,40298,40300,40302],{"class":68,"line":9794},[66,40271,39802],{"class":76},[66,40273,32650],{"class":1234},[66,40275,99],{"class":72},[66,40277,40245],{"class":102},[66,40279,2362],{"class":76},[66,40281,32659],{"class":1234},[66,40283,99],{"class":72},[66,40285,40245],{"class":102},[66,40287,2362],{"class":76},[66,40289,32668],{"class":1234},[66,40291,99],{"class":72},[66,40293,1520],{"class":102},[66,40295,2362],{"class":76},[66,40297,32677],{"class":1234},[66,40299,99],{"class":72},[66,40301,304],{"class":102},[66,40303,39835],{"class":76},[66,40305,40306],{"class":68,"line":9821},[66,40307,39840],{"class":76},[66,40309,40310,40312,40314,40316,40318,40320,40322,40324,40326,40328,40330,40332,40334,40336,40338,40340,40342],{"class":68,"line":9826},[66,40311,39802],{"class":76},[66,40313,32650],{"class":1234},[66,40315,99],{"class":72},[66,40317,40245],{"class":102},[66,40319,2362],{"class":76},[66,40321,32659],{"class":1234},[66,40323,99],{"class":72},[66,40325,40245],{"class":102},[66,40327,2362],{"class":76},[66,40329,32668],{"class":1234},[66,40331,99],{"class":72},[66,40333,1520],{"class":102},[66,40335,2362],{"class":76},[66,40337,32677],{"class":1234},[66,40339,99],{"class":72},[66,40341,304],{"class":102},[66,40343,39835],{"class":76},[66,40345,40346],{"class":68,"line":9832},[66,40347,39840],{"class":76},[66,40349,40350,40352,40354,40356,40358,40360,40362,40364,40366,40368,40370,40372,40374],{"class":68,"line":9844},[66,40351,39885],{"class":76},[66,40353,32668],{"class":1234},[66,40355,99],{"class":72},[66,40357,795],{"class":102},[66,40359,2362],{"class":76},[66,40361,32723],{"class":1234},[66,40363,99],{"class":72},[66,40365,795],{"class":102},[66,40367,2362],{"class":76},[66,40369,32677],{"class":1234},[66,40371,99],{"class":72},[66,40373,2183],{"class":102},[66,40375,313],{"class":76},[66,40377,40378],{"class":68,"line":9856},[66,40379,39914],{"class":76},[66,40381,40382],{"class":68,"line":9868},[66,40383,40384],{"class":758},"        # 第五层\n",[66,40386,40387,40389,40392,40394],{"class":68,"line":11523},[66,40388,32639],{"class":102},[66,40390,40391],{"class":76},".block5",[66,40393,99],{"class":72},[66,40395,39797],{"class":76},[66,40397,40398,40400,40402,40404,40406,40408,40410,40412,40414,40416,40418,40420,40422,40424,40426,40428,40430],{"class":68,"line":11548},[66,40399,39802],{"class":76},[66,40401,32650],{"class":1234},[66,40403,99],{"class":72},[66,40405,40245],{"class":102},[66,40407,2362],{"class":76},[66,40409,32659],{"class":1234},[66,40411,99],{"class":72},[66,40413,40245],{"class":102},[66,40415,2362],{"class":76},[66,40417,32668],{"class":1234},[66,40419,99],{"class":72},[66,40421,1520],{"class":102},[66,40423,2362],{"class":76},[66,40425,32677],{"class":1234},[66,40427,99],{"class":72},[66,40429,304],{"class":102},[66,40431,39835],{"class":76},[66,40433,40434],{"class":68,"line":11571},[66,40435,39840],{"class":76},[66,40437,40438,40440,40442,40444,40446,40448,40450,40452,40454,40456,40458,40460,40462,40464,40466,40468,40470],{"class":68,"line":11595},[66,40439,39802],{"class":76},[66,40441,32650],{"class":1234},[66,40443,99],{"class":72},[66,40445,40245],{"class":102},[66,40447,2362],{"class":76},[66,40449,32659],{"class":1234},[66,40451,99],{"class":72},[66,40453,40245],{"class":102},[66,40455,2362],{"class":76},[66,40457,32668],{"class":1234},[66,40459,99],{"class":72},[66,40461,1520],{"class":102},[66,40463,2362],{"class":76},[66,40465,32677],{"class":1234},[66,40467,99],{"class":72},[66,40469,304],{"class":102},[66,40471,39835],{"class":76},[66,40473,40474],{"class":68,"line":11600},[66,40475,39840],{"class":76},[66,40477,40478,40480,40482,40484,40486,40488,40490,40492,40494,40496,40498,40500,40502,40504,40506,40508,40510],{"class":68,"line":11605},[66,40479,39802],{"class":76},[66,40481,32650],{"class":1234},[66,40483,99],{"class":72},[66,40485,40245],{"class":102},[66,40487,2362],{"class":76},[66,40489,32659],{"class":1234},[66,40491,99],{"class":72},[66,40493,40245],{"class":102},[66,40495,2362],{"class":76},[66,40497,32668],{"class":1234},[66,40499,99],{"class":72},[66,40501,1520],{"class":102},[66,40503,2362],{"class":76},[66,40505,32677],{"class":1234},[66,40507,99],{"class":72},[66,40509,304],{"class":102},[66,40511,39835],{"class":76},[66,40513,40514],{"class":68,"line":11610},[66,40515,39840],{"class":76},[66,40517,40518,40520,40522,40524,40526,40528,40530,40532,40534,40536,40538,40540,40542],{"class":68,"line":11619},[66,40519,39885],{"class":76},[66,40521,32668],{"class":1234},[66,40523,99],{"class":72},[66,40525,795],{"class":102},[66,40527,2362],{"class":76},[66,40529,32723],{"class":1234},[66,40531,99],{"class":72},[66,40533,795],{"class":102},[66,40535,2362],{"class":76},[66,40537,32677],{"class":1234},[66,40539,99],{"class":72},[66,40541,2183],{"class":102},[66,40543,313],{"class":76},[66,40545,40546],{"class":68,"line":11624},[66,40547,39914],{"class":76},[66,40549,40550],{"class":68,"line":11630},[66,40551,40552],{"class":758},"        # 全连接层\n",[66,40554,40555,40557,40560,40562],{"class":68,"line":11651},[66,40556,32639],{"class":102},[66,40558,40559],{"class":76},".block6",[66,40561,99],{"class":72},[66,40563,39797],{"class":76},[66,40565,40566],{"class":68,"line":11657},[66,40567,40568],{"class":758},"            # 平展操作\n",[66,40570,40571],{"class":68,"line":11671},[66,40572,40573],{"class":758},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[66,40575,40576],{"class":68,"line":11677},[66,40577,40578],{"class":76},"            nn.Flatten(),\n",[66,40580,40581,40584,40586,40588,40590,40592,40594,40596,40598],{"class":68,"line":11704},[66,40582,40583],{"class":76},"            nn.Linear(",[66,40585,2353],{"class":102},[66,40587,1208],{"class":72},[66,40589,2353],{"class":102},[66,40591,1208],{"class":72},[66,40593,40245],{"class":102},[66,40595,2362],{"class":76},[66,40597,36658],{"class":102},[66,40599,39835],{"class":76},[66,40601,40602],{"class":68,"line":11713},[66,40603,39840],{"class":76},[66,40605,40606,40608,40610,40612,40614],{"class":68,"line":11719},[66,40607,40583],{"class":76},[66,40609,36658],{"class":102},[66,40611,2362],{"class":76},[66,40613,33862],{"class":102},[66,40615,39835],{"class":76},[66,40617,40618],{"class":68,"line":11727},[66,40619,39840],{"class":76},[66,40621,40622,40624,40626,40628,40630],{"class":68,"line":11732},[66,40623,40583],{"class":76},[66,40625,33862],{"class":102},[66,40627,2362],{"class":76},[66,40629,790],{"class":102},[66,40631,313],{"class":76},[66,40633,40634],{"class":68,"line":18407},[66,40635,39914],{"class":76},[66,40637,40638],{"class":68,"line":18413},[66,40639,109],{"emptyLinePlaceholder":108},[66,40641,40642],{"class":68,"line":18436},[66,40643,40644],{"class":758},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[66,40646,40647],{"class":68,"line":18442},[66,40648,40649],{"class":758},"        # 循环遍历模型\n",[66,40651,40652,40654,40657,40659,40662],{"class":68,"line":18465},[66,40653,5222],{"class":72},[66,40655,40656],{"class":76}," m ",[66,40658,507],{"class":72},[66,40660,40661],{"class":102}," self",[66,40663,40664],{"class":76},".modules():\n",[66,40666,40667],{"class":68,"line":18479},[66,40668,40669],{"class":758},"            # print(m)\n",[66,40671,40672,40674,40677],{"class":68,"line":18499},[66,40673,6458],{"class":72},[66,40675,40676],{"class":102}," isinstance",[66,40678,40679],{"class":76},"(m,nn.Conv2d):\n",[66,40681,40682],{"class":68,"line":18505},[66,40683,40684],{"class":758},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[66,40686,40687,40690,40693,40695,40698],{"class":68,"line":18516},[66,40688,40689],{"class":76},"                nn.init.kaiming_normal_(m.weight,",[66,40691,40692],{"class":1234},"nonlinearity",[66,40694,99],{"class":72},[66,40696,40697],{"class":356},"'relu'",[66,40699,313],{"class":76},[66,40701,40702],{"class":68,"line":18539},[66,40703,40704],{"class":758},"                # 判断b参数是否存在\n",[66,40706,40707,40710,40713,40716,40719,40722],{"class":68,"line":18561},[66,40708,40709],{"class":72},"                if",[66,40711,40712],{"class":76}," m.bias ",[66,40714,40715],{"class":72},"is",[66,40717,40718],{"class":72}," not",[66,40720,40721],{"class":102}," None",[66,40723,126],{"class":76},[66,40725,40726],{"class":68,"line":18566},[66,40727,40728],{"class":758},"                    # 如果参数不存在的化初始化b=0\n",[66,40730,40731,40734,40736],{"class":68,"line":18572},[66,40732,40733],{"class":76},"                    nn.init.constant_(m.bias,",[66,40735,2183],{"class":102},[66,40737,313],{"class":76},[66,40739,40740],{"class":68,"line":18586},[66,40741,40742],{"class":758},"            # 全连接层初始化\n",[66,40744,40745,40748,40750],{"class":68,"line":18599},[66,40746,40747],{"class":72},"            elif",[66,40749,40676],{"class":102},[66,40751,40752],{"class":76},"(m,nn.Linear):\n",[66,40754,40755],{"class":68,"line":18604},[66,40756,40757],{"class":758},"                # 这个初始化方法是利用的是正太分布的方式\n",[66,40759,40760],{"class":68,"line":18618},[66,40761,40762],{"class":758},"                # 均值为0，方差为0.01\n",[66,40764,40765,40768,40770,40772,40775],{"class":68,"line":18623},[66,40766,40767],{"class":76},"                nn.init.normal_(m.weight,",[66,40769,2183],{"class":102},[66,40771,2362],{"class":76},[66,40773,40774],{"class":102},"0.01",[66,40776,313],{"class":76},[66,40778,40779],{"class":68,"line":18629},[66,40780,40781],{"class":758},"                # 初始化b参数\n",[66,40783,40784,40786,40788,40790,40792,40794],{"class":68,"line":18634},[66,40785,40709],{"class":72},[66,40787,40712],{"class":76},[66,40789,40715],{"class":72},[66,40791,40718],{"class":72},[66,40793,40721],{"class":102},[66,40795,126],{"class":76},[66,40797,40798,40800,40802],{"class":68,"line":18648},[66,40799,40733],{"class":76},[66,40801,2183],{"class":102},[66,40803,313],{"class":76},[66,40805,40806],{"class":68,"line":18653},[66,40807,109],{"emptyLinePlaceholder":108},[66,40809,40810],{"class":68,"line":18658},[66,40811,36953],{"class":758},[66,40813,40814,40816,40818],{"class":68,"line":18672},[66,40815,32595],{"class":72},[66,40817,32887],{"class":3793},[66,40819,32890],{"class":76},[66,40821,40822,40824,40826,40828],{"class":68,"line":18684},[66,40823,32895],{"class":76},[66,40825,99],{"class":72},[66,40827,32617],{"class":102},[66,40829,40830],{"class":76},".block1(x)\n",[66,40832,40833,40835,40837,40839],{"class":68,"line":18689},[66,40834,32895],{"class":76},[66,40836,99],{"class":72},[66,40838,32617],{"class":102},[66,40840,40841],{"class":76},".block2(x)\n",[66,40843,40844,40846,40848,40850],{"class":68,"line":18702},[66,40845,32895],{"class":76},[66,40847,99],{"class":72},[66,40849,32617],{"class":102},[66,40851,40852],{"class":76},".block3(x)\n",[66,40854,40855,40857,40859,40861],{"class":68,"line":18707},[66,40856,32895],{"class":76},[66,40858,99],{"class":72},[66,40860,32617],{"class":102},[66,40862,40863],{"class":76},".block4(x)\n",[66,40865,40866,40868,40870,40872],{"class":68,"line":18712},[66,40867,32895],{"class":76},[66,40869,99],{"class":72},[66,40871,32617],{"class":102},[66,40873,40874],{"class":76},".block5(x)\n",[66,40876,40877,40879,40881,40883],{"class":68,"line":18717},[66,40878,32895],{"class":76},[66,40880,99],{"class":72},[66,40882,32617],{"class":102},[66,40884,40885],{"class":76},".block6(x)\n",[66,40887,40888,40890],{"class":68,"line":18730},[66,40889,16557],{"class":72},[66,40891,33003],{"class":76},[66,40893,40894],{"class":68,"line":18735},[66,40895,109],{"emptyLinePlaceholder":108},[66,40897,40898],{"class":68,"line":34423},[66,40899,40900],{"class":758},"# 验证模型\n",[66,40902,40903,40905,40907,40909,40912],{"class":68,"line":34429},[66,40904,3373],{"class":72},[66,40906,33014],{"class":102},[66,40908,531],{"class":72},[66,40910,40911],{"class":356},"'__main__'",[66,40913,126],{"class":76},[66,40915,40916,40918,40920,40922,40924,40926,40928,40930,40932],{"class":68,"line":34435},[66,40917,33031],{"class":76},[66,40919,99],{"class":72},[66,40921,32247],{"class":76},[66,40923,33038],{"class":356},[66,40925,3534],{"class":72},[66,40927,33043],{"class":76},[66,40929,1292],{"class":72},[66,40931,32272],{"class":356},[66,40933,313],{"class":76},[66,40935,40936,40938],{"class":68,"line":34441},[66,40937,132],{"class":102},[66,40939,32281],{"class":76},[66,40941,40942,40944,40946],{"class":68,"line":34447},[66,40943,33083],{"class":76},[66,40945,99],{"class":72},[66,40947,40948],{"class":76},"VGG16().to(device)\n",[66,40950,40951,40953,40955,40957,40959,40961,40963,40965],{"class":68,"line":34458},[66,40952,132],{"class":102},[66,40954,33095],{"class":76},[66,40956,304],{"class":102},[66,40958,2362],{"class":76},[66,40960,33294],{"class":102},[66,40962,2362],{"class":76},[66,40964,33294],{"class":102},[66,40966,33108],{"class":76},[31,40968,40969],{"start":80},[34,40970,40971],{},"训练代码",[19,40973,40974],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,40976,40977],{},"解决方式:",[19,40979,40980],{},"①权重初始化",[57,40982,40984],{"className":59,"code":40983,"language":61,"meta":62,"style":62},"# 权重初始化,保证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",[23,40985,40986,40991,40996,41008,41013,41021,41026,41039,41044,41058,41063,41072,41077,41085,41090,41095,41108,41113,41127],{"__ignoreMap":62},[66,40987,40988],{"class":68,"line":69},[66,40989,40990],{"class":758},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[66,40992,40993],{"class":68,"line":80},[66,40994,40995],{"class":758},"# 循环遍历模型\n",[66,40997,40998,41000,41002,41004,41006],{"class":68,"line":112},[66,40999,502],{"class":72},[66,41001,40656],{"class":76},[66,41003,507],{"class":72},[66,41005,40661],{"class":102},[66,41007,40664],{"class":76},[66,41009,41010],{"class":68,"line":129},[66,41011,41012],{"class":758},"    # print(m)\n",[66,41014,41015,41017,41019],{"class":68,"line":138},[66,41016,380],{"class":72},[66,41018,40676],{"class":102},[66,41020,40679],{"class":76},[66,41022,41023],{"class":68,"line":227},[66,41024,41025],{"class":758},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[66,41027,41028,41031,41033,41035,41037],{"class":68,"line":236},[66,41029,41030],{"class":76},"        nn.init.kaiming_normal_(m.weight,",[66,41032,40692],{"class":1234},[66,41034,99],{"class":72},[66,41036,40697],{"class":356},[66,41038,313],{"class":76},[66,41040,41041],{"class":68,"line":241},[66,41042,41043],{"class":758},"        # 判断b参数是否存在\n",[66,41045,41046,41048,41050,41052,41054,41056],{"class":68,"line":372},[66,41047,4321],{"class":72},[66,41049,40712],{"class":76},[66,41051,40715],{"class":72},[66,41053,40718],{"class":72},[66,41055,40721],{"class":102},[66,41057,126],{"class":76},[66,41059,41060],{"class":68,"line":377},[66,41061,41062],{"class":758},"            # 如果参数不存在的化初始化b=0\n",[66,41064,41065,41068,41070],{"class":68,"line":392},[66,41066,41067],{"class":76},"            nn.init.constant_(m.bias,",[66,41069,2183],{"class":102},[66,41071,313],{"class":76},[66,41073,41074],{"class":68,"line":405},[66,41075,41076],{"class":758},"    # 全连接层初始化\n",[66,41078,41079,41081,41083],{"class":68,"line":418},[66,41080,408],{"class":72},[66,41082,40676],{"class":102},[66,41084,40752],{"class":76},[66,41086,41087],{"class":68,"line":430},[66,41088,41089],{"class":758},"        # 这个初始化方法是利用的是正太分布的方式\n",[66,41091,41092],{"class":68,"line":438},[66,41093,41094],{"class":758},"        # 均值为0，方差为0.01\n",[66,41096,41097,41100,41102,41104,41106],{"class":68,"line":465},[66,41098,41099],{"class":76},"        nn.init.normal_(m.weight,",[66,41101,2183],{"class":102},[66,41103,2362],{"class":76},[66,41105,40774],{"class":102},[66,41107,313],{"class":76},[66,41109,41110],{"class":68,"line":1805},[66,41111,41112],{"class":758},"        # 初始化b参数\n",[66,41114,41115,41117,41119,41121,41123,41125],{"class":68,"line":1817},[66,41116,4321],{"class":72},[66,41118,40712],{"class":76},[66,41120,40715],{"class":72},[66,41122,40718],{"class":72},[66,41124,40721],{"class":102},[66,41126,126],{"class":76},[66,41128,41129,41131,41133],{"class":68,"line":1822},[66,41130,41067],{"class":76},[66,41132,2183],{"class":102},[66,41134,313],{"class":76},[19,41136,41137],{},"②尽可能地增加批次",[19,41139,41140],{},"训练完整代码：",[57,41142,41143],{"className":59,"code":39687,"language":61,"meta":62,"style":62},[23,41144,41145,41151,41161,41171,41181,41185,41201,41209,41227,41231,41235,41245,41281,41285,41321,41325,41353,41357,41361,41371,41407,41411,41447,41451,41479,41483,41487,41497,41533,41537,41573,41577,41613,41617,41645,41649,41653,41663,41699,41703,41739,41743,41779,41783,41811,41815,41819,41829,41865,41869,41905,41909,41945,41949,41977,41981,41985,41995,41999,42003,42007,42027,42031,42043,42047,42059,42063,42067,42071,42075,42087,42091,42099,42103,42115,42119,42133,42137,42145,42149,42157,42161,42165,42177,42181,42195,42203,42207,42211,42219,42229,42239,42249,42259,42269,42279,42285,42289,42293,42305,42325,42331,42339],{"__ignoreMap":62},[66,41146,41147,41149],{"class":68,"line":69},[66,41148,284],{"class":72},[66,41150,32192],{"class":76},[66,41152,41153,41155,41157,41159],{"class":68,"line":80},[66,41154,32532],{"class":72},[66,41156,39702],{"class":76},[66,41158,284],{"class":72},[66,41160,39707],{"class":76},[66,41162,41163,41165,41167,41169],{"class":68,"line":112},[66,41164,32532],{"class":72},[66,41166,32535],{"class":76},[66,41168,284],{"class":72},[66,41170,32540],{"class":76},[66,41172,41173,41175,41177,41179],{"class":68,"line":129},[66,41174,32532],{"class":72},[66,41176,32552],{"class":76},[66,41178,284],{"class":72},[66,41180,32557],{"class":76},[66,41182,41183],{"class":68,"line":138},[66,41184,109],{"emptyLinePlaceholder":108},[66,41186,41187,41189,41191,41193,41195,41197,41199],{"class":68,"line":227},[66,41188,16499],{"class":72},[66,41190,39738],{"class":3793},[66,41192,348],{"class":76},[66,41194,32573],{"class":3793},[66,41196,2537],{"class":76},[66,41198,32578],{"class":3793},[66,41200,522],{"class":76},[66,41202,41203,41205,41207],{"class":68,"line":236},[66,41204,32595],{"class":72},[66,41206,32598],{"class":102},[66,41208,32601],{"class":76},[66,41210,41211,41213,41215,41217,41219,41221,41223,41225],{"class":68,"line":241},[66,41212,32611],{"class":102},[66,41214,348],{"class":76},[66,41216,39765],{"class":102},[66,41218,307],{"class":76},[66,41220,32617],{"class":102},[66,41222,32620],{"class":76},[66,41224,32623],{"class":102},[66,41226,1253],{"class":76},[66,41228,41229],{"class":68,"line":372},[66,41230,39780],{"class":758},[66,41232,41233],{"class":68,"line":377},[66,41234,39785],{"class":758},[66,41236,41237,41239,41241,41243],{"class":68,"line":392},[66,41238,32639],{"class":102},[66,41240,39792],{"class":76},[66,41242,99],{"class":72},[66,41244,39797],{"class":76},[66,41246,41247,41249,41251,41253,41255,41257,41259,41261,41263,41265,41267,41269,41271,41273,41275,41277,41279],{"class":68,"line":405},[66,41248,39802],{"class":76},[66,41250,32650],{"class":1234},[66,41252,99],{"class":72},[66,41254,304],{"class":102},[66,41256,2362],{"class":76},[66,41258,32659],{"class":1234},[66,41260,99],{"class":72},[66,41262,2195],{"class":102},[66,41264,2362],{"class":76},[66,41266,32668],{"class":1234},[66,41268,99],{"class":72},[66,41270,1520],{"class":102},[66,41272,2362],{"class":76},[66,41274,32677],{"class":1234},[66,41276,99],{"class":72},[66,41278,304],{"class":102},[66,41280,39835],{"class":76},[66,41282,41283],{"class":68,"line":418},[66,41284,39840],{"class":76},[66,41286,41287,41289,41291,41293,41295,41297,41299,41301,41303,41305,41307,41309,41311,41313,41315,41317,41319],{"class":68,"line":430},[66,41288,39802],{"class":76},[66,41290,32650],{"class":1234},[66,41292,99],{"class":72},[66,41294,2195],{"class":102},[66,41296,2362],{"class":76},[66,41298,32659],{"class":1234},[66,41300,99],{"class":72},[66,41302,2195],{"class":102},[66,41304,2362],{"class":76},[66,41306,32668],{"class":1234},[66,41308,99],{"class":72},[66,41310,1520],{"class":102},[66,41312,2362],{"class":76},[66,41314,32677],{"class":1234},[66,41316,99],{"class":72},[66,41318,304],{"class":102},[66,41320,39835],{"class":76},[66,41322,41323],{"class":68,"line":438},[66,41324,39840],{"class":76},[66,41326,41327,41329,41331,41333,41335,41337,41339,41341,41343,41345,41347,41349,41351],{"class":68,"line":465},[66,41328,39885],{"class":76},[66,41330,32668],{"class":1234},[66,41332,99],{"class":72},[66,41334,795],{"class":102},[66,41336,2362],{"class":76},[66,41338,32723],{"class":1234},[66,41340,99],{"class":72},[66,41342,795],{"class":102},[66,41344,2362],{"class":76},[66,41346,32677],{"class":1234},[66,41348,99],{"class":72},[66,41350,2183],{"class":102},[66,41352,313],{"class":76},[66,41354,41355],{"class":68,"line":1805},[66,41356,39914],{"class":76},[66,41358,41359],{"class":68,"line":1817},[66,41360,39919],{"class":758},[66,41362,41363,41365,41367,41369],{"class":68,"line":1822},[66,41364,32639],{"class":102},[66,41366,39926],{"class":76},[66,41368,99],{"class":72},[66,41370,39797],{"class":76},[66,41372,41373,41375,41377,41379,41381,41383,41385,41387,41389,41391,41393,41395,41397,41399,41401,41403,41405],{"class":68,"line":1829},[66,41374,39802],{"class":76},[66,41376,32650],{"class":1234},[66,41378,99],{"class":72},[66,41380,2195],{"class":102},[66,41382,2362],{"class":76},[66,41384,32659],{"class":1234},[66,41386,99],{"class":72},[66,41388,33862],{"class":102},[66,41390,2362],{"class":76},[66,41392,32668],{"class":1234},[66,41394,99],{"class":72},[66,41396,1520],{"class":102},[66,41398,2362],{"class":76},[66,41400,32677],{"class":1234},[66,41402,99],{"class":72},[66,41404,304],{"class":102},[66,41406,39835],{"class":76},[66,41408,41409],{"class":68,"line":3529},[66,41410,39840],{"class":76},[66,41412,41413,41415,41417,41419,41421,41423,41425,41427,41429,41431,41433,41435,41437,41439,41441,41443,41445],{"class":68,"line":3557},[66,41414,39802],{"class":76},[66,41416,32650],{"class":1234},[66,41418,99],{"class":72},[66,41420,33862],{"class":102},[66,41422,2362],{"class":76},[66,41424,32659],{"class":1234},[66,41426,99],{"class":72},[66,41428,33862],{"class":102},[66,41430,2362],{"class":76},[66,41432,32668],{"class":1234},[66,41434,99],{"class":72},[66,41436,1520],{"class":102},[66,41438,2362],{"class":76},[66,41440,32677],{"class":1234},[66,41442,99],{"class":72},[66,41444,304],{"class":102},[66,41446,39835],{"class":76},[66,41448,41449],{"class":68,"line":3562},[66,41450,39840],{"class":76},[66,41452,41453,41455,41457,41459,41461,41463,41465,41467,41469,41471,41473,41475,41477],{"class":68,"line":3579},[66,41454,39885],{"class":76},[66,41456,32668],{"class":1234},[66,41458,99],{"class":72},[66,41460,795],{"class":102},[66,41462,2362],{"class":76},[66,41464,32723],{"class":1234},[66,41466,99],{"class":72},[66,41468,795],{"class":102},[66,41470,2362],{"class":76},[66,41472,32677],{"class":1234},[66,41474,99],{"class":72},[66,41476,2183],{"class":102},[66,41478,313],{"class":76},[66,41480,41481],{"class":68,"line":3584},[66,41482,39914],{"class":76},[66,41484,41485],{"class":68,"line":3589},[66,41486,40047],{"class":758},[66,41488,41489,41491,41493,41495],{"class":68,"line":3594},[66,41490,32639],{"class":102},[66,41492,40054],{"class":76},[66,41494,99],{"class":72},[66,41496,39797],{"class":76},[66,41498,41499,41501,41503,41505,41507,41509,41511,41513,41515,41517,41519,41521,41523,41525,41527,41529,41531],{"class":68,"line":3608},[66,41500,39802],{"class":76},[66,41502,32650],{"class":1234},[66,41504,99],{"class":72},[66,41506,33862],{"class":102},[66,41508,2362],{"class":76},[66,41510,32659],{"class":1234},[66,41512,99],{"class":72},[66,41514,36658],{"class":102},[66,41516,2362],{"class":76},[66,41518,32668],{"class":1234},[66,41520,99],{"class":72},[66,41522,1520],{"class":102},[66,41524,2362],{"class":76},[66,41526,32677],{"class":1234},[66,41528,99],{"class":72},[66,41530,304],{"class":102},[66,41532,39835],{"class":76},[66,41534,41535],{"class":68,"line":3613},[66,41536,39840],{"class":76},[66,41538,41539,41541,41543,41545,41547,41549,41551,41553,41555,41557,41559,41561,41563,41565,41567,41569,41571],{"class":68,"line":4401},[66,41540,39802],{"class":76},[66,41542,32650],{"class":1234},[66,41544,99],{"class":72},[66,41546,36658],{"class":102},[66,41548,2362],{"class":76},[66,41550,32659],{"class":1234},[66,41552,99],{"class":72},[66,41554,36658],{"class":102},[66,41556,2362],{"class":76},[66,41558,32668],{"class":1234},[66,41560,99],{"class":72},[66,41562,1520],{"class":102},[66,41564,2362],{"class":76},[66,41566,32677],{"class":1234},[66,41568,99],{"class":72},[66,41570,304],{"class":102},[66,41572,39835],{"class":76},[66,41574,41575],{"class":68,"line":4415},[66,41576,39840],{"class":76},[66,41578,41579,41581,41583,41585,41587,41589,41591,41593,41595,41597,41599,41601,41603,41605,41607,41609,41611],{"class":68,"line":4423},[66,41580,39802],{"class":76},[66,41582,32650],{"class":1234},[66,41584,99],{"class":72},[66,41586,36658],{"class":102},[66,41588,2362],{"class":76},[66,41590,32659],{"class":1234},[66,41592,99],{"class":72},[66,41594,36658],{"class":102},[66,41596,2362],{"class":76},[66,41598,32668],{"class":1234},[66,41600,99],{"class":72},[66,41602,1520],{"class":102},[66,41604,2362],{"class":76},[66,41606,32677],{"class":1234},[66,41608,99],{"class":72},[66,41610,304],{"class":102},[66,41612,39835],{"class":76},[66,41614,41615],{"class":68,"line":4428},[66,41616,39840],{"class":76},[66,41618,41619,41621,41623,41625,41627,41629,41631,41633,41635,41637,41639,41641,41643],{"class":68,"line":4434},[66,41620,39885],{"class":76},[66,41622,32668],{"class":1234},[66,41624,99],{"class":72},[66,41626,795],{"class":102},[66,41628,2362],{"class":76},[66,41630,32723],{"class":1234},[66,41632,99],{"class":72},[66,41634,795],{"class":102},[66,41636,2362],{"class":76},[66,41638,32677],{"class":1234},[66,41640,99],{"class":72},[66,41642,2183],{"class":102},[66,41644,313],{"class":76},[66,41646,41647],{"class":68,"line":4440},[66,41648,39914],{"class":76},[66,41650,41651],{"class":68,"line":4445},[66,41652,40215],{"class":758},[66,41654,41655,41657,41659,41661],{"class":68,"line":9759},[66,41656,32639],{"class":102},[66,41658,40222],{"class":76},[66,41660,99],{"class":72},[66,41662,39797],{"class":76},[66,41664,41665,41667,41669,41671,41673,41675,41677,41679,41681,41683,41685,41687,41689,41691,41693,41695,41697],{"class":68,"line":9783},[66,41666,39802],{"class":76},[66,41668,32650],{"class":1234},[66,41670,99],{"class":72},[66,41672,36658],{"class":102},[66,41674,2362],{"class":76},[66,41676,32659],{"class":1234},[66,41678,99],{"class":72},[66,41680,40245],{"class":102},[66,41682,2362],{"class":76},[66,41684,32668],{"class":1234},[66,41686,99],{"class":72},[66,41688,1520],{"class":102},[66,41690,2362],{"class":76},[66,41692,32677],{"class":1234},[66,41694,99],{"class":72},[66,41696,304],{"class":102},[66,41698,39835],{"class":76},[66,41700,41701],{"class":68,"line":9788},[66,41702,39840],{"class":76},[66,41704,41705,41707,41709,41711,41713,41715,41717,41719,41721,41723,41725,41727,41729,41731,41733,41735,41737],{"class":68,"line":9794},[66,41706,39802],{"class":76},[66,41708,32650],{"class":1234},[66,41710,99],{"class":72},[66,41712,40245],{"class":102},[66,41714,2362],{"class":76},[66,41716,32659],{"class":1234},[66,41718,99],{"class":72},[66,41720,40245],{"class":102},[66,41722,2362],{"class":76},[66,41724,32668],{"class":1234},[66,41726,99],{"class":72},[66,41728,1520],{"class":102},[66,41730,2362],{"class":76},[66,41732,32677],{"class":1234},[66,41734,99],{"class":72},[66,41736,304],{"class":102},[66,41738,39835],{"class":76},[66,41740,41741],{"class":68,"line":9821},[66,41742,39840],{"class":76},[66,41744,41745,41747,41749,41751,41753,41755,41757,41759,41761,41763,41765,41767,41769,41771,41773,41775,41777],{"class":68,"line":9826},[66,41746,39802],{"class":76},[66,41748,32650],{"class":1234},[66,41750,99],{"class":72},[66,41752,40245],{"class":102},[66,41754,2362],{"class":76},[66,41756,32659],{"class":1234},[66,41758,99],{"class":72},[66,41760,40245],{"class":102},[66,41762,2362],{"class":76},[66,41764,32668],{"class":1234},[66,41766,99],{"class":72},[66,41768,1520],{"class":102},[66,41770,2362],{"class":76},[66,41772,32677],{"class":1234},[66,41774,99],{"class":72},[66,41776,304],{"class":102},[66,41778,39835],{"class":76},[66,41780,41781],{"class":68,"line":9832},[66,41782,39840],{"class":76},[66,41784,41785,41787,41789,41791,41793,41795,41797,41799,41801,41803,41805,41807,41809],{"class":68,"line":9844},[66,41786,39885],{"class":76},[66,41788,32668],{"class":1234},[66,41790,99],{"class":72},[66,41792,795],{"class":102},[66,41794,2362],{"class":76},[66,41796,32723],{"class":1234},[66,41798,99],{"class":72},[66,41800,795],{"class":102},[66,41802,2362],{"class":76},[66,41804,32677],{"class":1234},[66,41806,99],{"class":72},[66,41808,2183],{"class":102},[66,41810,313],{"class":76},[66,41812,41813],{"class":68,"line":9856},[66,41814,39914],{"class":76},[66,41816,41817],{"class":68,"line":9868},[66,41818,40384],{"class":758},[66,41820,41821,41823,41825,41827],{"class":68,"line":11523},[66,41822,32639],{"class":102},[66,41824,40391],{"class":76},[66,41826,99],{"class":72},[66,41828,39797],{"class":76},[66,41830,41831,41833,41835,41837,41839,41841,41843,41845,41847,41849,41851,41853,41855,41857,41859,41861,41863],{"class":68,"line":11548},[66,41832,39802],{"class":76},[66,41834,32650],{"class":1234},[66,41836,99],{"class":72},[66,41838,40245],{"class":102},[66,41840,2362],{"class":76},[66,41842,32659],{"class":1234},[66,41844,99],{"class":72},[66,41846,40245],{"class":102},[66,41848,2362],{"class":76},[66,41850,32668],{"class":1234},[66,41852,99],{"class":72},[66,41854,1520],{"class":102},[66,41856,2362],{"class":76},[66,41858,32677],{"class":1234},[66,41860,99],{"class":72},[66,41862,304],{"class":102},[66,41864,39835],{"class":76},[66,41866,41867],{"class":68,"line":11571},[66,41868,39840],{"class":76},[66,41870,41871,41873,41875,41877,41879,41881,41883,41885,41887,41889,41891,41893,41895,41897,41899,41901,41903],{"class":68,"line":11595},[66,41872,39802],{"class":76},[66,41874,32650],{"class":1234},[66,41876,99],{"class":72},[66,41878,40245],{"class":102},[66,41880,2362],{"class":76},[66,41882,32659],{"class":1234},[66,41884,99],{"class":72},[66,41886,40245],{"class":102},[66,41888,2362],{"class":76},[66,41890,32668],{"class":1234},[66,41892,99],{"class":72},[66,41894,1520],{"class":102},[66,41896,2362],{"class":76},[66,41898,32677],{"class":1234},[66,41900,99],{"class":72},[66,41902,304],{"class":102},[66,41904,39835],{"class":76},[66,41906,41907],{"class":68,"line":11600},[66,41908,39840],{"class":76},[66,41910,41911,41913,41915,41917,41919,41921,41923,41925,41927,41929,41931,41933,41935,41937,41939,41941,41943],{"class":68,"line":11605},[66,41912,39802],{"class":76},[66,41914,32650],{"class":1234},[66,41916,99],{"class":72},[66,41918,40245],{"class":102},[66,41920,2362],{"class":76},[66,41922,32659],{"class":1234},[66,41924,99],{"class":72},[66,41926,40245],{"class":102},[66,41928,2362],{"class":76},[66,41930,32668],{"class":1234},[66,41932,99],{"class":72},[66,41934,1520],{"class":102},[66,41936,2362],{"class":76},[66,41938,32677],{"class":1234},[66,41940,99],{"class":72},[66,41942,304],{"class":102},[66,41944,39835],{"class":76},[66,41946,41947],{"class":68,"line":11610},[66,41948,39840],{"class":76},[66,41950,41951,41953,41955,41957,41959,41961,41963,41965,41967,41969,41971,41973,41975],{"class":68,"line":11619},[66,41952,39885],{"class":76},[66,41954,32668],{"class":1234},[66,41956,99],{"class":72},[66,41958,795],{"class":102},[66,41960,2362],{"class":76},[66,41962,32723],{"class":1234},[66,41964,99],{"class":72},[66,41966,795],{"class":102},[66,41968,2362],{"class":76},[66,41970,32677],{"class":1234},[66,41972,99],{"class":72},[66,41974,2183],{"class":102},[66,41976,313],{"class":76},[66,41978,41979],{"class":68,"line":11624},[66,41980,39914],{"class":76},[66,41982,41983],{"class":68,"line":11630},[66,41984,40552],{"class":758},[66,41986,41987,41989,41991,41993],{"class":68,"line":11651},[66,41988,32639],{"class":102},[66,41990,40559],{"class":76},[66,41992,99],{"class":72},[66,41994,39797],{"class":76},[66,41996,41997],{"class":68,"line":11657},[66,41998,40568],{"class":758},[66,42000,42001],{"class":68,"line":11671},[66,42002,40573],{"class":758},[66,42004,42005],{"class":68,"line":11677},[66,42006,40578],{"class":76},[66,42008,42009,42011,42013,42015,42017,42019,42021,42023,42025],{"class":68,"line":11704},[66,42010,40583],{"class":76},[66,42012,2353],{"class":102},[66,42014,1208],{"class":72},[66,42016,2353],{"class":102},[66,42018,1208],{"class":72},[66,42020,40245],{"class":102},[66,42022,2362],{"class":76},[66,42024,36658],{"class":102},[66,42026,39835],{"class":76},[66,42028,42029],{"class":68,"line":11713},[66,42030,39840],{"class":76},[66,42032,42033,42035,42037,42039,42041],{"class":68,"line":11719},[66,42034,40583],{"class":76},[66,42036,36658],{"class":102},[66,42038,2362],{"class":76},[66,42040,33862],{"class":102},[66,42042,39835],{"class":76},[66,42044,42045],{"class":68,"line":11727},[66,42046,39840],{"class":76},[66,42048,42049,42051,42053,42055,42057],{"class":68,"line":11732},[66,42050,40583],{"class":76},[66,42052,33862],{"class":102},[66,42054,2362],{"class":76},[66,42056,790],{"class":102},[66,42058,313],{"class":76},[66,42060,42061],{"class":68,"line":18407},[66,42062,39914],{"class":76},[66,42064,42065],{"class":68,"line":18413},[66,42066,109],{"emptyLinePlaceholder":108},[66,42068,42069],{"class":68,"line":18436},[66,42070,40644],{"class":758},[66,42072,42073],{"class":68,"line":18442},[66,42074,40649],{"class":758},[66,42076,42077,42079,42081,42083,42085],{"class":68,"line":18465},[66,42078,5222],{"class":72},[66,42080,40656],{"class":76},[66,42082,507],{"class":72},[66,42084,40661],{"class":102},[66,42086,40664],{"class":76},[66,42088,42089],{"class":68,"line":18479},[66,42090,40669],{"class":758},[66,42092,42093,42095,42097],{"class":68,"line":18499},[66,42094,6458],{"class":72},[66,42096,40676],{"class":102},[66,42098,40679],{"class":76},[66,42100,42101],{"class":68,"line":18505},[66,42102,40684],{"class":758},[66,42104,42105,42107,42109,42111,42113],{"class":68,"line":18516},[66,42106,40689],{"class":76},[66,42108,40692],{"class":1234},[66,42110,99],{"class":72},[66,42112,40697],{"class":356},[66,42114,313],{"class":76},[66,42116,42117],{"class":68,"line":18539},[66,42118,40704],{"class":758},[66,42120,42121,42123,42125,42127,42129,42131],{"class":68,"line":18561},[66,42122,40709],{"class":72},[66,42124,40712],{"class":76},[66,42126,40715],{"class":72},[66,42128,40718],{"class":72},[66,42130,40721],{"class":102},[66,42132,126],{"class":76},[66,42134,42135],{"class":68,"line":18566},[66,42136,40728],{"class":758},[66,42138,42139,42141,42143],{"class":68,"line":18572},[66,42140,40733],{"class":76},[66,42142,2183],{"class":102},[66,42144,313],{"class":76},[66,42146,42147],{"class":68,"line":18586},[66,42148,40742],{"class":758},[66,42150,42151,42153,42155],{"class":68,"line":18599},[66,42152,40747],{"class":72},[66,42154,40676],{"class":102},[66,42156,40752],{"class":76},[66,42158,42159],{"class":68,"line":18604},[66,42160,40757],{"class":758},[66,42162,42163],{"class":68,"line":18618},[66,42164,40762],{"class":758},[66,42166,42167,42169,42171,42173,42175],{"class":68,"line":18623},[66,42168,40767],{"class":76},[66,42170,2183],{"class":102},[66,42172,2362],{"class":76},[66,42174,40774],{"class":102},[66,42176,313],{"class":76},[66,42178,42179],{"class":68,"line":18629},[66,42180,40781],{"class":758},[66,42182,42183,42185,42187,42189,42191,42193],{"class":68,"line":18634},[66,42184,40709],{"class":72},[66,42186,40712],{"class":76},[66,42188,40715],{"class":72},[66,42190,40718],{"class":72},[66,42192,40721],{"class":102},[66,42194,126],{"class":76},[66,42196,42197,42199,42201],{"class":68,"line":18648},[66,42198,40733],{"class":76},[66,42200,2183],{"class":102},[66,42202,313],{"class":76},[66,42204,42205],{"class":68,"line":18653},[66,42206,109],{"emptyLinePlaceholder":108},[66,42208,42209],{"class":68,"line":18658},[66,42210,36953],{"class":758},[66,42212,42213,42215,42217],{"class":68,"line":18672},[66,42214,32595],{"class":72},[66,42216,32887],{"class":3793},[66,42218,32890],{"class":76},[66,42220,42221,42223,42225,42227],{"class":68,"line":18684},[66,42222,32895],{"class":76},[66,42224,99],{"class":72},[66,42226,32617],{"class":102},[66,42228,40830],{"class":76},[66,42230,42231,42233,42235,42237],{"class":68,"line":18689},[66,42232,32895],{"class":76},[66,42234,99],{"class":72},[66,42236,32617],{"class":102},[66,42238,40841],{"class":76},[66,42240,42241,42243,42245,42247],{"class":68,"line":18702},[66,42242,32895],{"class":76},[66,42244,99],{"class":72},[66,42246,32617],{"class":102},[66,42248,40852],{"class":76},[66,42250,42251,42253,42255,42257],{"class":68,"line":18707},[66,42252,32895],{"class":76},[66,42254,99],{"class":72},[66,42256,32617],{"class":102},[66,42258,40863],{"class":76},[66,42260,42261,42263,42265,42267],{"class":68,"line":18712},[66,42262,32895],{"class":76},[66,42264,99],{"class":72},[66,42266,32617],{"class":102},[66,42268,40874],{"class":76},[66,42270,42271,42273,42275,42277],{"class":68,"line":18717},[66,42272,32895],{"class":76},[66,42274,99],{"class":72},[66,42276,32617],{"class":102},[66,42278,40885],{"class":76},[66,42280,42281,42283],{"class":68,"line":18730},[66,42282,16557],{"class":72},[66,42284,33003],{"class":76},[66,42286,42287],{"class":68,"line":18735},[66,42288,109],{"emptyLinePlaceholder":108},[66,42290,42291],{"class":68,"line":34423},[66,42292,40900],{"class":758},[66,42294,42295,42297,42299,42301,42303],{"class":68,"line":34429},[66,42296,3373],{"class":72},[66,42298,33014],{"class":102},[66,42300,531],{"class":72},[66,42302,40911],{"class":356},[66,42304,126],{"class":76},[66,42306,42307,42309,42311,42313,42315,42317,42319,42321,42323],{"class":68,"line":34435},[66,42308,33031],{"class":76},[66,42310,99],{"class":72},[66,42312,32247],{"class":76},[66,42314,33038],{"class":356},[66,42316,3534],{"class":72},[66,42318,33043],{"class":76},[66,42320,1292],{"class":72},[66,42322,32272],{"class":356},[66,42324,313],{"class":76},[66,42326,42327,42329],{"class":68,"line":34441},[66,42328,132],{"class":102},[66,42330,32281],{"class":76},[66,42332,42333,42335,42337],{"class":68,"line":34447},[66,42334,33083],{"class":76},[66,42336,99],{"class":72},[66,42338,40948],{"class":76},[66,42340,42341,42343,42345,42347,42349,42351,42353,42355],{"class":68,"line":34458},[66,42342,132],{"class":102},[66,42344,33095],{"class":76},[66,42346,304],{"class":102},[66,42348,2362],{"class":76},[66,42350,33294],{"class":102},[66,42352,2362],{"class":76},[66,42354,33294],{"class":102},[66,42356,33108],{"class":76},[31,42358,42359],{"start":112},[34,42360,42361],{},"测试代码",[57,42363,42365],{"className":59,"code":42364,"language":61,"meta":62,"style":62},"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",[23,42366,42367,42373,42383,42393,42397,42407,42418,42422,42426,42430,42438,42454,42464,42480,42490,42504,42508,42518,42528,42538,42544,42548,42552,42560,42564,42580,42588,42592,42596,42604,42612,42616,42620,42624,42628,42634,42638,42648,42656,42664,42668,42672,42676,42684,42688,42704,42708,42712,42716,42728,42732,42744,42748,42752,42764,42768,42778,42782,42786,42798,42802,42811,42815,42819,42827,42831,42839,42843,42847,42851,42855,42859,42875,42883,42887,42891,42939,42945,42949,42959,42967,42975,42979,42983,42987,42991,42999,43003,43019,43023,43031,43039],{"__ignoreMap":62},[66,42368,42369,42371],{"class":68,"line":69},[66,42370,284],{"class":72},[66,42372,32192],{"class":76},[66,42374,42375,42377,42379,42381],{"class":68,"line":80},[66,42376,284],{"class":72},[66,42378,33208],{"class":76},[66,42380,33176],{"class":72},[66,42382,33213],{"class":76},[66,42384,42385,42387,42389,42391],{"class":68,"line":112},[66,42386,32532],{"class":72},[66,42388,33191],{"class":76},[66,42390,284],{"class":72},[66,42392,33196],{"class":76},[66,42394,42395],{"class":68,"line":129},[66,42396,35710],{"class":758},[66,42398,42399,42401,42403,42405],{"class":68,"line":138},[66,42400,32532],{"class":72},[66,42402,33161],{"class":76},[66,42404,284],{"class":72},[66,42406,33166],{"class":76},[66,42408,42409,42411,42413,42415],{"class":68,"line":227},[66,42410,32532],{"class":72},[66,42412,33706],{"class":76},[66,42414,284],{"class":72},[66,42416,42417],{"class":102}," VGG16\n",[66,42419,42420],{"class":68,"line":236},[66,42421,109],{"emptyLinePlaceholder":108},[66,42423,42424],{"class":68,"line":241},[66,42425,109],{"emptyLinePlaceholder":108},[66,42427,42428],{"class":68,"line":372},[66,42429,35739],{"class":758},[66,42431,42432,42434,42436],{"class":68,"line":377},[66,42433,33739],{"class":72},[66,42435,35746],{"class":3793},[66,42437,33745],{"class":76},[66,42439,42440,42442,42444,42446,42448,42450,42452],{"class":68,"line":392},[66,42441,35753],{"class":76},[66,42443,99],{"class":72},[66,42445,33248],{"class":76},[66,42447,33251],{"class":1234},[66,42449,99],{"class":72},[66,42451,33256],{"class":356},[66,42453,33259],{"class":76},[66,42455,42456,42458,42460,42462],{"class":68,"line":405},[66,42457,35770],{"class":1234},[66,42459,99],{"class":72},[66,42461,35775],{"class":102},[66,42463,33259],{"class":76},[66,42465,42466,42468,42470,42472,42474,42476,42478],{"class":68,"line":418},[66,42467,35782],{"class":1234},[66,42469,99],{"class":72},[66,42471,33286],{"class":76},[66,42473,33289],{"class":1234},[66,42475,99],{"class":72},[66,42477,33294],{"class":102},[66,42479,33297],{"class":76},[66,42481,42482,42484,42486,42488],{"class":68,"line":430},[66,42483,35799],{"class":1234},[66,42485,99],{"class":72},[66,42487,33269],{"class":102},[66,42489,313],{"class":76},[66,42491,42492,42494,42496,42498,42500,42502],{"class":68,"line":438},[66,42493,35810],{"class":76},[66,42495,99],{"class":72},[66,42497,33327],{"class":76},[66,42499,33330],{"class":1234},[66,42501,99],{"class":72},[66,42503,35821],{"class":76},[66,42505,42506],{"class":68,"line":465},[66,42507,35826],{"class":758},[66,42509,42510,42512,42514,42516],{"class":68,"line":1805},[66,42511,35831],{"class":1234},[66,42513,99],{"class":72},[66,42515,304],{"class":102},[66,42517,33259],{"class":76},[66,42519,42520,42522,42524,42526],{"class":68,"line":1817},[66,42521,35842],{"class":1234},[66,42523,99],{"class":72},[66,42525,33269],{"class":102},[66,42527,33259],{"class":76},[66,42529,42530,42532,42534,42536],{"class":68,"line":1822},[66,42531,35853],{"class":1234},[66,42533,99],{"class":72},[66,42535,2183],{"class":102},[66,42537,313],{"class":76},[66,42539,42540,42542],{"class":68,"line":1829},[66,42541,5907],{"class":72},[66,42543,35866],{"class":76},[66,42545,42546],{"class":68,"line":3529},[66,42547,109],{"emptyLinePlaceholder":108},[66,42549,42550],{"class":68,"line":3557},[66,42551,35875],{"class":758},[66,42553,42554,42556,42558],{"class":68,"line":3562},[66,42555,33739],{"class":72},[66,42557,35882],{"class":3793},[66,42559,35885],{"class":76},[66,42561,42562],{"class":68,"line":3579},[66,42563,35890],{"class":758},[66,42565,42566,42568,42570,42572,42574,42576,42578],{"class":68,"line":3584},[66,42567,33031],{"class":76},[66,42569,99],{"class":72},[66,42571,33038],{"class":356},[66,42573,3534],{"class":72},[66,42575,33043],{"class":76},[66,42577,1292],{"class":72},[66,42579,35907],{"class":356},[66,42581,42582,42584,42586],{"class":68,"line":3589},[66,42583,33083],{"class":76},[66,42585,99],{"class":72},[66,42587,34081],{"class":76},[66,42589,42590],{"class":68,"line":3594},[66,42591,109],{"emptyLinePlaceholder":108},[66,42593,42594],{"class":68,"line":3608},[66,42595,35924],{"class":758},[66,42597,42598,42600,42602],{"class":68,"line":3613},[66,42599,35929],{"class":76},[66,42601,99],{"class":72},[66,42603,34134],{"class":102},[66,42605,42606,42608,42610],{"class":68,"line":4401},[66,42607,35938],{"class":76},[66,42609,99],{"class":72},[66,42611,4906],{"class":102},[66,42613,42614],{"class":68,"line":4415},[66,42615,109],{"emptyLinePlaceholder":108},[66,42617,42618],{"class":68,"line":4423},[66,42619,35951],{"class":758},[66,42621,42622],{"class":68,"line":4428},[66,42623,35956],{"class":758},[66,42625,42626],{"class":68,"line":4434},[66,42627,35961],{"class":758},[66,42629,42630,42632],{"class":68,"line":4440},[66,42631,35966],{"class":72},[66,42633,34674],{"class":76},[66,42635,42636],{"class":68,"line":4445},[66,42637,35973],{"class":758},[66,42639,42640,42642,42644,42646],{"class":68,"line":9759},[66,42641,5222],{"class":72},[66,42643,35980],{"class":76},[66,42645,507],{"class":72},[66,42647,35985],{"class":76},[66,42649,42650,42652,42654],{"class":68,"line":9783},[66,42651,35990],{"class":76},[66,42653,99],{"class":72},[66,42655,35995],{"class":76},[66,42657,42658,42660,42662],{"class":68,"line":9788},[66,42659,36000],{"class":76},[66,42661,99],{"class":72},[66,42663,36005],{"class":76},[66,42665,42666],{"class":68,"line":9794},[66,42667,36010],{"class":758},[66,42669,42670],{"class":68,"line":9821},[66,42671,34665],{"class":76},[66,42673,42674],{"class":68,"line":9826},[66,42675,36019],{"class":758},[66,42677,42678,42680,42682],{"class":68,"line":9832},[66,42679,34450],{"class":76},[66,42681,99],{"class":72},[66,42683,36028],{"class":76},[66,42685,42686],{"class":68,"line":9844},[66,42687,36033],{"class":758},[66,42689,42690,42692,42694,42696,42698,42700,42702],{"class":68,"line":9856},[66,42691,34467],{"class":76},[66,42693,99],{"class":72},[66,42695,34472],{"class":76},[66,42697,34475],{"class":1234},[66,42699,99],{"class":72},[66,42701,304],{"class":102},[66,42703,313],{"class":76},[66,42705,42706],{"class":68,"line":9868},[66,42707,36054],{"class":758},[66,42709,42710],{"class":68,"line":11523},[66,42711,36059],{"class":758},[66,42713,42714],{"class":68,"line":11548},[66,42715,36064],{"class":758},[66,42717,42718,42720,42722,42724,42726],{"class":68,"line":11571},[66,42719,36069],{"class":76},[66,42721,144],{"class":72},[66,42723,34577],{"class":76},[66,42725,531],{"class":72},[66,42727,36078],{"class":76},[66,42729,42730],{"class":68,"line":11595},[66,42731,36083],{"class":758},[66,42733,42734,42736,42738,42740,42742],{"class":68,"line":11600},[66,42735,36088],{"class":76},[66,42737,144],{"class":72},[66,42739,36093],{"class":76},[66,42741,2183],{"class":102},[66,42743,313],{"class":76},[66,42745,42746],{"class":68,"line":11605},[66,42747,109],{"emptyLinePlaceholder":108},[66,42749,42750],{"class":68,"line":11610},[66,42751,36106],{"class":758},[66,42753,42754,42756,42758,42760,42762],{"class":68,"line":11619},[66,42755,36111],{"class":76},[66,42757,99],{"class":72},[66,42759,36116],{"class":76},[66,42761,2563],{"class":72},[66,42763,36121],{"class":76},[66,42765,42766],{"class":68,"line":11624},[66,42767,36126],{"class":758},[66,42769,42770,42772,42774,42776],{"class":68,"line":11630},[66,42771,395],{"class":102},[66,42773,348],{"class":76},[66,42775,36135],{"class":356},[66,42777,36138],{"class":76},[66,42779,42780],{"class":68,"line":11651},[66,42781,109],{"emptyLinePlaceholder":108},[66,42783,42784],{"class":68,"line":11657},[66,42785,36147],{"class":758},[66,42787,42788,42790,42792,42794,42796],{"class":68,"line":11671},[66,42789,3373],{"class":72},[66,42791,33014],{"class":102},[66,42793,531],{"class":72},[66,42795,33019],{"class":356},[66,42797,126],{"class":76},[66,42799,42800],{"class":68,"line":11677},[66,42801,36164],{"class":758},[66,42803,42804,42806,42808],{"class":68,"line":11704},[66,42805,33083],{"class":76},[66,42807,99],{"class":72},[66,42809,42810],{"class":76},"VGG16()\n",[66,42812,42813],{"class":68,"line":11713},[66,42814,36177],{"class":758},[66,42816,42817],{"class":68,"line":11719},[66,42818,36182],{"class":758},[66,42820,42821,42823,42825],{"class":68,"line":11727},[66,42822,36187],{"class":76},[66,42824,36190],{"class":356},[66,42826,360],{"class":76},[66,42828,42829],{"class":68,"line":11732},[66,42830,36197],{"class":758},[66,42832,42833,42835,42837],{"class":68,"line":18407},[66,42834,35810],{"class":76},[66,42836,99],{"class":72},[66,42838,36206],{"class":76},[66,42840,42841],{"class":68,"line":18413},[66,42842,36211],{"class":758},[66,42844,42845],{"class":68,"line":18436},[66,42846,36216],{"class":76},[66,42848,42849],{"class":68,"line":18442},[66,42850,109],{"emptyLinePlaceholder":108},[66,42852,42853],{"class":68,"line":18465},[66,42854,36225],{"class":758},[66,42856,42857],{"class":68,"line":18479},[66,42858,36230],{"class":758},[66,42860,42861,42863,42865,42867,42869,42871,42873],{"class":68,"line":18499},[66,42862,33031],{"class":76},[66,42864,99],{"class":72},[66,42866,33038],{"class":356},[66,42868,3534],{"class":72},[66,42870,33043],{"class":76},[66,42872,1292],{"class":72},[66,42874,35907],{"class":356},[66,42876,42877,42879,42881],{"class":68,"line":18505},[66,42878,33083],{"class":76},[66,42880,99],{"class":72},[66,42882,34081],{"class":76},[66,42884,42885],{"class":68,"line":18516},[66,42886,36259],{"class":758},[66,42888,42889],{"class":68,"line":18539},[66,42890,36264],{"class":758},[66,42892,42893,42895,42897,42899,42901,42903,42905,42907,42909,42911,42913,42915,42917,42919,42921,42923,42925,42927,42929,42931,42933,42935,42937],{"class":68,"line":18561},[66,42894,36269],{"class":76},[66,42896,99],{"class":72},[66,42898,2869],{"class":76},[66,42900,36276],{"class":356},[66,42902,2362],{"class":76},[66,42904,36281],{"class":356},[66,42906,2362],{"class":76},[66,42908,36286],{"class":356},[66,42910,2362],{"class":76},[66,42912,36291],{"class":356},[66,42914,2362],{"class":76},[66,42916,36296],{"class":356},[66,42918,2362],{"class":76},[66,42920,36301],{"class":356},[66,42922,2362],{"class":76},[66,42924,36306],{"class":356},[66,42926,2362],{"class":76},[66,42928,36311],{"class":356},[66,42930,2362],{"class":76},[66,42932,36316],{"class":356},[66,42934,2362],{"class":76},[66,42936,36321],{"class":356},[66,42938,704],{"class":76},[66,42940,42941,42943],{"class":68,"line":18566},[66,42942,35966],{"class":72},[66,42944,34674],{"class":76},[66,42946,42947],{"class":68,"line":18572},[66,42948,36334],{"class":758},[66,42950,42951,42953,42955,42957],{"class":68,"line":18586},[66,42952,5222],{"class":72},[66,42954,36341],{"class":76},[66,42956,507],{"class":72},[66,42958,35985],{"class":76},[66,42960,42961,42963,42965],{"class":68,"line":18599},[66,42962,34400],{"class":76},[66,42964,99],{"class":72},[66,42966,34405],{"class":76},[66,42968,42969,42971,42973],{"class":68,"line":18604},[66,42970,34415],{"class":76},[66,42972,99],{"class":72},[66,42974,34420],{"class":76},[66,42976,42977],{"class":68,"line":18618},[66,42978,109],{"emptyLinePlaceholder":108},[66,42980,42981],{"class":68,"line":18623},[66,42982,36370],{"class":758},[66,42984,42985],{"class":68,"line":18629},[66,42986,34665],{"class":76},[66,42988,42989],{"class":68,"line":18634},[66,42990,36379],{"class":758},[66,42992,42993,42995,42997],{"class":68,"line":18648},[66,42994,34450],{"class":76},[66,42996,99],{"class":72},[66,42998,34455],{"class":76},[66,43000,43001],{"class":68,"line":18653},[66,43002,36392],{"class":758},[66,43004,43005,43007,43009,43011,43013,43015,43017],{"class":68,"line":18658},[66,43006,34467],{"class":76},[66,43008,99],{"class":72},[66,43010,34472],{"class":76},[66,43012,34475],{"class":1234},[66,43014,99],{"class":72},[66,43016,304],{"class":102},[66,43018,313],{"class":76},[66,43020,43021],{"class":68,"line":18672},[66,43022,36413],{"class":758},[66,43024,43025,43027,43029],{"class":68,"line":18684},[66,43026,36418],{"class":76},[66,43028,99],{"class":72},[66,43030,36423],{"class":76},[66,43032,43033,43035,43037],{"class":68,"line":18689},[66,43034,36428],{"class":76},[66,43036,99],{"class":72},[66,43038,36433],{"class":76},[66,43040,43041,43043,43045,43047,43049,43051,43053,43055],{"class":68,"line":18702},[66,43042,36438],{"class":102},[66,43044,348],{"class":76},[66,43046,36443],{"class":356},[66,43048,36446],{"class":76},[66,43050,36449],{"class":356},[66,43052,2362],{"class":76},[66,43054,36454],{"class":356},[66,43056,36457],{"class":76},[484,43058,43060],{"id":43059},"_23googlenet","2.3.GoogLeNet",[23801,43062,43064],{"id":43063},"_231原理","2.3.1.原理",[31,43066,43067],{},[34,43068,43069],{},"网络结构",[19,43071,43072],{},[3304,43073],{"alt":62,"src":43074},"\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,43076,43077],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,43079,43080],{},[3304,43081],{"alt":62,"src":43082},"\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,43084,43085],{},[3304,43086],{"alt":62,"src":43087},"\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,43089,43090],{},[3304,43091],{"alt":62,"src":43092},"\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",[31,43094,43095],{"start":80},[34,43096,43097],{},"1x1卷积的优点",[19,43099,43100],{},[3304,43101],{"alt":62,"src":43102},"\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",[31,43104,43105],{"start":112},[34,43106,43107],{},"全局平均池化层优点",[19,43109,43110],{},[3304,43111],{"alt":62,"src":43112},"\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,43114,43115],{},[3304,43116],{"alt":62,"src":43117},"\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",[31,43119,43120],{"start":129},[34,43121,43122],{},"参数详细描述",[19,43124,43125],{},[3304,43126],{"alt":62,"src":43127},"\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,43129,43130],{},[3304,43131],{"alt":62,"src":43132},"\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,43134,43135],{},[3304,43136],{"alt":62,"src":43137},"\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,43139,43140],{},[3304,43141],{"alt":62,"src":43142},"\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,43144,43145],{},[3304,43146],{"alt":62,"src":43147},"\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,43149,43150],{},[3304,43151],{"alt":62,"src":43152},"\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,43154,43155],{},[3304,43156],{"alt":62,"src":43157},"\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,43159,43160],{},[3304,43161],{"alt":62,"src":43162},"\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,43164,43165],{},[3304,43166],{"alt":62,"src":43167},"\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,43169,43170],{},[3304,43171],{"alt":62,"src":43172},"\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,43174,43175],{},[3304,43176],{"alt":62,"src":43177},"\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,43179,43180],{},[3304,43181],{"alt":62,"src":43182},"\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,43184,43185],{},[3304,43186],{"alt":62,"src":43187},"\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,43189,43190],{},[3304,43191],{"alt":62,"src":43192},"\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,43194,43195],{},[3304,43196],{"alt":62,"src":43197},"\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,43199,43200],{},[3304,43201],{"alt":62,"src":43202},"\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,43204,43205],{},[3304,43206],{"alt":62,"src":43207},"\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,43209,43210],{},[3304,43211],{"alt":62,"src":43212},"\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,43214,43215],{},[3304,43216],{"alt":62,"src":43217},"\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,43219,43220],{},[3304,43221],{"alt":62,"src":43222},"\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,43224,43225],{},[3304,43226],{"alt":62,"src":43227},"\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",[23801,43229,43231],{"id":43230},"_232代码实现","2.3.2.代码实现",[31,43233,43234],{},[34,43235,32506],{},[19,43237,43238],{},"根据原理一步一步搭建即可",[57,43240,43242],{"className":59,"code":43241,"language":61,"meta":62,"style":62},"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",[23,43243,43244,43250,43260,43270,43274,43291,43300,43315,43325,43330,43363,43368,43405,43452,43457,43493,43540,43545,43550,43585,43617,43621,43629,43645,43669,43694,43715,43720,43735,43739,43743,43748,43765,43770,43779,43794,43805,43849,43853,43881,43885,43896,43924,43928,43965,43969,43997,44001,44012,44048,44080,44108,44112,44123,44157,44189,44221,44254,44288,44316,44320,44331,44364,44396,44410,44414,44427,44431,44436,44448,44456,44478,44483,44488,44493,44498,44503,44508,44522,44530,44539,44552,44567,44576,44580,44588,44599,44610,44621,44632,44643,44649,44653,44658,44670,44690,44699],{"__ignoreMap":62},[66,43245,43246,43248],{"class":68,"line":69},[66,43247,284],{"class":72},[66,43249,32192],{"class":76},[66,43251,43252,43254,43256,43258],{"class":68,"line":80},[66,43253,32532],{"class":72},[66,43255,32535],{"class":76},[66,43257,284],{"class":72},[66,43259,32540],{"class":76},[66,43261,43262,43264,43266,43268],{"class":68,"line":112},[66,43263,32532],{"class":72},[66,43265,32552],{"class":76},[66,43267,284],{"class":72},[66,43269,32557],{"class":76},[66,43271,43272],{"class":68,"line":129},[66,43273,109],{"emptyLinePlaceholder":108},[66,43275,43276,43278,43281,43283,43285,43287,43289],{"class":68,"line":138},[66,43277,16499],{"class":72},[66,43279,43280],{"class":3793}," Inception",[66,43282,348],{"class":76},[66,43284,32573],{"class":3793},[66,43286,2537],{"class":76},[66,43288,32578],{"class":3793},[66,43290,522],{"class":76},[66,43292,43293,43295,43297],{"class":68,"line":227},[66,43294,32595],{"class":72},[66,43296,32598],{"class":102},[66,43298,43299],{"class":76},"(self,in_channels,c1,c2,c3,c4):\n",[66,43301,43302,43304,43307,43309,43311,43313],{"class":68,"line":236},[66,43303,32611],{"class":102},[66,43305,43306],{"class":76},"(Inception,",[66,43308,32617],{"class":102},[66,43310,32620],{"class":76},[66,43312,32623],{"class":102},[66,43314,1253],{"class":76},[66,43316,43317,43319,43321,43323],{"class":68,"line":241},[66,43318,32639],{"class":102},[66,43320,36559],{"class":76},[66,43322,99],{"class":72},[66,43324,36564],{"class":76},[66,43326,43327],{"class":68,"line":372},[66,43328,43329],{"class":758},"        # 路线1：定义1*1卷积\n",[66,43331,43332,43334,43337,43339,43341,43343,43345,43348,43350,43352,43355,43357,43359,43361],{"class":68,"line":377},[66,43333,32639],{"class":102},[66,43335,43336],{"class":76},".p1_1",[66,43338,99],{"class":72},[66,43340,32647],{"class":76},[66,43342,32650],{"class":1234},[66,43344,99],{"class":72},[66,43346,43347],{"class":76},"in_channels,",[66,43349,32659],{"class":1234},[66,43351,99],{"class":72},[66,43353,43354],{"class":76},"c1,",[66,43356,32668],{"class":1234},[66,43358,99],{"class":72},[66,43360,304],{"class":102},[66,43362,313],{"class":76},[66,43364,43365],{"class":68,"line":392},[66,43366,43367],{"class":758},"        # 路线2：定义1*1卷积和3*3\n",[66,43369,43370,43372,43375,43377,43379,43381,43383,43385,43387,43389,43392,43394,43397,43399,43401,43403],{"class":68,"line":405},[66,43371,32639],{"class":102},[66,43373,43374],{"class":76},".p2_1",[66,43376,99],{"class":72},[66,43378,32647],{"class":76},[66,43380,32650],{"class":1234},[66,43382,99],{"class":72},[66,43384,43347],{"class":76},[66,43386,32659],{"class":1234},[66,43388,99],{"class":72},[66,43390,43391],{"class":76},"c2[",[66,43393,2183],{"class":102},[66,43395,43396],{"class":76},"],",[66,43398,32668],{"class":1234},[66,43400,99],{"class":72},[66,43402,304],{"class":102},[66,43404,313],{"class":76},[66,43406,43407,43409,43412,43414,43416,43418,43420,43422,43424,43426,43428,43430,43432,43434,43436,43438,43440,43442,43444,43446,43448,43450],{"class":68,"line":418},[66,43408,32639],{"class":102},[66,43410,43411],{"class":76},".p2_2",[66,43413,99],{"class":72},[66,43415,32647],{"class":76},[66,43417,32650],{"class":1234},[66,43419,99],{"class":72},[66,43421,43391],{"class":76},[66,43423,2183],{"class":102},[66,43425,43396],{"class":76},[66,43427,32659],{"class":1234},[66,43429,99],{"class":72},[66,43431,43391],{"class":76},[66,43433,304],{"class":102},[66,43435,43396],{"class":76},[66,43437,32668],{"class":1234},[66,43439,99],{"class":72},[66,43441,1520],{"class":102},[66,43443,2362],{"class":76},[66,43445,32677],{"class":1234},[66,43447,99],{"class":72},[66,43449,304],{"class":102},[66,43451,313],{"class":76},[66,43453,43454],{"class":68,"line":430},[66,43455,43456],{"class":758},"        # 路线3：定义1*1卷积和5*5\n",[66,43458,43459,43461,43464,43466,43468,43470,43472,43474,43476,43478,43481,43483,43485,43487,43489,43491],{"class":68,"line":438},[66,43460,32639],{"class":102},[66,43462,43463],{"class":76},".p3_1",[66,43465,99],{"class":72},[66,43467,32647],{"class":76},[66,43469,32650],{"class":1234},[66,43471,99],{"class":72},[66,43473,43347],{"class":76},[66,43475,32659],{"class":1234},[66,43477,99],{"class":72},[66,43479,43480],{"class":76},"c3[",[66,43482,2183],{"class":102},[66,43484,43396],{"class":76},[66,43486,32668],{"class":1234},[66,43488,99],{"class":72},[66,43490,304],{"class":102},[66,43492,313],{"class":76},[66,43494,43495,43497,43500,43502,43504,43506,43508,43510,43512,43514,43516,43518,43520,43522,43524,43526,43528,43530,43532,43534,43536,43538],{"class":68,"line":465},[66,43496,32639],{"class":102},[66,43498,43499],{"class":76},".p3_2",[66,43501,99],{"class":72},[66,43503,32647],{"class":76},[66,43505,32650],{"class":1234},[66,43507,99],{"class":72},[66,43509,43480],{"class":76},[66,43511,2183],{"class":102},[66,43513,43396],{"class":76},[66,43515,32659],{"class":1234},[66,43517,99],{"class":72},[66,43519,43480],{"class":76},[66,43521,304],{"class":102},[66,43523,43396],{"class":76},[66,43525,32668],{"class":1234},[66,43527,99],{"class":72},[66,43529,752],{"class":102},[66,43531,2362],{"class":76},[66,43533,32677],{"class":1234},[66,43535,99],{"class":72},[66,43537,795],{"class":102},[66,43539,313],{"class":76},[66,43541,43542],{"class":68,"line":1805},[66,43543,43544],{"class":758},"        # 路线4：定义3*3最大池化和1*1卷积\n",[66,43546,43547],{"class":68,"line":1817},[66,43548,43549],{"class":758},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[66,43551,43552,43554,43557,43559,43561,43563,43565,43567,43569,43571,43573,43575,43577,43579,43581,43583],{"class":68,"line":1822},[66,43553,32639],{"class":102},[66,43555,43556],{"class":76},".p4_1",[66,43558,99],{"class":72},[66,43560,36617],{"class":76},[66,43562,32668],{"class":1234},[66,43564,99],{"class":72},[66,43566,1520],{"class":102},[66,43568,2362],{"class":76},[66,43570,32723],{"class":1234},[66,43572,99],{"class":72},[66,43574,304],{"class":102},[66,43576,2362],{"class":76},[66,43578,32677],{"class":1234},[66,43580,99],{"class":72},[66,43582,304],{"class":102},[66,43584,313],{"class":76},[66,43586,43587,43589,43592,43594,43596,43598,43600,43602,43604,43606,43609,43611,43613,43615],{"class":68,"line":1829},[66,43588,32639],{"class":102},[66,43590,43591],{"class":76},".p4_2",[66,43593,99],{"class":72},[66,43595,32647],{"class":76},[66,43597,32650],{"class":1234},[66,43599,99],{"class":72},[66,43601,43347],{"class":76},[66,43603,32659],{"class":1234},[66,43605,99],{"class":72},[66,43607,43608],{"class":76},"c4,",[66,43610,32668],{"class":1234},[66,43612,99],{"class":72},[66,43614,304],{"class":102},[66,43616,313],{"class":76},[66,43618,43619],{"class":68,"line":3529},[66,43620,109],{"emptyLinePlaceholder":108},[66,43622,43623,43625,43627],{"class":68,"line":3557},[66,43624,32595],{"class":72},[66,43626,32887],{"class":3793},[66,43628,32890],{"class":76},[66,43630,43631,43634,43636,43638,43640,43642],{"class":68,"line":3562},[66,43632,43633],{"class":76},"        p1",[66,43635,99],{"class":72},[66,43637,32617],{"class":102},[66,43639,36972],{"class":76},[66,43641,32617],{"class":102},[66,43643,43644],{"class":76},".p1_1(x))\n",[66,43646,43647,43649,43651,43653,43655,43657,43660,43662,43664,43666],{"class":68,"line":3579},[66,43648,8896],{"class":76},[66,43650,99],{"class":72},[66,43652,32617],{"class":102},[66,43654,36972],{"class":76},[66,43656,32617],{"class":102},[66,43658,43659],{"class":76},".p2_2(",[66,43661,32617],{"class":102},[66,43663,36972],{"class":76},[66,43665,32617],{"class":102},[66,43667,43668],{"class":76},".p2_1(x))))\n",[66,43670,43671,43674,43676,43678,43680,43682,43685,43687,43689,43691],{"class":68,"line":3584},[66,43672,43673],{"class":76},"        p3",[66,43675,99],{"class":72},[66,43677,32617],{"class":102},[66,43679,36972],{"class":76},[66,43681,32617],{"class":102},[66,43683,43684],{"class":76},".p3_2(",[66,43686,32617],{"class":102},[66,43688,36972],{"class":76},[66,43690,32617],{"class":102},[66,43692,43693],{"class":76},".p3_1(x))))\n",[66,43695,43696,43699,43701,43703,43705,43707,43710,43712],{"class":68,"line":3589},[66,43697,43698],{"class":76},"        p4",[66,43700,99],{"class":72},[66,43702,32617],{"class":102},[66,43704,36972],{"class":76},[66,43706,32617],{"class":102},[66,43708,43709],{"class":76},".p4_2(",[66,43711,32617],{"class":102},[66,43713,43714],{"class":76},".p4_1(x)))\n",[66,43716,43717],{"class":68,"line":3594},[66,43718,43719],{"class":758},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[66,43721,43722,43724,43727,43729,43731,43733],{"class":68,"line":3608},[66,43723,16557],{"class":72},[66,43725,43726],{"class":76}," torch.cat((p1,p2,p3,p4),",[66,43728,34475],{"class":1234},[66,43730,99],{"class":72},[66,43732,304],{"class":102},[66,43734,313],{"class":76},[66,43736,43737],{"class":68,"line":3613},[66,43738,109],{"emptyLinePlaceholder":108},[66,43740,43741],{"class":68,"line":4401},[66,43742,109],{"emptyLinePlaceholder":108},[66,43744,43745],{"class":68,"line":4415},[66,43746,43747],{"class":758},"# 搭建GoogLeNet网络\n",[66,43749,43750,43752,43755,43757,43759,43761,43763],{"class":68,"line":4423},[66,43751,16499],{"class":72},[66,43753,43754],{"class":3793}," GoogLeNet",[66,43756,348],{"class":76},[66,43758,32573],{"class":3793},[66,43760,2537],{"class":76},[66,43762,32578],{"class":3793},[66,43764,522],{"class":76},[66,43766,43767],{"class":68,"line":4428},[66,43768,43769],{"class":758},"    # 必须把Inception导入到里边\n",[66,43771,43772,43774,43776],{"class":68,"line":4434},[66,43773,32595],{"class":72},[66,43775,32598],{"class":102},[66,43777,43778],{"class":76},"(self,Inception):\n",[66,43780,43781,43783,43786,43788,43790,43792],{"class":68,"line":4440},[66,43782,32611],{"class":102},[66,43784,43785],{"class":76},"(GoogLeNet,",[66,43787,32617],{"class":102},[66,43789,32620],{"class":76},[66,43791,32623],{"class":102},[66,43793,1253],{"class":76},[66,43795,43796,43798,43801,43803],{"class":68,"line":4445},[66,43797,32639],{"class":102},[66,43799,43800],{"class":76},".b1",[66,43802,99],{"class":72},[66,43804,39797],{"class":76},[66,43806,43807,43809,43811,43813,43815,43817,43819,43821,43823,43825,43827,43829,43831,43833,43835,43837,43839,43841,43843,43845,43847],{"class":68,"line":9759},[66,43808,39802],{"class":76},[66,43810,32650],{"class":1234},[66,43812,99],{"class":72},[66,43814,304],{"class":102},[66,43816,2362],{"class":76},[66,43818,32659],{"class":1234},[66,43820,99],{"class":72},[66,43822,2195],{"class":102},[66,43824,2362],{"class":76},[66,43826,32668],{"class":1234},[66,43828,99],{"class":72},[66,43830,2353],{"class":102},[66,43832,2362],{"class":76},[66,43834,32723],{"class":1234},[66,43836,99],{"class":72},[66,43838,795],{"class":102},[66,43840,2362],{"class":76},[66,43842,32677],{"class":1234},[66,43844,99],{"class":72},[66,43846,1520],{"class":102},[66,43848,39835],{"class":76},[66,43850,43851],{"class":68,"line":9783},[66,43852,39840],{"class":76},[66,43854,43855,43857,43859,43861,43863,43865,43867,43869,43871,43873,43875,43877,43879],{"class":68,"line":9788},[66,43856,39885],{"class":76},[66,43858,32668],{"class":1234},[66,43860,99],{"class":72},[66,43862,1520],{"class":102},[66,43864,2362],{"class":76},[66,43866,32723],{"class":1234},[66,43868,99],{"class":72},[66,43870,795],{"class":102},[66,43872,2362],{"class":76},[66,43874,32677],{"class":1234},[66,43876,99],{"class":72},[66,43878,304],{"class":102},[66,43880,313],{"class":76},[66,43882,43883],{"class":68,"line":9794},[66,43884,39914],{"class":76},[66,43886,43887,43889,43892,43894],{"class":68,"line":9821},[66,43888,32639],{"class":102},[66,43890,43891],{"class":76},".b2",[66,43893,99],{"class":72},[66,43895,39797],{"class":76},[66,43897,43898,43900,43902,43904,43906,43908,43910,43912,43914,43916,43918,43920,43922],{"class":68,"line":9826},[66,43899,39802],{"class":76},[66,43901,32650],{"class":1234},[66,43903,99],{"class":72},[66,43905,2195],{"class":102},[66,43907,2362],{"class":76},[66,43909,32659],{"class":1234},[66,43911,99],{"class":72},[66,43913,2195],{"class":102},[66,43915,2362],{"class":76},[66,43917,32668],{"class":1234},[66,43919,99],{"class":72},[66,43921,304],{"class":102},[66,43923,39835],{"class":76},[66,43925,43926],{"class":68,"line":9832},[66,43927,39840],{"class":76},[66,43929,43930,43932,43934,43936,43938,43940,43942,43944,43947,43949,43951,43953,43955,43957,43959,43961,43963],{"class":68,"line":9844},[66,43931,39802],{"class":76},[66,43933,32650],{"class":1234},[66,43935,99],{"class":72},[66,43937,2195],{"class":102},[66,43939,2362],{"class":76},[66,43941,32659],{"class":1234},[66,43943,99],{"class":72},[66,43945,43946],{"class":102},"192",[66,43948,2362],{"class":76},[66,43950,32668],{"class":1234},[66,43952,99],{"class":72},[66,43954,1520],{"class":102},[66,43956,2362],{"class":76},[66,43958,32677],{"class":1234},[66,43960,99],{"class":72},[66,43962,304],{"class":102},[66,43964,39835],{"class":76},[66,43966,43967],{"class":68,"line":9856},[66,43968,39840],{"class":76},[66,43970,43971,43973,43975,43977,43979,43981,43983,43985,43987,43989,43991,43993,43995],{"class":68,"line":9868},[66,43972,39885],{"class":76},[66,43974,32668],{"class":1234},[66,43976,99],{"class":72},[66,43978,1520],{"class":102},[66,43980,2362],{"class":76},[66,43982,32723],{"class":1234},[66,43984,99],{"class":72},[66,43986,795],{"class":102},[66,43988,2362],{"class":76},[66,43990,32677],{"class":1234},[66,43992,99],{"class":72},[66,43994,304],{"class":102},[66,43996,313],{"class":76},[66,43998,43999],{"class":68,"line":11523},[66,44000,39914],{"class":76},[66,44002,44003,44005,44008,44010],{"class":68,"line":11548},[66,44004,32639],{"class":102},[66,44006,44007],{"class":76},".b3",[66,44009,99],{"class":72},[66,44011,39797],{"class":76},[66,44013,44014,44017,44019,44021,44023,44026,44028,44030,44032,44035,44037,44039,44041,44044,44046],{"class":68,"line":11571},[66,44015,44016],{"class":76},"            Inception(",[66,44018,43946],{"class":102},[66,44020,2362],{"class":76},[66,44022,2195],{"class":102},[66,44024,44025],{"class":76},",(",[66,44027,2201],{"class":102},[66,44029,2362],{"class":76},[66,44031,33862],{"class":102},[66,44033,44034],{"class":76},"),(",[66,44036,2580],{"class":102},[66,44038,2362],{"class":76},[66,44040,2189],{"class":102},[66,44042,44043],{"class":76},"),",[66,44045,2189],{"class":102},[66,44047,39835],{"class":76},[66,44049,44050,44052,44054,44056,44058,44060,44062,44064,44066,44068,44070,44072,44074,44076,44078],{"class":68,"line":11595},[66,44051,44016],{"class":76},[66,44053,36658],{"class":102},[66,44055,2362],{"class":76},[66,44057,33862],{"class":102},[66,44059,44025],{"class":76},[66,44061,33862],{"class":102},[66,44063,2362],{"class":76},[66,44065,43946],{"class":102},[66,44067,44034],{"class":76},[66,44069,2189],{"class":102},[66,44071,2362],{"class":76},[66,44073,2201],{"class":102},[66,44075,44043],{"class":76},[66,44077,2195],{"class":102},[66,44079,39835],{"class":76},[66,44081,44082,44084,44086,44088,44090,44092,44094,44096,44098,44100,44102,44104,44106],{"class":68,"line":11600},[66,44083,39885],{"class":76},[66,44085,32668],{"class":1234},[66,44087,99],{"class":72},[66,44089,1520],{"class":102},[66,44091,2362],{"class":76},[66,44093,32723],{"class":1234},[66,44095,99],{"class":72},[66,44097,795],{"class":102},[66,44099,2362],{"class":76},[66,44101,32677],{"class":1234},[66,44103,99],{"class":72},[66,44105,304],{"class":102},[66,44107,313],{"class":76},[66,44109,44110],{"class":68,"line":11605},[66,44111,39914],{"class":76},[66,44113,44114,44116,44119,44121],{"class":68,"line":11610},[66,44115,32639],{"class":102},[66,44117,44118],{"class":76},".b4",[66,44120,99],{"class":72},[66,44122,39797],{"class":76},[66,44124,44125,44127,44130,44132,44134,44136,44138,44140,44143,44145,44147,44149,44151,44153,44155],{"class":68,"line":11619},[66,44126,44016],{"class":76},[66,44128,44129],{"class":102},"480",[66,44131,2362],{"class":76},[66,44133,43946],{"class":102},[66,44135,44025],{"class":76},[66,44137,2201],{"class":102},[66,44139,2362],{"class":76},[66,44141,44142],{"class":102},"208",[66,44144,44034],{"class":76},[66,44146,2580],{"class":102},[66,44148,2362],{"class":76},[66,44150,2586],{"class":102},[66,44152,44043],{"class":76},[66,44154,2195],{"class":102},[66,44156,39835],{"class":76},[66,44158,44159,44161,44163,44165,44167,44169,44171,44173,44175,44177,44179,44181,44183,44185,44187],{"class":68,"line":11624},[66,44160,44016],{"class":76},[66,44162,40245],{"class":102},[66,44164,2362],{"class":76},[66,44166,22851],{"class":102},[66,44168,44025],{"class":76},[66,44170,2597],{"class":102},[66,44172,2362],{"class":76},[66,44174,33294],{"class":102},[66,44176,44034],{"class":76},[66,44178,2779],{"class":102},[66,44180,2362],{"class":76},[66,44182,2195],{"class":102},[66,44184,44043],{"class":76},[66,44186,2195],{"class":102},[66,44188,39835],{"class":76},[66,44190,44191,44193,44195,44197,44199,44201,44203,44205,44207,44209,44211,44213,44215,44217,44219],{"class":68,"line":11630},[66,44192,44016],{"class":76},[66,44194,40245],{"class":102},[66,44196,2362],{"class":76},[66,44198,33862],{"class":102},[66,44200,44025],{"class":76},[66,44202,33862],{"class":102},[66,44204,2362],{"class":76},[66,44206,36658],{"class":102},[66,44208,44034],{"class":76},[66,44210,2779],{"class":102},[66,44212,2362],{"class":76},[66,44214,2195],{"class":102},[66,44216,44043],{"class":76},[66,44218,2195],{"class":102},[66,44220,39835],{"class":76},[66,44222,44223,44225,44227,44229,44231,44233,44235,44237,44240,44242,44244,44246,44248,44250,44252],{"class":68,"line":11651},[66,44224,44016],{"class":76},[66,44226,40245],{"class":102},[66,44228,2362],{"class":76},[66,44230,2597],{"class":102},[66,44232,44025],{"class":76},[66,44234,33862],{"class":102},[66,44236,2362],{"class":76},[66,44238,44239],{"class":102},"288",[66,44241,44034],{"class":76},[66,44243,2189],{"class":102},[66,44245,2362],{"class":76},[66,44247,2195],{"class":102},[66,44249,44043],{"class":76},[66,44251,2195],{"class":102},[66,44253,39835],{"class":76},[66,44255,44256,44258,44261,44263,44265,44267,44269,44271,44274,44276,44278,44280,44282,44284,44286],{"class":68,"line":11657},[66,44257,44016],{"class":76},[66,44259,44260],{"class":102},"528",[66,44262,2362],{"class":76},[66,44264,36658],{"class":102},[66,44266,44025],{"class":76},[66,44268,22851],{"class":102},[66,44270,2362],{"class":76},[66,44272,44273],{"class":102},"320",[66,44275,44034],{"class":76},[66,44277,2189],{"class":102},[66,44279,2362],{"class":76},[66,44281,33862],{"class":102},[66,44283,44043],{"class":76},[66,44285,33862],{"class":102},[66,44287,39835],{"class":76},[66,44289,44290,44292,44294,44296,44298,44300,44302,44304,44306,44308,44310,44312,44314],{"class":68,"line":11671},[66,44291,39885],{"class":76},[66,44293,32668],{"class":1234},[66,44295,99],{"class":72},[66,44297,1520],{"class":102},[66,44299,2362],{"class":76},[66,44301,32723],{"class":1234},[66,44303,99],{"class":72},[66,44305,795],{"class":102},[66,44307,2362],{"class":76},[66,44309,32677],{"class":1234},[66,44311,99],{"class":72},[66,44313,304],{"class":102},[66,44315,313],{"class":76},[66,44317,44318],{"class":68,"line":11677},[66,44319,39914],{"class":76},[66,44321,44322,44324,44327,44329],{"class":68,"line":11704},[66,44323,32639],{"class":102},[66,44325,44326],{"class":76},".b5",[66,44328,99],{"class":72},[66,44330,39797],{"class":76},[66,44332,44333,44335,44338,44340,44342,44344,44346,44348,44350,44352,44354,44356,44358,44360,44362],{"class":68,"line":11713},[66,44334,44016],{"class":76},[66,44336,44337],{"class":102},"832",[66,44339,2362],{"class":76},[66,44341,36658],{"class":102},[66,44343,44025],{"class":76},[66,44345,22851],{"class":102},[66,44347,2362],{"class":76},[66,44349,44273],{"class":102},[66,44351,44034],{"class":76},[66,44353,2189],{"class":102},[66,44355,2362],{"class":76},[66,44357,33862],{"class":102},[66,44359,44043],{"class":76},[66,44361,33862],{"class":102},[66,44363,39835],{"class":76},[66,44365,44366,44368,44370,44372,44374,44376,44378,44380,44382,44384,44386,44388,44390,44392,44394],{"class":68,"line":11719},[66,44367,44016],{"class":76},[66,44369,44337],{"class":102},[66,44371,2362],{"class":76},[66,44373,36728],{"class":102},[66,44375,44025],{"class":76},[66,44377,43946],{"class":102},[66,44379,2362],{"class":76},[66,44381,36728],{"class":102},[66,44383,44034],{"class":76},[66,44385,2586],{"class":102},[66,44387,2362],{"class":76},[66,44389,33862],{"class":102},[66,44391,44043],{"class":76},[66,44393,33862],{"class":102},[66,44395,39835],{"class":76},[66,44397,44398,44401,44403,44405,44407],{"class":68,"line":11727},[66,44399,44400],{"class":76},"            nn.AdaptiveAvgPool2d((",[66,44402,304],{"class":102},[66,44404,2362],{"class":76},[66,44406,304],{"class":102},[66,44408,44409],{"class":76},")),\n",[66,44411,44412],{"class":68,"line":11732},[66,44413,40578],{"class":76},[66,44415,44416,44418,44421,44423,44425],{"class":68,"line":18407},[66,44417,40583],{"class":76},[66,44419,44420],{"class":102},"1024",[66,44422,2362],{"class":76},[66,44424,790],{"class":102},[66,44426,313],{"class":76},[66,44428,44429],{"class":68,"line":18413},[66,44430,39914],{"class":76},[66,44432,44433],{"class":68,"line":18436},[66,44434,44435],{"class":758},"        # 对模型参数初始化\n",[66,44437,44438,44440,44442,44444,44446],{"class":68,"line":18442},[66,44439,5222],{"class":72},[66,44441,40656],{"class":76},[66,44443,507],{"class":72},[66,44445,40661],{"class":102},[66,44447,40664],{"class":76},[66,44449,44450,44452,44454],{"class":68,"line":18465},[66,44451,6458],{"class":72},[66,44453,40676],{"class":102},[66,44455,40679],{"class":76},[66,44457,44458,44460,44463,44465,44468,44470,44472,44474,44476],{"class":68,"line":18479},[66,44459,40689],{"class":76},[66,44461,44462],{"class":1234},"mode",[66,44464,99],{"class":72},[66,44466,44467],{"class":356},"'fan_out'",[66,44469,2362],{"class":76},[66,44471,40692],{"class":1234},[66,44473,99],{"class":72},[66,44475,40697],{"class":356},[66,44477,313],{"class":76},[66,44479,44480],{"class":68,"line":18499},[66,44481,44482],{"class":758},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[66,44484,44485],{"class":68,"line":18505},[66,44486,44487],{"class":758},"                # ② mode = 'fan_out'决定使用的fan值：\n",[66,44489,44490],{"class":68,"line":18516},[66,44491,44492],{"class":758},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[66,44494,44495],{"class":68,"line":18539},[66,44496,44497],{"class":758},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[66,44499,44500],{"class":68,"line":18561},[66,44501,44502],{"class":758},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[66,44504,44505],{"class":68,"line":18566},[66,44506,44507],{"class":758},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[66,44509,44510,44512,44514,44516,44518,44520],{"class":68,"line":18572},[66,44511,40709],{"class":72},[66,44513,40712],{"class":76},[66,44515,40715],{"class":72},[66,44517,40718],{"class":72},[66,44519,40721],{"class":102},[66,44521,126],{"class":76},[66,44523,44524,44526,44528],{"class":68,"line":18586},[66,44525,40733],{"class":76},[66,44527,2183],{"class":102},[66,44529,313],{"class":76},[66,44531,44532,44535,44537],{"class":68,"line":18599},[66,44533,44534],{"class":72},"                elif",[66,44536,40676],{"class":102},[66,44538,40752],{"class":76},[66,44540,44541,44544,44546,44548,44550],{"class":68,"line":18604},[66,44542,44543],{"class":76},"                    nn.init.normal_(m.weight,",[66,44545,2183],{"class":102},[66,44547,2362],{"class":76},[66,44549,40774],{"class":102},[66,44551,313],{"class":76},[66,44553,44554,44557,44559,44561,44563,44565],{"class":68,"line":18618},[66,44555,44556],{"class":72},"                    if",[66,44558,40712],{"class":76},[66,44560,40715],{"class":72},[66,44562,40718],{"class":72},[66,44564,40721],{"class":102},[66,44566,126],{"class":76},[66,44568,44569,44572,44574],{"class":68,"line":18623},[66,44570,44571],{"class":76},"                        nn.init.constant_(m.bias,",[66,44573,2183],{"class":102},[66,44575,313],{"class":76},[66,44577,44578],{"class":68,"line":18629},[66,44579,36953],{"class":758},[66,44581,44582,44584,44586],{"class":68,"line":18634},[66,44583,32595],{"class":72},[66,44585,32887],{"class":3793},[66,44587,32890],{"class":76},[66,44589,44590,44592,44594,44596],{"class":68,"line":18648},[66,44591,32895],{"class":76},[66,44593,99],{"class":72},[66,44595,32617],{"class":102},[66,44597,44598],{"class":76},".b1(x)\n",[66,44600,44601,44603,44605,44607],{"class":68,"line":18653},[66,44602,32895],{"class":76},[66,44604,99],{"class":72},[66,44606,32617],{"class":102},[66,44608,44609],{"class":76},".b2(x)\n",[66,44611,44612,44614,44616,44618],{"class":68,"line":18658},[66,44613,32895],{"class":76},[66,44615,99],{"class":72},[66,44617,32617],{"class":102},[66,44619,44620],{"class":76},".b3(x)\n",[66,44622,44623,44625,44627,44629],{"class":68,"line":18672},[66,44624,32895],{"class":76},[66,44626,99],{"class":72},[66,44628,32617],{"class":102},[66,44630,44631],{"class":76},".b4(x)\n",[66,44633,44634,44636,44638,44640],{"class":68,"line":18684},[66,44635,32895],{"class":76},[66,44637,99],{"class":72},[66,44639,32617],{"class":102},[66,44641,44642],{"class":76},".b5(x)\n",[66,44644,44645,44647],{"class":68,"line":18689},[66,44646,16557],{"class":72},[66,44648,33003],{"class":76},[66,44650,44651],{"class":68,"line":18702},[66,44652,109],{"emptyLinePlaceholder":108},[66,44654,44655],{"class":68,"line":18707},[66,44656,44657],{"class":758},"# 模型展示\n",[66,44659,44660,44662,44664,44666,44668],{"class":68,"line":18712},[66,44661,3373],{"class":72},[66,44663,33014],{"class":102},[66,44665,531],{"class":72},[66,44667,33019],{"class":356},[66,44669,126],{"class":76},[66,44671,44672,44674,44676,44678,44680,44682,44684,44686,44688],{"class":68,"line":18717},[66,44673,33031],{"class":76},[66,44675,99],{"class":72},[66,44677,32247],{"class":76},[66,44679,33038],{"class":356},[66,44681,3534],{"class":72},[66,44683,33043],{"class":76},[66,44685,1292],{"class":72},[66,44687,32272],{"class":356},[66,44689,313],{"class":76},[66,44691,44692,44694,44696],{"class":68,"line":18730},[66,44693,33083],{"class":76},[66,44695,99],{"class":72},[66,44697,44698],{"class":76},"GoogLeNet(Inception).to(device)\n",[66,44700,44701,44703,44705,44707,44709,44711,44713,44715],{"class":68,"line":18735},[66,44702,132],{"class":102},[66,44704,33095],{"class":76},[66,44706,304],{"class":102},[66,44708,2362],{"class":76},[66,44710,33294],{"class":102},[66,44712,2362],{"class":76},[66,44714,33294],{"class":102},[66,44716,33108],{"class":76},[31,44718,44719],{"start":80},[34,44720,40971],{},[57,44722,44724],{"className":59,"code":44723,"language":61,"meta":62,"style":62},"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",[23,44725,44726,44732,44738,44748,44754,44764,44774,44784,44794,44804,44808,44819,44829,44833,44837,44841,44849,44861,44871,44887,44897,44929,44943,44953,44963,44967,44977,44991,45001,45011,45021,45027,45031,45035,45039,45043,45047,45055,45075,45079,45083,45087,45091,45095,45111,45115,45119,45127,45131,45135,45143,45147,45151,45155,45163,45167,45171,45175,45179,45187,45191,45199,45203,45211,45215,45223,45227,45235,45239,45243,45251,45255,45259,45263,45275,45299,45313,45317,45321,45325,45333,45337,45345,45349,45357,45361,45369,45373,45381,45385,45393,45397,45409,45413,45421,45425,45433,45437,45441,45445,45449,45457,45461,45477,45481,45489,45493,45497,45501,45505,45509,45513,45517,45533,45537,45549,45553,45565,45569,45581,45585,45593,45597,45605,45609,45613,45617,45623,45627,45635,45639,45655,45659,45667,45671,45687,45699,45703,45715,45719,45723,45731,45735,45739,45747,45751,45759,45763,45771,45775,45779,45821,45863,45867,45871,45887,45891,45907,45911,45915,45923,45927,45931,45943,45981,45985,45989,45997,46001,46015,46025,46031,46037,46043,46049,46053,46057,46063,46067,46071,46079,46083,46101,46105,46109,46113,46129,46133,46137,46141,46145,46149,46169,46189,46193,46197,46201,46209,46217,46221,46237,46257,46277,46281,46285,46293,46301,46305,46309,46313,46325,46329,46339,46347,46364],{"__ignoreMap":62},[66,44727,44728,44730],{"class":68,"line":69},[66,44729,284],{"class":72},[66,44731,33614],{"class":76},[66,44733,44734,44736],{"class":68,"line":80},[66,44735,284],{"class":72},[66,44737,33621],{"class":76},[66,44739,44740,44742,44744,44746],{"class":68,"line":112},[66,44741,284],{"class":72},[66,44743,33632],{"class":76},[66,44745,33176],{"class":72},[66,44747,33637],{"class":76},[66,44749,44750,44752],{"class":68,"line":129},[66,44751,284],{"class":72},[66,44753,32192],{"class":76},[66,44755,44756,44758,44760,44762],{"class":68,"line":138},[66,44757,32532],{"class":72},[66,44759,33208],{"class":76},[66,44761,284],{"class":72},[66,44763,33654],{"class":76},[66,44765,44766,44768,44770,44772],{"class":68,"line":227},[66,44767,32532],{"class":72},[66,44769,33161],{"class":76},[66,44771,284],{"class":72},[66,44773,33166],{"class":76},[66,44775,44776,44778,44780,44782],{"class":68,"line":236},[66,44777,32532],{"class":72},[66,44779,33191],{"class":76},[66,44781,284],{"class":72},[66,44783,33196],{"class":76},[66,44785,44786,44788,44790,44792],{"class":68,"line":241},[66,44787,284],{"class":72},[66,44789,33208],{"class":76},[66,44791,33176],{"class":72},[66,44793,33213],{"class":76},[66,44795,44796,44798,44800,44802],{"class":68,"line":372},[66,44797,284],{"class":72},[66,44799,33225],{"class":76},[66,44801,33176],{"class":72},[66,44803,33230],{"class":76},[66,44805,44806],{"class":68,"line":377},[66,44807,33699],{"class":758},[66,44809,44810,44812,44814,44816],{"class":68,"line":392},[66,44811,32532],{"class":72},[66,44813,33706],{"class":76},[66,44815,284],{"class":72},[66,44817,44818],{"class":76}," GoogLeNet, Inception\n",[66,44820,44821,44823,44825,44827],{"class":68,"line":405},[66,44822,32532],{"class":72},[66,44824,32535],{"class":76},[66,44826,284],{"class":72},[66,44828,32540],{"class":76},[66,44830,44831],{"class":68,"line":418},[66,44832,109],{"emptyLinePlaceholder":108},[66,44834,44835],{"class":68,"line":430},[66,44836,109],{"emptyLinePlaceholder":108},[66,44838,44839],{"class":68,"line":438},[66,44840,33734],{"class":758},[66,44842,44843,44845,44847],{"class":68,"line":465},[66,44844,33739],{"class":72},[66,44846,33742],{"class":3793},[66,44848,33745],{"class":76},[66,44850,44851,44853,44855,44857,44859],{"class":68,"line":1805},[66,44852,33750],{"class":76},[66,44854,99],{"class":72},[66,44856,33248],{"class":76},[66,44858,33256],{"class":356},[66,44860,33259],{"class":76},[66,44862,44863,44865,44867,44869],{"class":68,"line":1817},[66,44864,33763],{"class":1234},[66,44866,99],{"class":72},[66,44868,33269],{"class":102},[66,44870,33259],{"class":76},[66,44872,44873,44875,44877,44879,44881,44883,44885],{"class":68,"line":1822},[66,44874,33774],{"class":1234},[66,44876,99],{"class":72},[66,44878,33286],{"class":76},[66,44880,33289],{"class":1234},[66,44882,99],{"class":72},[66,44884,37237],{"class":102},[66,44886,33297],{"class":76},[66,44888,44889,44891,44893,44895],{"class":68,"line":1829},[66,44890,33791],{"class":1234},[66,44892,99],{"class":72},[66,44894,33269],{"class":102},[66,44896,313],{"class":76},[66,44898,44899,44901,44903,44905,44907,44909,44911,44913,44915,44917,44919,44921,44923,44925,44927],{"class":68,"line":3529},[66,44900,33802],{"class":76},[66,44902,99],{"class":72},[66,44904,33807],{"class":76},[66,44906,33810],{"class":102},[66,44908,348],{"class":76},[66,44910,33815],{"class":102},[66,44912,1208],{"class":72},[66,44914,9169],{"class":102},[66,44916,33822],{"class":76},[66,44918,33810],{"class":102},[66,44920,348],{"class":76},[66,44922,33829],{"class":102},[66,44924,1208],{"class":72},[66,44926,9169],{"class":102},[66,44928,33836],{"class":76},[66,44930,44931,44933,44935,44937,44939,44941],{"class":68,"line":3557},[66,44932,33841],{"class":76},[66,44934,99],{"class":72},[66,44936,33846],{"class":76},[66,44938,33330],{"class":1234},[66,44940,99],{"class":72},[66,44942,33335],{"class":76},[66,44944,44945,44947,44949,44951],{"class":68,"line":3562},[66,44946,33857],{"class":1234},[66,44948,99],{"class":72},[66,44950,2189],{"class":102},[66,44952,33259],{"class":76},[66,44954,44955,44957,44959,44961],{"class":68,"line":3579},[66,44956,33869],{"class":1234},[66,44958,99],{"class":72},[66,44960,33269],{"class":102},[66,44962,33259],{"class":76},[66,44964,44965],{"class":68,"line":3584},[66,44966,33880],{"class":758},[66,44968,44969,44971,44973,44975],{"class":68,"line":3589},[66,44970,33885],{"class":1234},[66,44972,99],{"class":72},[66,44974,2379],{"class":102},[66,44976,313],{"class":76},[66,44978,44979,44981,44983,44985,44987,44989],{"class":68,"line":3594},[66,44980,33896],{"class":76},[66,44982,99],{"class":72},[66,44984,33327],{"class":76},[66,44986,33330],{"class":1234},[66,44988,99],{"class":72},[66,44990,33907],{"class":76},[66,44992,44993,44995,44997,44999],{"class":68,"line":3608},[66,44994,33912],{"class":1234},[66,44996,99],{"class":72},[66,44998,2189],{"class":102},[66,45000,33259],{"class":76},[66,45002,45003,45005,45007,45009],{"class":68,"line":3613},[66,45004,33923],{"class":1234},[66,45006,99],{"class":72},[66,45008,33269],{"class":102},[66,45010,33259],{"class":76},[66,45012,45013,45015,45017,45019],{"class":68,"line":4401},[66,45014,33934],{"class":1234},[66,45016,99],{"class":72},[66,45018,2379],{"class":102},[66,45020,313],{"class":76},[66,45022,45023,45025],{"class":68,"line":4415},[66,45024,5907],{"class":72},[66,45026,33947],{"class":76},[66,45028,45029],{"class":68,"line":4423},[66,45030,109],{"emptyLinePlaceholder":108},[66,45032,45033],{"class":68,"line":4428},[66,45034,33956],{"class":758},[66,45036,45037],{"class":68,"line":4434},[66,45038,33961],{"class":758},[66,45040,45041],{"class":68,"line":4440},[66,45042,109],{"emptyLinePlaceholder":108},[66,45044,45045],{"class":68,"line":4445},[66,45046,33970],{"class":758},[66,45048,45049,45051,45053],{"class":68,"line":9759},[66,45050,33739],{"class":72},[66,45052,33977],{"class":3793},[66,45054,33980],{"class":76},[66,45056,45057,45059,45061,45063,45065,45067,45069,45071,45073],{"class":68,"line":9783},[66,45058,33031],{"class":76},[66,45060,99],{"class":72},[66,45062,32247],{"class":76},[66,45064,33038],{"class":356},[66,45066,3534],{"class":72},[66,45068,33043],{"class":76},[66,45070,1292],{"class":72},[66,45072,33999],{"class":356},[66,45074,313],{"class":76},[66,45076,45077],{"class":68,"line":9788},[66,45078,109],{"emptyLinePlaceholder":108},[66,45080,45081],{"class":68,"line":9794},[66,45082,109],{"emptyLinePlaceholder":108},[66,45084,45085],{"class":68,"line":9821},[66,45086,34014],{"class":758},[66,45088,45089],{"class":68,"line":9826},[66,45090,34019],{"class":758},[66,45092,45093],{"class":68,"line":9832},[66,45094,34024],{"class":758},[66,45096,45097,45099,45101,45103,45105,45107,45109],{"class":68,"line":9844},[66,45098,34029],{"class":76},[66,45100,99],{"class":72},[66,45102,34034],{"class":76},[66,45104,34037],{"class":1234},[66,45106,99],{"class":72},[66,45108,34042],{"class":102},[66,45110,313],{"class":76},[66,45112,45113],{"class":68,"line":9856},[66,45114,109],{"emptyLinePlaceholder":108},[66,45116,45117],{"class":68,"line":9868},[66,45118,34053],{"class":758},[66,45120,45121,45123,45125],{"class":68,"line":11523},[66,45122,34058],{"class":76},[66,45124,99],{"class":72},[66,45126,34063],{"class":76},[66,45128,45129],{"class":68,"line":11548},[66,45130,109],{"emptyLinePlaceholder":108},[66,45132,45133],{"class":68,"line":11571},[66,45134,34072],{"class":758},[66,45136,45137,45139,45141],{"class":68,"line":11595},[66,45138,33083],{"class":76},[66,45140,99],{"class":72},[66,45142,34081],{"class":76},[66,45144,45145],{"class":68,"line":11600},[66,45146,34086],{"class":758},[66,45148,45149],{"class":68,"line":11605},[66,45150,34091],{"class":758},[66,45152,45153],{"class":68,"line":11610},[66,45154,34096],{"class":758},[66,45156,45157,45159,45161],{"class":68,"line":11619},[66,45158,34101],{"class":76},[66,45160,99],{"class":72},[66,45162,34106],{"class":76},[66,45164,45165],{"class":68,"line":11624},[66,45166,109],{"emptyLinePlaceholder":108},[66,45168,45169],{"class":68,"line":11630},[66,45170,109],{"emptyLinePlaceholder":108},[66,45172,45173],{"class":68,"line":11651},[66,45174,34119],{"class":758},[66,45176,45177],{"class":68,"line":11657},[66,45178,34124],{"class":758},[66,45180,45181,45183,45185],{"class":68,"line":11671},[66,45182,34129],{"class":76},[66,45184,99],{"class":72},[66,45186,34134],{"class":102},[66,45188,45189],{"class":68,"line":11677},[66,45190,34139],{"class":758},[66,45192,45193,45195,45197],{"class":68,"line":11704},[66,45194,34144],{"class":76},[66,45196,99],{"class":72},[66,45198,34149],{"class":76},[66,45200,45201],{"class":68,"line":11713},[66,45202,34154],{"class":758},[66,45204,45205,45207,45209],{"class":68,"line":11719},[66,45206,34159],{"class":76},[66,45208,99],{"class":72},[66,45210,34149],{"class":76},[66,45212,45213],{"class":68,"line":11727},[66,45214,34168],{"class":758},[66,45216,45217,45219,45221],{"class":68,"line":11732},[66,45218,34173],{"class":76},[66,45220,99],{"class":72},[66,45222,34149],{"class":76},[66,45224,45225],{"class":68,"line":18407},[66,45226,34182],{"class":758},[66,45228,45229,45231,45233],{"class":68,"line":18413},[66,45230,34187],{"class":76},[66,45232,99],{"class":72},[66,45234,34149],{"class":76},[66,45236,45237],{"class":68,"line":18436},[66,45238,109],{"emptyLinePlaceholder":108},[66,45240,45241],{"class":68,"line":18442},[66,45242,34200],{"class":758},[66,45244,45245,45247,45249],{"class":68,"line":18465},[66,45246,34205],{"class":76},[66,45248,99],{"class":72},[66,45250,34210],{"class":76},[66,45252,45253],{"class":68,"line":18479},[66,45254,109],{"emptyLinePlaceholder":108},[66,45256,45257],{"class":68,"line":18499},[66,45258,109],{"emptyLinePlaceholder":108},[66,45260,45261],{"class":68,"line":18505},[66,45262,34223],{"class":758},[66,45264,45265,45267,45269,45271,45273],{"class":68,"line":18516},[66,45266,1083],{"class":72},[66,45268,34230],{"class":76},[66,45270,507],{"class":72},[66,45272,510],{"class":102},[66,45274,34237],{"class":76},[66,45276,45277,45279,45281,45283,45285,45287,45289,45291,45293,45295,45297],{"class":68,"line":18539},[66,45278,395],{"class":102},[66,45280,348],{"class":76},[66,45282,34246],{"class":356},[66,45284,34249],{"class":102},[66,45286,2563],{"class":356},[66,45288,34249],{"class":102},[66,45290,1130],{"class":356},[66,45292,34258],{"class":76},[66,45294,2511],{"class":72},[66,45296,304],{"class":102},[66,45298,360],{"class":76},[66,45300,45301,45303,45305,45307,45309,45311],{"class":68,"line":18561},[66,45302,395],{"class":102},[66,45304,348],{"class":76},[66,45306,34273],{"class":356},[66,45308,1208],{"class":72},[66,45310,790],{"class":102},[66,45312,313],{"class":76},[66,45314,45315],{"class":68,"line":18566},[66,45316,109],{"emptyLinePlaceholder":108},[66,45318,45319],{"class":68,"line":18572},[66,45320,34288],{"class":758},[66,45322,45323],{"class":68,"line":18586},[66,45324,34293],{"class":758},[66,45326,45327,45329,45331],{"class":68,"line":18599},[66,45328,34298],{"class":76},[66,45330,99],{"class":72},[66,45332,34134],{"class":102},[66,45334,45335],{"class":68,"line":18604},[66,45336,34307],{"class":758},[66,45338,45339,45341,45343],{"class":68,"line":18618},[66,45340,34312],{"class":76},[66,45342,99],{"class":72},[66,45344,4906],{"class":102},[66,45346,45347],{"class":68,"line":18623},[66,45348,34321],{"class":758},[66,45350,45351,45353,45355],{"class":68,"line":18629},[66,45352,34326],{"class":76},[66,45354,99],{"class":72},[66,45356,34134],{"class":102},[66,45358,45359],{"class":68,"line":18634},[66,45360,34335],{"class":758},[66,45362,45363,45365,45367],{"class":68,"line":18648},[66,45364,34340],{"class":76},[66,45366,99],{"class":72},[66,45368,4906],{"class":102},[66,45370,45371],{"class":68,"line":18653},[66,45372,34349],{"class":758},[66,45374,45375,45377,45379],{"class":68,"line":18658},[66,45376,34354],{"class":76},[66,45378,99],{"class":72},[66,45380,4906],{"class":102},[66,45382,45383],{"class":68,"line":18672},[66,45384,34363],{"class":758},[66,45386,45387,45389,45391],{"class":68,"line":18684},[66,45388,34368],{"class":76},[66,45390,99],{"class":72},[66,45392,4906],{"class":102},[66,45394,45395],{"class":68,"line":18689},[66,45396,34377],{"class":758},[66,45398,45399,45401,45403,45405,45407],{"class":68,"line":18702},[66,45400,5222],{"class":72},[66,45402,33394],{"class":76},[66,45404,507],{"class":72},[66,45406,33399],{"class":102},[66,45408,34390],{"class":76},[66,45410,45411],{"class":68,"line":18707},[66,45412,34395],{"class":758},[66,45414,45415,45417,45419],{"class":68,"line":18712},[66,45416,34400],{"class":76},[66,45418,99],{"class":72},[66,45420,34405],{"class":76},[66,45422,45423],{"class":68,"line":18717},[66,45424,34410],{"class":758},[66,45426,45427,45429,45431],{"class":68,"line":18730},[66,45428,34415],{"class":76},[66,45430,99],{"class":72},[66,45432,34420],{"class":76},[66,45434,45435],{"class":68,"line":18735},[66,45436,34426],{"class":758},[66,45438,45439],{"class":68,"line":34423},[66,45440,34432],{"class":76},[66,45442,45443],{"class":68,"line":34429},[66,45444,34438],{"class":758},[66,45446,45447],{"class":68,"line":34435},[66,45448,34444],{"class":758},[66,45450,45451,45453,45455],{"class":68,"line":34441},[66,45452,34450],{"class":76},[66,45454,99],{"class":72},[66,45456,34455],{"class":76},[66,45458,45459],{"class":68,"line":34447},[66,45460,34461],{"class":758},[66,45462,45463,45465,45467,45469,45471,45473,45475],{"class":68,"line":34458},[66,45464,34467],{"class":76},[66,45466,99],{"class":72},[66,45468,34472],{"class":76},[66,45470,34475],{"class":1234},[66,45472,99],{"class":72},[66,45474,304],{"class":102},[66,45476,313],{"class":76},[66,45478,45479],{"class":68,"line":34464},[66,45480,34487],{"class":758},[66,45482,45483,45485,45487],{"class":68,"line":34484},[66,45484,34493],{"class":76},[66,45486,99],{"class":72},[66,45488,34498],{"class":76},[66,45490,45491],{"class":68,"line":34490},[66,45492,34504],{"class":758},[66,45494,45495],{"class":68,"line":34501},[66,45496,34510],{"class":76},[66,45498,45499],{"class":68,"line":34507},[66,45500,34516],{"class":758},[66,45502,45503],{"class":68,"line":34513},[66,45504,34522],{"class":76},[66,45506,45507],{"class":68,"line":34519},[66,45508,34528],{"class":758},[66,45510,45511],{"class":68,"line":34525},[66,45512,34534],{"class":76},[66,45514,45515],{"class":68,"line":34531},[66,45516,34540],{"class":758},[66,45518,45519,45521,45523,45525,45527,45529,45531],{"class":68,"line":34537},[66,45520,34546],{"class":76},[66,45522,144],{"class":72},[66,45524,34551],{"class":76},[66,45526,1208],{"class":72},[66,45528,34556],{"class":76},[66,45530,2183],{"class":102},[66,45532,313],{"class":76},[66,45534,45535],{"class":68,"line":34543},[66,45536,34566],{"class":758},[66,45538,45539,45541,45543,45545,45547],{"class":68,"line":34563},[66,45540,34572],{"class":76},[66,45542,144],{"class":72},[66,45544,34577],{"class":76},[66,45546,531],{"class":72},[66,45548,34582],{"class":76},[66,45550,45551],{"class":68,"line":34569},[66,45552,34588],{"class":758},[66,45554,45555,45557,45559,45561,45563],{"class":68,"line":34585},[66,45556,34594],{"class":76},[66,45558,144],{"class":72},[66,45560,34556],{"class":76},[66,45562,2183],{"class":102},[66,45564,313],{"class":76},[66,45566,45567],{"class":68,"line":34591},[66,45568,34608],{"class":758},[66,45570,45571,45573,45575,45577,45579],{"class":68,"line":34605},[66,45572,5222],{"class":72},[66,45574,34616],{"class":76},[66,45576,507],{"class":72},[66,45578,33399],{"class":102},[66,45580,34623],{"class":76},[66,45582,45583],{"class":68,"line":34611},[66,45584,34629],{"class":758},[66,45586,45587,45589,45591],{"class":68,"line":34626},[66,45588,34400],{"class":76},[66,45590,99],{"class":72},[66,45592,34405],{"class":76},[66,45594,45595],{"class":68,"line":34632},[66,45596,34644],{"class":758},[66,45598,45599,45601,45603],{"class":68,"line":34641},[66,45600,34415],{"class":76},[66,45602,99],{"class":72},[66,45604,34420],{"class":76},[66,45606,45607],{"class":68,"line":34647},[66,45608,34659],{"class":758},[66,45610,45611],{"class":68,"line":34656},[66,45612,34665],{"class":76},[66,45614,45615],{"class":68,"line":34662},[66,45616,38144],{"class":758},[66,45618,45619,45621],{"class":68,"line":34668},[66,45620,34671],{"class":72},[66,45622,34674],{"class":76},[66,45624,45625],{"class":68,"line":34677},[66,45626,34680],{"class":758},[66,45628,45629,45631,45633],{"class":68,"line":34683},[66,45630,38159],{"class":76},[66,45632,99],{"class":72},[66,45634,34455],{"class":76},[66,45636,45637],{"class":68,"line":34694},[66,45638,34697],{"class":758},[66,45640,45641,45643,45645,45647,45649,45651,45653],{"class":68,"line":34700},[66,45642,38172],{"class":76},[66,45644,99],{"class":72},[66,45646,34472],{"class":76},[66,45648,34475],{"class":1234},[66,45650,99],{"class":72},[66,45652,304],{"class":102},[66,45654,313],{"class":76},[66,45656,45657],{"class":68,"line":34719},[66,45658,34722],{"class":758},[66,45660,45661,45663,45665],{"class":68,"line":34725},[66,45662,38193],{"class":76},[66,45664,99],{"class":72},[66,45666,34498],{"class":76},[66,45668,45669],{"class":68,"line":34736},[66,45670,34739],{"class":758},[66,45672,45673,45675,45677,45679,45681,45683,45685],{"class":68,"line":34742},[66,45674,38206],{"class":76},[66,45676,144],{"class":72},[66,45678,38211],{"class":76},[66,45680,1208],{"class":72},[66,45682,34556],{"class":76},[66,45684,2183],{"class":102},[66,45686,313],{"class":76},[66,45688,45689,45691,45693,45695,45697],{"class":68,"line":34762},[66,45690,38224],{"class":76},[66,45692,144],{"class":72},[66,45694,34577],{"class":76},[66,45696,531],{"class":72},[66,45698,34582],{"class":76},[66,45700,45701],{"class":68,"line":34778},[66,45702,38237],{"class":758},[66,45704,45705,45707,45709,45711,45713],{"class":68,"line":34784},[66,45706,38242],{"class":76},[66,45708,144],{"class":72},[66,45710,34556],{"class":76},[66,45712,2183],{"class":102},[66,45714,313],{"class":76},[66,45716,45717],{"class":68,"line":34798},[66,45718,34801],{"class":758},[66,45720,45721],{"class":68,"line":34804},[66,45722,34807],{"class":758},[66,45724,45725,45727,45729],{"class":68,"line":34810},[66,45726,34813],{"class":76},[66,45728,2563],{"class":72},[66,45730,34818],{"class":76},[66,45732,45733],{"class":68,"line":34821},[66,45734,34824],{"class":758},[66,45736,45737],{"class":68,"line":34827},[66,45738,34830],{"class":758},[66,45740,45741,45743,45745],{"class":68,"line":34833},[66,45742,34836],{"class":76},[66,45744,2563],{"class":72},[66,45746,34818],{"class":76},[66,45748,45749],{"class":68,"line":34843},[66,45750,34846],{"class":758},[66,45752,45753,45755,45757],{"class":68,"line":34849},[66,45754,34852],{"class":76},[66,45756,2563],{"class":72},[66,45758,34857],{"class":76},[66,45760,45761],{"class":68,"line":34860},[66,45762,34863],{"class":758},[66,45764,45765,45767,45769],{"class":68,"line":34866},[66,45766,34869],{"class":76},[66,45768,2563],{"class":72},[66,45770,34857],{"class":76},[66,45772,45773],{"class":68,"line":34876},[66,45774,109],{"emptyLinePlaceholder":108},[66,45776,45777],{"class":68,"line":34881},[66,45778,34884],{"class":758},[66,45780,45781,45783,45785,45787,45789,45791,45793,45795,45797,45799,45801,45803,45805,45807,45809,45811,45813,45815,45817,45819],{"class":68,"line":34887},[66,45782,395],{"class":102},[66,45784,348],{"class":76},[66,45786,5410],{"class":356},[66,45788,34249],{"class":102},[66,45790,34898],{"class":356},[66,45792,451],{"class":102},[66,45794,34903],{"class":72},[66,45796,457],{"class":102},[66,45798,34908],{"class":356},[66,45800,451],{"class":102},[66,45802,34903],{"class":72},[66,45804,457],{"class":102},[66,45806,5410],{"class":356},[66,45808,34919],{"class":76},[66,45810,2511],{"class":72},[66,45812,304],{"class":102},[66,45814,34926],{"class":76},[66,45816,2511],{"class":72},[66,45818,304],{"class":102},[66,45820,34933],{"class":76},[66,45822,45823,45825,45827,45829,45831,45833,45835,45837,45839,45841,45843,45845,45847,45849,45851,45853,45855,45857,45859,45861],{"class":68,"line":34936},[66,45824,395],{"class":102},[66,45826,348],{"class":76},[66,45828,5410],{"class":356},[66,45830,34249],{"class":102},[66,45832,34947],{"class":356},[66,45834,451],{"class":102},[66,45836,34903],{"class":72},[66,45838,457],{"class":102},[66,45840,34956],{"class":356},[66,45842,451],{"class":102},[66,45844,34903],{"class":72},[66,45846,457],{"class":102},[66,45848,5410],{"class":356},[66,45850,34967],{"class":76},[66,45852,2511],{"class":72},[66,45854,304],{"class":102},[66,45856,34974],{"class":76},[66,45858,2511],{"class":72},[66,45860,304],{"class":102},[66,45862,34933],{"class":76},[66,45864,45865],{"class":68,"line":34983},[66,45866,109],{"emptyLinePlaceholder":108},[66,45868,45869],{"class":68,"line":34988},[66,45870,34991],{"class":758},[66,45872,45873,45875,45877,45879,45881,45883,45885],{"class":68,"line":34994},[66,45874,4321],{"class":72},[66,45876,34999],{"class":76},[66,45878,2511],{"class":72},[66,45880,304],{"class":102},[66,45882,2917],{"class":76},[66,45884,386],{"class":72},[66,45886,35010],{"class":76},[66,45888,45889],{"class":68,"line":35013},[66,45890,35016],{"class":758},[66,45892,45893,45895,45897,45899,45901,45903,45905],{"class":68,"line":35019},[66,45894,35022],{"class":76},[66,45896,2038],{"class":102},[66,45898,99],{"class":72},[66,45900,35029],{"class":76},[66,45902,2511],{"class":72},[66,45904,304],{"class":102},[66,45906,704],{"class":76},[66,45908,45909],{"class":68,"line":35038},[66,45910,35041],{"class":758},[66,45912,45913],{"class":68,"line":35044},[66,45914,35047],{"class":758},[66,45916,45917,45919,45921],{"class":68,"line":35050},[66,45918,35053],{"class":76},[66,45920,99],{"class":72},[66,45922,34106],{"class":76},[66,45924,45925],{"class":68,"line":35060},[66,45926,109],{"emptyLinePlaceholder":108},[66,45928,45929],{"class":68,"line":35065},[66,45930,35068],{"class":758},[66,45932,45933,45935,45937,45939,45941],{"class":68,"line":35071},[66,45934,35074],{"class":76},[66,45936,99],{"class":72},[66,45938,35079],{"class":76},[66,45940,2511],{"class":72},[66,45942,35084],{"class":76},[66,45944,45945,45947,45949,45951,45953,45955,45957,45959,45961,45963,45965,45967,45969,45971,45973,45975,45977,45979],{"class":68,"line":35087},[66,45946,395],{"class":102},[66,45948,348],{"class":76},[66,45950,35094],{"class":356},[66,45952,451],{"class":102},[66,45954,35099],{"class":72},[66,45956,457],{"class":102},[66,45958,2523],{"class":356},[66,45960,451],{"class":102},[66,45962,35099],{"class":72},[66,45964,457],{"class":102},[66,45966,35112],{"class":356},[66,45968,35115],{"class":76},[66,45970,35118],{"class":72},[66,45972,2885],{"class":102},[66,45974,35123],{"class":76},[66,45976,953],{"class":72},[66,45978,2885],{"class":102},[66,45980,360],{"class":76},[66,45982,45983],{"class":68,"line":35132},[66,45984,38521],{"class":758},[66,45986,45987],{"class":68,"line":35138},[66,45988,38526],{"class":758},[66,45990,45991,45993,45995],{"class":68,"line":35144},[66,45992,38531],{"class":76},[66,45994,35156],{"class":356},[66,45996,313],{"class":76},[66,45998,45999],{"class":68,"line":35150},[66,46000,35176],{"class":758},[66,46002,46003,46005,46007,46009,46011,46013],{"class":68,"line":35161},[66,46004,35182],{"class":76},[66,46006,99],{"class":72},[66,46008,35187],{"class":76},[66,46010,35190],{"class":1234},[66,46012,99],{"class":72},[66,46014,3388],{"class":76},[66,46016,46017,46019,46021,46023],{"class":68,"line":35167},[66,46018,35200],{"class":356},[66,46020,2838],{"class":76},[66,46022,747],{"class":102},[66,46024,35207],{"class":76},[66,46026,46027,46029],{"class":68,"line":35173},[66,46028,35213],{"class":356},[66,46030,35216],{"class":76},[66,46032,46033,46035],{"class":68,"line":35179},[66,46034,35222],{"class":356},[66,46036,35225],{"class":76},[66,46038,46039,46041],{"class":68,"line":35197},[66,46040,35231],{"class":356},[66,46042,35234],{"class":76},[66,46044,46045,46047],{"class":68,"line":35210},[66,46046,35240],{"class":356},[66,46048,35243],{"class":76},[66,46050,46051],{"class":68,"line":35219},[66,46052,35249],{"class":76},[66,46054,46055],{"class":68,"line":35228},[66,46056,35255],{"class":758},[66,46058,46059,46061],{"class":68,"line":35237},[66,46060,5907],{"class":72},[66,46062,35263],{"class":76},[66,46064,46065],{"class":68,"line":35246},[66,46066,109],{"emptyLinePlaceholder":108},[66,46068,46069],{"class":68,"line":35252},[66,46070,35274],{"class":758},[66,46072,46073,46075,46077],{"class":68,"line":35258},[66,46074,33739],{"class":72},[66,46076,35282],{"class":3793},[66,46078,35285],{"class":76},[66,46080,46081],{"class":68,"line":35266},[66,46082,35291],{"class":758},[66,46084,46085,46087,46089,46091,46093,46095,46097,46099],{"class":68,"line":35271},[66,46086,35297],{"class":76},[66,46088,33485],{"class":1234},[66,46090,99],{"class":72},[66,46092,348],{"class":76},[66,46094,2477],{"class":102},[66,46096,2362],{"class":76},[66,46098,1076],{"class":102},[66,46100,360],{"class":76},[66,46102,46103],{"class":68,"line":35277},[66,46104,35317],{"class":758},[66,46106,46107],{"class":68,"line":35288},[66,46108,35323],{"class":758},[66,46110,46111],{"class":68,"line":35294},[66,46112,35329],{"class":758},[66,46114,46115,46117,46119,46121,46123,46125,46127],{"class":68,"line":35314},[66,46116,33519],{"class":76},[66,46118,304],{"class":102},[66,46120,2362],{"class":76},[66,46122,795],{"class":102},[66,46124,2362],{"class":76},[66,46126,304],{"class":102},[66,46128,313],{"class":76},[66,46130,46131],{"class":68,"line":35320},[66,46132,35352],{"class":758},[66,46134,46135],{"class":68,"line":35326},[66,46136,35358],{"class":758},[66,46138,46139],{"class":68,"line":35332},[66,46140,35364],{"class":758},[66,46142,46143],{"class":68,"line":35349},[66,46144,35370],{"class":758},[66,46146,46147],{"class":68,"line":35355},[66,46148,35376],{"class":758},[66,46150,46151,46153,46155,46157,46159,46161,46163,46165,46167],{"class":68,"line":35361},[66,46152,35382],{"class":76},[66,46154,35385],{"class":356},[66,46156,35388],{"class":76},[66,46158,35391],{"class":356},[66,46160,2362],{"class":76},[66,46162,35396],{"class":1234},[66,46164,99],{"class":72},[66,46166,35401],{"class":356},[66,46168,313],{"class":76},[66,46170,46171,46173,46175,46177,46179,46181,46183,46185,46187],{"class":68,"line":35367},[66,46172,35382],{"class":76},[66,46174,35385],{"class":356},[66,46176,35413],{"class":76},[66,46178,35416],{"class":356},[66,46180,2362],{"class":76},[66,46182,35396],{"class":1234},[66,46184,99],{"class":72},[66,46186,35425],{"class":356},[66,46188,313],{"class":76},[66,46190,46191],{"class":68,"line":35373},[66,46192,35433],{"class":758},[66,46194,46195],{"class":68,"line":35379},[66,46196,35439],{"class":76},[66,46198,46199],{"class":68,"line":35406},[66,46200,35445],{"class":758},[66,46202,46203,46205,46207],{"class":68,"line":35430},[66,46204,35451],{"class":76},[66,46206,35454],{"class":356},[66,46208,313],{"class":76},[66,46210,46211,46213,46215],{"class":68,"line":35436},[66,46212,35462],{"class":76},[66,46214,35465],{"class":356},[66,46216,313],{"class":76},[66,46218,46219],{"class":68,"line":35442},[66,46220,35473],{"class":758},[66,46222,46223,46225,46227,46229,46231,46233,46235],{"class":68,"line":35448},[66,46224,33519],{"class":76},[66,46226,304],{"class":102},[66,46228,2362],{"class":76},[66,46230,795],{"class":102},[66,46232,2362],{"class":76},[66,46234,795],{"class":102},[66,46236,313],{"class":76},[66,46238,46239,46241,46243,46245,46247,46249,46251,46253,46255],{"class":68,"line":35459},[66,46240,35382],{"class":76},[66,46242,35385],{"class":356},[66,46244,35500],{"class":76},[66,46246,35391],{"class":356},[66,46248,2362],{"class":76},[66,46250,35396],{"class":1234},[66,46252,99],{"class":72},[66,46254,35511],{"class":356},[66,46256,313],{"class":76},[66,46258,46259,46261,46263,46265,46267,46269,46271,46273,46275],{"class":68,"line":35470},[66,46260,35382],{"class":76},[66,46262,35385],{"class":356},[66,46264,35523],{"class":76},[66,46266,35416],{"class":356},[66,46268,2362],{"class":76},[66,46270,35396],{"class":1234},[66,46272,99],{"class":72},[66,46274,35534],{"class":356},[66,46276,313],{"class":76},[66,46278,46279],{"class":68,"line":35476},[66,46280,35542],{"class":758},[66,46282,46283],{"class":68,"line":35493},[66,46284,35439],{"class":76},[66,46286,46287,46289,46291],{"class":68,"line":35516},[66,46288,35451],{"class":76},[66,46290,35385],{"class":356},[66,46292,313],{"class":76},[66,46294,46295,46297,46299],{"class":68,"line":35539},[66,46296,35462],{"class":76},[66,46298,35564],{"class":356},[66,46300,313],{"class":76},[66,46302,46303],{"class":68,"line":35545},[66,46304,35572],{"class":76},[66,46306,46307],{"class":68,"line":35550},[66,46308,109],{"emptyLinePlaceholder":108},[66,46310,46311],{"class":68,"line":35559},[66,46312,35583],{"class":758},[66,46314,46315,46317,46319,46321,46323],{"class":68,"line":35569},[66,46316,3373],{"class":72},[66,46318,33014],{"class":102},[66,46320,531],{"class":72},[66,46322,33019],{"class":356},[66,46324,126],{"class":76},[66,46326,46327],{"class":68,"line":35575},[66,46328,35602],{"class":758},[66,46330,46331,46334,46336],{"class":68,"line":35580},[66,46332,46333],{"class":76},"    GoogLeNet",[66,46335,99],{"class":72},[66,46337,46338],{"class":76},"GoogLeNet(Inception)\n",[66,46340,46341,46343,46345],{"class":68,"line":35586},[66,46342,35619],{"class":76},[66,46344,99],{"class":72},[66,46346,35624],{"class":76},[66,46348,46349,46351,46353,46356,46358,46360,46362],{"class":68,"line":35599},[66,46350,35182],{"class":76},[66,46352,99],{"class":72},[66,46354,46355],{"class":76},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[66,46357,35637],{"class":1234},[66,46359,99],{"class":72},[66,46361,2927],{"class":102},[66,46363,313],{"class":76},[66,46365,46366],{"class":68,"line":35605},[66,46367,35649],{"class":76},[31,46369,46370],{"start":112},[34,46371,42361],{},[57,46373,46375],{"className":59,"code":46374,"language":61,"meta":62,"style":62},"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",[23,46376,46377,46383,46393,46403,46407,46417,46428,46432,46436,46440,46448,46464,46474,46490,46500,46514,46518,46528,46538,46548,46554,46558,46562,46570,46574,46590,46598,46602,46606,46614,46622,46626,46630,46634,46638,46644,46648,46658,46666,46674,46678,46682,46686,46694,46698,46714,46718,46722,46726,46738,46742,46754,46758,46762,46774,46778,46788,46792,46796,46808,46812,46820,46824,46828,46836,46840,46848,46852,46856,46860,46864,46868,46884,46892,46896,46900,46948,46954,46958,46968,46976,46984,46988,46992,46996,47000,47008,47012,47028,47032,47040,47048],{"__ignoreMap":62},[66,46378,46379,46381],{"class":68,"line":69},[66,46380,284],{"class":72},[66,46382,32192],{"class":76},[66,46384,46385,46387,46389,46391],{"class":68,"line":80},[66,46386,284],{"class":72},[66,46388,33208],{"class":76},[66,46390,33176],{"class":72},[66,46392,33213],{"class":76},[66,46394,46395,46397,46399,46401],{"class":68,"line":112},[66,46396,32532],{"class":72},[66,46398,33191],{"class":76},[66,46400,284],{"class":72},[66,46402,33196],{"class":76},[66,46404,46405],{"class":68,"line":129},[66,46406,35710],{"class":758},[66,46408,46409,46411,46413,46415],{"class":68,"line":138},[66,46410,32532],{"class":72},[66,46412,33161],{"class":76},[66,46414,284],{"class":72},[66,46416,33166],{"class":76},[66,46418,46419,46421,46423,46425],{"class":68,"line":227},[66,46420,32532],{"class":72},[66,46422,33706],{"class":76},[66,46424,284],{"class":72},[66,46426,46427],{"class":76}," GoogLeNet,Inception\n",[66,46429,46430],{"class":68,"line":236},[66,46431,109],{"emptyLinePlaceholder":108},[66,46433,46434],{"class":68,"line":241},[66,46435,109],{"emptyLinePlaceholder":108},[66,46437,46438],{"class":68,"line":372},[66,46439,35739],{"class":758},[66,46441,46442,46444,46446],{"class":68,"line":377},[66,46443,33739],{"class":72},[66,46445,35746],{"class":3793},[66,46447,33745],{"class":76},[66,46449,46450,46452,46454,46456,46458,46460,46462],{"class":68,"line":392},[66,46451,35753],{"class":76},[66,46453,99],{"class":72},[66,46455,33248],{"class":76},[66,46457,33251],{"class":1234},[66,46459,99],{"class":72},[66,46461,33256],{"class":356},[66,46463,33259],{"class":76},[66,46465,46466,46468,46470,46472],{"class":68,"line":405},[66,46467,35770],{"class":1234},[66,46469,99],{"class":72},[66,46471,35775],{"class":102},[66,46473,33259],{"class":76},[66,46475,46476,46478,46480,46482,46484,46486,46488],{"class":68,"line":418},[66,46477,35782],{"class":1234},[66,46479,99],{"class":72},[66,46481,33286],{"class":76},[66,46483,33289],{"class":1234},[66,46485,99],{"class":72},[66,46487,37237],{"class":102},[66,46489,33297],{"class":76},[66,46491,46492,46494,46496,46498],{"class":68,"line":430},[66,46493,35799],{"class":1234},[66,46495,99],{"class":72},[66,46497,33269],{"class":102},[66,46499,313],{"class":76},[66,46501,46502,46504,46506,46508,46510,46512],{"class":68,"line":438},[66,46503,35810],{"class":76},[66,46505,99],{"class":72},[66,46507,33327],{"class":76},[66,46509,33330],{"class":1234},[66,46511,99],{"class":72},[66,46513,35821],{"class":76},[66,46515,46516],{"class":68,"line":465},[66,46517,35826],{"class":758},[66,46519,46520,46522,46524,46526],{"class":68,"line":1805},[66,46521,35831],{"class":1234},[66,46523,99],{"class":72},[66,46525,304],{"class":102},[66,46527,33259],{"class":76},[66,46529,46530,46532,46534,46536],{"class":68,"line":1817},[66,46531,35842],{"class":1234},[66,46533,99],{"class":72},[66,46535,33269],{"class":102},[66,46537,33259],{"class":76},[66,46539,46540,46542,46544,46546],{"class":68,"line":1822},[66,46541,35853],{"class":1234},[66,46543,99],{"class":72},[66,46545,2183],{"class":102},[66,46547,313],{"class":76},[66,46549,46550,46552],{"class":68,"line":1829},[66,46551,5907],{"class":72},[66,46553,35866],{"class":76},[66,46555,46556],{"class":68,"line":3529},[66,46557,109],{"emptyLinePlaceholder":108},[66,46559,46560],{"class":68,"line":3557},[66,46561,35875],{"class":758},[66,46563,46564,46566,46568],{"class":68,"line":3562},[66,46565,33739],{"class":72},[66,46567,35882],{"class":3793},[66,46569,35885],{"class":76},[66,46571,46572],{"class":68,"line":3579},[66,46573,35890],{"class":758},[66,46575,46576,46578,46580,46582,46584,46586,46588],{"class":68,"line":3584},[66,46577,33031],{"class":76},[66,46579,99],{"class":72},[66,46581,33038],{"class":356},[66,46583,3534],{"class":72},[66,46585,33043],{"class":76},[66,46587,1292],{"class":72},[66,46589,35907],{"class":356},[66,46591,46592,46594,46596],{"class":68,"line":3589},[66,46593,33083],{"class":76},[66,46595,99],{"class":72},[66,46597,34081],{"class":76},[66,46599,46600],{"class":68,"line":3594},[66,46601,109],{"emptyLinePlaceholder":108},[66,46603,46604],{"class":68,"line":3608},[66,46605,35924],{"class":758},[66,46607,46608,46610,46612],{"class":68,"line":3613},[66,46609,35929],{"class":76},[66,46611,99],{"class":72},[66,46613,34134],{"class":102},[66,46615,46616,46618,46620],{"class":68,"line":4401},[66,46617,35938],{"class":76},[66,46619,99],{"class":72},[66,46621,4906],{"class":102},[66,46623,46624],{"class":68,"line":4415},[66,46625,109],{"emptyLinePlaceholder":108},[66,46627,46628],{"class":68,"line":4423},[66,46629,35951],{"class":758},[66,46631,46632],{"class":68,"line":4428},[66,46633,35956],{"class":758},[66,46635,46636],{"class":68,"line":4434},[66,46637,35961],{"class":758},[66,46639,46640,46642],{"class":68,"line":4440},[66,46641,35966],{"class":72},[66,46643,34674],{"class":76},[66,46645,46646],{"class":68,"line":4445},[66,46647,35973],{"class":758},[66,46649,46650,46652,46654,46656],{"class":68,"line":9759},[66,46651,5222],{"class":72},[66,46653,35980],{"class":76},[66,46655,507],{"class":72},[66,46657,35985],{"class":76},[66,46659,46660,46662,46664],{"class":68,"line":9783},[66,46661,35990],{"class":76},[66,46663,99],{"class":72},[66,46665,35995],{"class":76},[66,46667,46668,46670,46672],{"class":68,"line":9788},[66,46669,36000],{"class":76},[66,46671,99],{"class":72},[66,46673,36005],{"class":76},[66,46675,46676],{"class":68,"line":9794},[66,46677,36010],{"class":758},[66,46679,46680],{"class":68,"line":9821},[66,46681,34665],{"class":76},[66,46683,46684],{"class":68,"line":9826},[66,46685,36019],{"class":758},[66,46687,46688,46690,46692],{"class":68,"line":9832},[66,46689,34450],{"class":76},[66,46691,99],{"class":72},[66,46693,36028],{"class":76},[66,46695,46696],{"class":68,"line":9844},[66,46697,36033],{"class":758},[66,46699,46700,46702,46704,46706,46708,46710,46712],{"class":68,"line":9856},[66,46701,34467],{"class":76},[66,46703,99],{"class":72},[66,46705,34472],{"class":76},[66,46707,34475],{"class":1234},[66,46709,99],{"class":72},[66,46711,304],{"class":102},[66,46713,313],{"class":76},[66,46715,46716],{"class":68,"line":9868},[66,46717,36054],{"class":758},[66,46719,46720],{"class":68,"line":11523},[66,46721,36059],{"class":758},[66,46723,46724],{"class":68,"line":11548},[66,46725,36064],{"class":758},[66,46727,46728,46730,46732,46734,46736],{"class":68,"line":11571},[66,46729,36069],{"class":76},[66,46731,144],{"class":72},[66,46733,34577],{"class":76},[66,46735,531],{"class":72},[66,46737,36078],{"class":76},[66,46739,46740],{"class":68,"line":11595},[66,46741,36083],{"class":758},[66,46743,46744,46746,46748,46750,46752],{"class":68,"line":11600},[66,46745,36088],{"class":76},[66,46747,144],{"class":72},[66,46749,36093],{"class":76},[66,46751,2183],{"class":102},[66,46753,313],{"class":76},[66,46755,46756],{"class":68,"line":11605},[66,46757,109],{"emptyLinePlaceholder":108},[66,46759,46760],{"class":68,"line":11610},[66,46761,36106],{"class":758},[66,46763,46764,46766,46768,46770,46772],{"class":68,"line":11619},[66,46765,36111],{"class":76},[66,46767,99],{"class":72},[66,46769,36116],{"class":76},[66,46771,2563],{"class":72},[66,46773,36121],{"class":76},[66,46775,46776],{"class":68,"line":11624},[66,46777,36126],{"class":758},[66,46779,46780,46782,46784,46786],{"class":68,"line":11630},[66,46781,395],{"class":102},[66,46783,348],{"class":76},[66,46785,36135],{"class":356},[66,46787,36138],{"class":76},[66,46789,46790],{"class":68,"line":11651},[66,46791,109],{"emptyLinePlaceholder":108},[66,46793,46794],{"class":68,"line":11657},[66,46795,36147],{"class":758},[66,46797,46798,46800,46802,46804,46806],{"class":68,"line":11671},[66,46799,3373],{"class":72},[66,46801,33014],{"class":102},[66,46803,531],{"class":72},[66,46805,33019],{"class":356},[66,46807,126],{"class":76},[66,46809,46810],{"class":68,"line":11677},[66,46811,36164],{"class":758},[66,46813,46814,46816,46818],{"class":68,"line":11704},[66,46815,33083],{"class":76},[66,46817,99],{"class":72},[66,46819,46338],{"class":76},[66,46821,46822],{"class":68,"line":11713},[66,46823,36177],{"class":758},[66,46825,46826],{"class":68,"line":11719},[66,46827,36182],{"class":758},[66,46829,46830,46832,46834],{"class":68,"line":11727},[66,46831,36187],{"class":76},[66,46833,36190],{"class":356},[66,46835,360],{"class":76},[66,46837,46838],{"class":68,"line":11732},[66,46839,36197],{"class":758},[66,46841,46842,46844,46846],{"class":68,"line":18407},[66,46843,35810],{"class":76},[66,46845,99],{"class":72},[66,46847,36206],{"class":76},[66,46849,46850],{"class":68,"line":18413},[66,46851,36211],{"class":758},[66,46853,46854],{"class":68,"line":18436},[66,46855,36216],{"class":76},[66,46857,46858],{"class":68,"line":18442},[66,46859,109],{"emptyLinePlaceholder":108},[66,46861,46862],{"class":68,"line":18465},[66,46863,36225],{"class":758},[66,46865,46866],{"class":68,"line":18479},[66,46867,36230],{"class":758},[66,46869,46870,46872,46874,46876,46878,46880,46882],{"class":68,"line":18499},[66,46871,33031],{"class":76},[66,46873,99],{"class":72},[66,46875,33038],{"class":356},[66,46877,3534],{"class":72},[66,46879,33043],{"class":76},[66,46881,1292],{"class":72},[66,46883,35907],{"class":356},[66,46885,46886,46888,46890],{"class":68,"line":18505},[66,46887,33083],{"class":76},[66,46889,99],{"class":72},[66,46891,34081],{"class":76},[66,46893,46894],{"class":68,"line":18516},[66,46895,36259],{"class":758},[66,46897,46898],{"class":68,"line":18539},[66,46899,36264],{"class":758},[66,46901,46902,46904,46906,46908,46910,46912,46914,46916,46918,46920,46922,46924,46926,46928,46930,46932,46934,46936,46938,46940,46942,46944,46946],{"class":68,"line":18561},[66,46903,36269],{"class":76},[66,46905,99],{"class":72},[66,46907,2869],{"class":76},[66,46909,36276],{"class":356},[66,46911,2362],{"class":76},[66,46913,36281],{"class":356},[66,46915,2362],{"class":76},[66,46917,36286],{"class":356},[66,46919,2362],{"class":76},[66,46921,36291],{"class":356},[66,46923,2362],{"class":76},[66,46925,36296],{"class":356},[66,46927,2362],{"class":76},[66,46929,36301],{"class":356},[66,46931,2362],{"class":76},[66,46933,36306],{"class":356},[66,46935,2362],{"class":76},[66,46937,36311],{"class":356},[66,46939,2362],{"class":76},[66,46941,36316],{"class":356},[66,46943,2362],{"class":76},[66,46945,36321],{"class":356},[66,46947,704],{"class":76},[66,46949,46950,46952],{"class":68,"line":18566},[66,46951,35966],{"class":72},[66,46953,34674],{"class":76},[66,46955,46956],{"class":68,"line":18572},[66,46957,36334],{"class":758},[66,46959,46960,46962,46964,46966],{"class":68,"line":18586},[66,46961,5222],{"class":72},[66,46963,36341],{"class":76},[66,46965,507],{"class":72},[66,46967,35985],{"class":76},[66,46969,46970,46972,46974],{"class":68,"line":18599},[66,46971,34400],{"class":76},[66,46973,99],{"class":72},[66,46975,34405],{"class":76},[66,46977,46978,46980,46982],{"class":68,"line":18604},[66,46979,34415],{"class":76},[66,46981,99],{"class":72},[66,46983,34420],{"class":76},[66,46985,46986],{"class":68,"line":18618},[66,46987,109],{"emptyLinePlaceholder":108},[66,46989,46990],{"class":68,"line":18623},[66,46991,36370],{"class":758},[66,46993,46994],{"class":68,"line":18629},[66,46995,34665],{"class":76},[66,46997,46998],{"class":68,"line":18634},[66,46999,36379],{"class":758},[66,47001,47002,47004,47006],{"class":68,"line":18648},[66,47003,34450],{"class":76},[66,47005,99],{"class":72},[66,47007,34455],{"class":76},[66,47009,47010],{"class":68,"line":18653},[66,47011,36392],{"class":758},[66,47013,47014,47016,47018,47020,47022,47024,47026],{"class":68,"line":18658},[66,47015,34467],{"class":76},[66,47017,99],{"class":72},[66,47019,34472],{"class":76},[66,47021,34475],{"class":1234},[66,47023,99],{"class":72},[66,47025,304],{"class":102},[66,47027,313],{"class":76},[66,47029,47030],{"class":68,"line":18672},[66,47031,36413],{"class":758},[66,47033,47034,47036,47038],{"class":68,"line":18684},[66,47035,36418],{"class":76},[66,47037,99],{"class":72},[66,47039,36423],{"class":76},[66,47041,47042,47044,47046],{"class":68,"line":18689},[66,47043,36428],{"class":76},[66,47045,99],{"class":72},[66,47047,36433],{"class":76},[66,47049,47050,47052,47054,47056,47058,47060,47062,47064],{"class":68,"line":18702},[66,47051,36438],{"class":102},[66,47053,348],{"class":76},[66,47055,36443],{"class":356},[66,47057,36446],{"class":76},[66,47059,36449],{"class":356},[66,47061,2362],{"class":76},[66,47063,36454],{"class":356},[66,47065,36457],{"class":76},[484,47067,47069],{"id":47068},"_24训练自己的数据集","2.4.训练自己的数据集",[19,47071,47072],{},"猫狗分类任务",[19,47074,47075],{},"划分数据集和验证集",[57,47077,47079],{"className":59,"code":47078,"language":61,"meta":62,"style":62},"# 创建脚本，用于划分数据集和验证集\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",[23,47080,47081,47086,47093,47098,47109,47115,47119,47129,47143,47152,47156,47161,47171,47191,47195,47200,47210,47221,47234,47238,47243,47252,47262,47273,47277,47282,47292,47296,47301,47306,47311,47316,47321,47325,47335,47362,47375,47387,47414,47419,47424,47438,47443,47455,47470,47485,47493,47497,47502,47508,47520,47533,47538,47543,47548,47597,47603,47607],{"__ignoreMap":62},[66,47082,47083],{"class":68,"line":69},[66,47084,47085],{"class":758},"# 创建脚本，用于划分数据集和验证集\n",[66,47087,47088,47090],{"class":68,"line":80},[66,47089,284],{"class":72},[66,47091,47092],{"class":76}," os\n",[66,47094,47095],{"class":68,"line":112},[66,47096,47097],{"class":758},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[66,47099,47100,47102,47105,47107],{"class":68,"line":129},[66,47101,32532],{"class":72},[66,47103,47104],{"class":76}," shutil ",[66,47106,284],{"class":72},[66,47108,33614],{"class":76},[66,47110,47111,47113],{"class":68,"line":138},[66,47112,284],{"class":72},[66,47114,287],{"class":76},[66,47116,47117],{"class":68,"line":227},[66,47118,109],{"emptyLinePlaceholder":108},[66,47120,47121,47123,47126],{"class":68,"line":236},[66,47122,33739],{"class":72},[66,47124,47125],{"class":3793}," mkfile",[66,47127,47128],{"class":76},"(file):\n",[66,47130,47131,47133,47135,47138,47141],{"class":68,"line":241},[66,47132,380],{"class":72},[66,47134,40718],{"class":72},[66,47136,47137],{"class":76}," os.path.exists(",[66,47139,47140],{"class":1234},"file",[66,47142,522],{"class":76},[66,47144,47145,47148,47150],{"class":68,"line":372},[66,47146,47147],{"class":76},"        os.makedirs(",[66,47149,47140],{"class":1234},[66,47151,313],{"class":76},[66,47153,47154],{"class":68,"line":377},[66,47155,109],{"emptyLinePlaceholder":108},[66,47157,47158],{"class":68,"line":392},[66,47159,47160],{"class":758},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[66,47162,47163,47166,47168],{"class":68,"line":405},[66,47164,47165],{"class":76},"file_path",[66,47167,99],{"class":72},[66,47169,47170],{"class":356},"'data_cat_dog'\n",[66,47172,47173,47176,47178,47181,47183,47186,47188],{"class":68,"line":418},[66,47174,47175],{"class":76},"flower_class",[66,47177,99],{"class":72},[66,47179,47180],{"class":76},"[cla ",[66,47182,502],{"class":72},[66,47184,47185],{"class":76}," cla ",[66,47187,507],{"class":72},[66,47189,47190],{"class":76}," os.listdir(file_path)]\n",[66,47192,47193],{"class":68,"line":430},[66,47194,109],{"emptyLinePlaceholder":108},[66,47196,47197],{"class":68,"line":438},[66,47198,47199],{"class":758},"# 创建训练集train文件夹\n",[66,47201,47202,47205,47208],{"class":68,"line":465},[66,47203,47204],{"class":76},"mkfile(",[66,47206,47207],{"class":356},"'data\u002Ftrain'",[66,47209,313],{"class":76},[66,47211,47212,47214,47216,47218],{"class":68,"line":1805},[66,47213,502],{"class":72},[66,47215,47185],{"class":76},[66,47217,507],{"class":72},[66,47219,47220],{"class":76}," flower_class:\n",[66,47222,47223,47226,47229,47231],{"class":68,"line":1817},[66,47224,47225],{"class":76},"    mkfile(",[66,47227,47228],{"class":356},"'data\u002Ftrain\u002F'",[66,47230,1184],{"class":72},[66,47232,47233],{"class":76},"cla)\n",[66,47235,47236],{"class":68,"line":1822},[66,47237,109],{"emptyLinePlaceholder":108},[66,47239,47240],{"class":68,"line":1829},[66,47241,47242],{"class":758},"# 创建验证集val文件夹\n",[66,47244,47245,47247,47250],{"class":68,"line":3529},[66,47246,47204],{"class":76},[66,47248,47249],{"class":356},"'data\u002Ftest'",[66,47251,313],{"class":76},[66,47253,47254,47256,47258,47260],{"class":68,"line":3557},[66,47255,502],{"class":72},[66,47257,47185],{"class":76},[66,47259,507],{"class":72},[66,47261,47220],{"class":76},[66,47263,47264,47266,47269,47271],{"class":68,"line":3562},[66,47265,47225],{"class":76},[66,47267,47268],{"class":356},"'data\u002Ftest\u002F'",[66,47270,1184],{"class":72},[66,47272,47233],{"class":76},[66,47274,47275],{"class":68,"line":3579},[66,47276,109],{"emptyLinePlaceholder":108},[66,47278,47279],{"class":68,"line":3584},[66,47280,47281],{"class":758},"# 划分比例，训练集：测试集=9：1\n",[66,47283,47284,47287,47289],{"class":68,"line":3589},[66,47285,47286],{"class":76},"split_rate",[66,47288,99],{"class":72},[66,47290,47291],{"class":102},"0.1\n",[66,47293,47294],{"class":68,"line":3594},[66,47295,109],{"emptyLinePlaceholder":108},[66,47297,47298],{"class":68,"line":3608},[66,47299,47300],{"class":758},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[66,47302,47303],{"class":68,"line":3613},[66,47304,47305],{"class":758},"# cla_path：当前类别的原始图片路径\n",[66,47307,47308],{"class":68,"line":4401},[66,47309,47310],{"class":758},"# images：当前类别下所有图片的文件名列表\n",[66,47312,47313],{"class":68,"line":4415},[66,47314,47315],{"class":758},"# num：该类别图片总数\n",[66,47317,47318],{"class":68,"line":4423},[66,47319,47320],{"class":758},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[66,47322,47323],{"class":68,"line":4428},[66,47324,109],{"emptyLinePlaceholder":108},[66,47326,47327,47329,47331,47333],{"class":68,"line":4434},[66,47328,502],{"class":72},[66,47330,47185],{"class":76},[66,47332,507],{"class":72},[66,47334,47220],{"class":76},[66,47336,47337,47340,47342,47345,47347,47350,47353,47355,47357,47359],{"class":68,"line":4440},[66,47338,47339],{"class":76},"    cla_path ",[66,47341,99],{"class":72},[66,47343,47344],{"class":76}," file_path ",[66,47346,1184],{"class":72},[66,47348,47349],{"class":356}," '\u002F'",[66,47351,47352],{"class":72}," +",[66,47354,47185],{"class":76},[66,47356,1184],{"class":72},[66,47358,47349],{"class":356},[66,47360,47361],{"class":758},"  # 某一类别的子目录\n",[66,47363,47364,47367,47369,47372],{"class":68,"line":4445},[66,47365,47366],{"class":76},"    images ",[66,47368,99],{"class":72},[66,47370,47371],{"class":76}," os.listdir(cla_path)  ",[66,47373,47374],{"class":758},"# iamges 列表存储了该目录下所有图像的名称\n",[66,47376,47377,47380,47382,47384],{"class":68,"line":9759},[66,47378,47379],{"class":76},"    num ",[66,47381,99],{"class":72},[66,47383,9142],{"class":102},[66,47385,47386],{"class":76},"(images)\n",[66,47388,47389,47392,47394,47397,47399,47401,47403,47406,47408,47411],{"class":68,"line":9783},[66,47390,47391],{"class":76},"    eval_index ",[66,47393,99],{"class":72},[66,47395,47396],{"class":76}," random.sample(images, ",[66,47398,2472],{"class":1234},[66,47400,99],{"class":72},[66,47402,2003],{"class":102},[66,47404,47405],{"class":76},"(num ",[66,47407,1208],{"class":72},[66,47409,47410],{"class":76}," split_rate))  ",[66,47412,47413],{"class":758},"# 从images列表中随机抽取 k 个图像名称\n",[66,47415,47416],{"class":68,"line":9788},[66,47417,47418],{"class":758},"    # 遍历该类别下的所有图片\n",[66,47420,47421],{"class":68,"line":9794},[66,47422,47423],{"class":758},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[66,47425,47426,47428,47431,47433,47435],{"class":68,"line":9821},[66,47427,1083],{"class":72},[66,47429,47430],{"class":76}," index, image ",[66,47432,507],{"class":72},[66,47434,33399],{"class":102},[66,47436,47437],{"class":76},"(images):\n",[66,47439,47440],{"class":68,"line":9826},[66,47441,47442],{"class":758},"        # eval_index 中保存验证集val的图像名称\n",[66,47444,47445,47447,47450,47452],{"class":68,"line":9832},[66,47446,4321],{"class":72},[66,47448,47449],{"class":76}," image ",[66,47451,507],{"class":72},[66,47453,47454],{"class":76}," eval_index:\n",[66,47456,47457,47460,47462,47465,47467],{"class":68,"line":9844},[66,47458,47459],{"class":76},"            image_path ",[66,47461,99],{"class":72},[66,47463,47464],{"class":76}," cla_path ",[66,47466,1184],{"class":72},[66,47468,47469],{"class":76}," image\n",[66,47471,47472,47475,47477,47480,47482],{"class":68,"line":9856},[66,47473,47474],{"class":76},"            new_path ",[66,47476,99],{"class":72},[66,47478,47479],{"class":356}," 'data\u002Ftest\u002F'",[66,47481,47352],{"class":72},[66,47483,47484],{"class":76}," cla\n",[66,47486,47487,47490],{"class":68,"line":9868},[66,47488,47489],{"class":76},"            copy(image_path, new_path)  ",[66,47491,47492],{"class":758},"# 将选中的图像复制到新路径\n",[66,47494,47495],{"class":68,"line":11523},[66,47496,109],{"emptyLinePlaceholder":108},[66,47498,47499],{"class":68,"line":11548},[66,47500,47501],{"class":758},"        # 其余的图像保存在训练集train中\n",[66,47503,47504,47506],{"class":68,"line":11571},[66,47505,4358],{"class":72},[66,47507,126],{"class":76},[66,47509,47510,47512,47514,47516,47518],{"class":68,"line":11595},[66,47511,47459],{"class":76},[66,47513,99],{"class":72},[66,47515,47464],{"class":76},[66,47517,1184],{"class":72},[66,47519,47469],{"class":76},[66,47521,47522,47524,47526,47529,47531],{"class":68,"line":11600},[66,47523,47474],{"class":76},[66,47525,99],{"class":72},[66,47527,47528],{"class":356}," 'data\u002Ftrain\u002F'",[66,47530,47352],{"class":72},[66,47532,47484],{"class":76},[66,47534,47535],{"class":68,"line":11605},[66,47536,47537],{"class":76},"            copy(image_path, new_path)\n",[66,47539,47540],{"class":68,"line":11610},[66,47541,47542],{"class":758},"            # 打印进度条信息\n",[66,47544,47545],{"class":68,"line":11619},[66,47546,47547],{"class":758},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[66,47549,47550,47552,47554,47556,47559,47561,47563,47566,47568,47570,47572,47575,47578,47580,47582,47585,47587,47589,47591,47594],{"class":68,"line":11624},[66,47551,395],{"class":102},[66,47553,348],{"class":76},[66,47555,1130],{"class":356},[66,47557,47558],{"class":102},"\\r",[66,47560,2869],{"class":356},[66,47562,34249],{"class":102},[66,47564,47565],{"class":356},"] processing [",[66,47567,34249],{"class":102},[66,47569,2563],{"class":356},[66,47571,34249],{"class":102},[66,47573,47574],{"class":356},"]\"",[66,47576,47577],{"class":76},".format(cla, index ",[66,47579,1184],{"class":72},[66,47581,1187],{"class":102},[66,47583,47584],{"class":76},", num), ",[66,47586,1235],{"class":1234},[66,47588,99],{"class":72},[66,47590,9463],{"class":356},[66,47592,47593],{"class":76},")  ",[66,47595,47596],{"class":758},"# processing bar\n",[66,47598,47599,47601],{"class":68,"line":11630},[66,47600,132],{"class":102},[66,47602,1253],{"class":76},[66,47604,47605],{"class":68,"line":11651},[66,47606,109],{"emptyLinePlaceholder":108},[66,47608,47609,47611,47613,47616],{"class":68,"line":11657},[66,47610,244],{"class":102},[66,47612,348],{"class":76},[66,47614,47615],{"class":356},"\"processing done!\"",[66,47617,313],{"class":76},[19,47619,47620],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[23801,47622,47624],{"id":47623},"_242模型代码","2.4.2.模型代码",[19,47626,47627],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[57,47629,47631],{"className":59,"code":47630,"language":61,"meta":62,"style":62},"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",[23,47632,47633,47639,47649,47659,47663,47679,47687,47701,47711,47715,47745,47749,47783,47829,47833,47867,47913,47917,47921,47955,47985,47989,47997,48011,48033,48055,48073,48077,48091,48095,48099,48115,48119,48127,48141,48151,48195,48199,48227,48231,48241,48269,48273,48309,48313,48341,48345,48355,48387,48419,48447,48451,48461,48493,48525,48557,48589,48621,48649,48653,48663,48695,48727,48739,48743,48755,48759,48763,48775,48783,48803,48807,48811,48815,48819,48823,48827,48841,48849,48857,48869,48883,48891,48895,48903,48913,48923,48933,48943,48953,48959,48963,48967,48979,48999,49007],{"__ignoreMap":62},[66,47634,47635,47637],{"class":68,"line":69},[66,47636,284],{"class":72},[66,47638,32192],{"class":76},[66,47640,47641,47643,47645,47647],{"class":68,"line":80},[66,47642,32532],{"class":72},[66,47644,32535],{"class":76},[66,47646,284],{"class":72},[66,47648,32540],{"class":76},[66,47650,47651,47653,47655,47657],{"class":68,"line":112},[66,47652,32532],{"class":72},[66,47654,32552],{"class":76},[66,47656,284],{"class":72},[66,47658,32557],{"class":76},[66,47660,47661],{"class":68,"line":129},[66,47662,109],{"emptyLinePlaceholder":108},[66,47664,47665,47667,47669,47671,47673,47675,47677],{"class":68,"line":138},[66,47666,16499],{"class":72},[66,47668,43280],{"class":3793},[66,47670,348],{"class":76},[66,47672,32573],{"class":3793},[66,47674,2537],{"class":76},[66,47676,32578],{"class":3793},[66,47678,522],{"class":76},[66,47680,47681,47683,47685],{"class":68,"line":227},[66,47682,32595],{"class":72},[66,47684,32598],{"class":102},[66,47686,43299],{"class":76},[66,47688,47689,47691,47693,47695,47697,47699],{"class":68,"line":236},[66,47690,32611],{"class":102},[66,47692,43306],{"class":76},[66,47694,32617],{"class":102},[66,47696,32620],{"class":76},[66,47698,32623],{"class":102},[66,47700,1253],{"class":76},[66,47702,47703,47705,47707,47709],{"class":68,"line":241},[66,47704,32639],{"class":102},[66,47706,36559],{"class":76},[66,47708,99],{"class":72},[66,47710,36564],{"class":76},[66,47712,47713],{"class":68,"line":372},[66,47714,43329],{"class":758},[66,47716,47717,47719,47721,47723,47725,47727,47729,47731,47733,47735,47737,47739,47741,47743],{"class":68,"line":377},[66,47718,32639],{"class":102},[66,47720,43336],{"class":76},[66,47722,99],{"class":72},[66,47724,32647],{"class":76},[66,47726,32650],{"class":1234},[66,47728,99],{"class":72},[66,47730,43347],{"class":76},[66,47732,32659],{"class":1234},[66,47734,99],{"class":72},[66,47736,43354],{"class":76},[66,47738,32668],{"class":1234},[66,47740,99],{"class":72},[66,47742,304],{"class":102},[66,47744,313],{"class":76},[66,47746,47747],{"class":68,"line":392},[66,47748,43367],{"class":758},[66,47750,47751,47753,47755,47757,47759,47761,47763,47765,47767,47769,47771,47773,47775,47777,47779,47781],{"class":68,"line":405},[66,47752,32639],{"class":102},[66,47754,43374],{"class":76},[66,47756,99],{"class":72},[66,47758,32647],{"class":76},[66,47760,32650],{"class":1234},[66,47762,99],{"class":72},[66,47764,43347],{"class":76},[66,47766,32659],{"class":1234},[66,47768,99],{"class":72},[66,47770,43391],{"class":76},[66,47772,2183],{"class":102},[66,47774,43396],{"class":76},[66,47776,32668],{"class":1234},[66,47778,99],{"class":72},[66,47780,304],{"class":102},[66,47782,313],{"class":76},[66,47784,47785,47787,47789,47791,47793,47795,47797,47799,47801,47803,47805,47807,47809,47811,47813,47815,47817,47819,47821,47823,47825,47827],{"class":68,"line":418},[66,47786,32639],{"class":102},[66,47788,43411],{"class":76},[66,47790,99],{"class":72},[66,47792,32647],{"class":76},[66,47794,32650],{"class":1234},[66,47796,99],{"class":72},[66,47798,43391],{"class":76},[66,47800,2183],{"class":102},[66,47802,43396],{"class":76},[66,47804,32659],{"class":1234},[66,47806,99],{"class":72},[66,47808,43391],{"class":76},[66,47810,304],{"class":102},[66,47812,43396],{"class":76},[66,47814,32668],{"class":1234},[66,47816,99],{"class":72},[66,47818,1520],{"class":102},[66,47820,2362],{"class":76},[66,47822,32677],{"class":1234},[66,47824,99],{"class":72},[66,47826,304],{"class":102},[66,47828,313],{"class":76},[66,47830,47831],{"class":68,"line":430},[66,47832,43456],{"class":758},[66,47834,47835,47837,47839,47841,47843,47845,47847,47849,47851,47853,47855,47857,47859,47861,47863,47865],{"class":68,"line":438},[66,47836,32639],{"class":102},[66,47838,43463],{"class":76},[66,47840,99],{"class":72},[66,47842,32647],{"class":76},[66,47844,32650],{"class":1234},[66,47846,99],{"class":72},[66,47848,43347],{"class":76},[66,47850,32659],{"class":1234},[66,47852,99],{"class":72},[66,47854,43480],{"class":76},[66,47856,2183],{"class":102},[66,47858,43396],{"class":76},[66,47860,32668],{"class":1234},[66,47862,99],{"class":72},[66,47864,304],{"class":102},[66,47866,313],{"class":76},[66,47868,47869,47871,47873,47875,47877,47879,47881,47883,47885,47887,47889,47891,47893,47895,47897,47899,47901,47903,47905,47907,47909,47911],{"class":68,"line":465},[66,47870,32639],{"class":102},[66,47872,43499],{"class":76},[66,47874,99],{"class":72},[66,47876,32647],{"class":76},[66,47878,32650],{"class":1234},[66,47880,99],{"class":72},[66,47882,43480],{"class":76},[66,47884,2183],{"class":102},[66,47886,43396],{"class":76},[66,47888,32659],{"class":1234},[66,47890,99],{"class":72},[66,47892,43480],{"class":76},[66,47894,304],{"class":102},[66,47896,43396],{"class":76},[66,47898,32668],{"class":1234},[66,47900,99],{"class":72},[66,47902,752],{"class":102},[66,47904,2362],{"class":76},[66,47906,32677],{"class":1234},[66,47908,99],{"class":72},[66,47910,795],{"class":102},[66,47912,313],{"class":76},[66,47914,47915],{"class":68,"line":1805},[66,47916,43544],{"class":758},[66,47918,47919],{"class":68,"line":1817},[66,47920,43549],{"class":758},[66,47922,47923,47925,47927,47929,47931,47933,47935,47937,47939,47941,47943,47945,47947,47949,47951,47953],{"class":68,"line":1822},[66,47924,32639],{"class":102},[66,47926,43556],{"class":76},[66,47928,99],{"class":72},[66,47930,36617],{"class":76},[66,47932,32668],{"class":1234},[66,47934,99],{"class":72},[66,47936,1520],{"class":102},[66,47938,2362],{"class":76},[66,47940,32723],{"class":1234},[66,47942,99],{"class":72},[66,47944,304],{"class":102},[66,47946,2362],{"class":76},[66,47948,32677],{"class":1234},[66,47950,99],{"class":72},[66,47952,304],{"class":102},[66,47954,313],{"class":76},[66,47956,47957,47959,47961,47963,47965,47967,47969,47971,47973,47975,47977,47979,47981,47983],{"class":68,"line":1829},[66,47958,32639],{"class":102},[66,47960,43591],{"class":76},[66,47962,99],{"class":72},[66,47964,32647],{"class":76},[66,47966,32650],{"class":1234},[66,47968,99],{"class":72},[66,47970,43347],{"class":76},[66,47972,32659],{"class":1234},[66,47974,99],{"class":72},[66,47976,43608],{"class":76},[66,47978,32668],{"class":1234},[66,47980,99],{"class":72},[66,47982,304],{"class":102},[66,47984,313],{"class":76},[66,47986,47987],{"class":68,"line":3529},[66,47988,109],{"emptyLinePlaceholder":108},[66,47990,47991,47993,47995],{"class":68,"line":3557},[66,47992,32595],{"class":72},[66,47994,32887],{"class":3793},[66,47996,32890],{"class":76},[66,47998,47999,48001,48003,48005,48007,48009],{"class":68,"line":3562},[66,48000,43633],{"class":76},[66,48002,99],{"class":72},[66,48004,32617],{"class":102},[66,48006,36972],{"class":76},[66,48008,32617],{"class":102},[66,48010,43644],{"class":76},[66,48012,48013,48015,48017,48019,48021,48023,48025,48027,48029,48031],{"class":68,"line":3579},[66,48014,8896],{"class":76},[66,48016,99],{"class":72},[66,48018,32617],{"class":102},[66,48020,36972],{"class":76},[66,48022,32617],{"class":102},[66,48024,43659],{"class":76},[66,48026,32617],{"class":102},[66,48028,36972],{"class":76},[66,48030,32617],{"class":102},[66,48032,43668],{"class":76},[66,48034,48035,48037,48039,48041,48043,48045,48047,48049,48051,48053],{"class":68,"line":3584},[66,48036,43673],{"class":76},[66,48038,99],{"class":72},[66,48040,32617],{"class":102},[66,48042,36972],{"class":76},[66,48044,32617],{"class":102},[66,48046,43684],{"class":76},[66,48048,32617],{"class":102},[66,48050,36972],{"class":76},[66,48052,32617],{"class":102},[66,48054,43693],{"class":76},[66,48056,48057,48059,48061,48063,48065,48067,48069,48071],{"class":68,"line":3589},[66,48058,43698],{"class":76},[66,48060,99],{"class":72},[66,48062,32617],{"class":102},[66,48064,36972],{"class":76},[66,48066,32617],{"class":102},[66,48068,43709],{"class":76},[66,48070,32617],{"class":102},[66,48072,43714],{"class":76},[66,48074,48075],{"class":68,"line":3594},[66,48076,43719],{"class":758},[66,48078,48079,48081,48083,48085,48087,48089],{"class":68,"line":3608},[66,48080,16557],{"class":72},[66,48082,43726],{"class":76},[66,48084,34475],{"class":1234},[66,48086,99],{"class":72},[66,48088,304],{"class":102},[66,48090,313],{"class":76},[66,48092,48093],{"class":68,"line":3613},[66,48094,109],{"emptyLinePlaceholder":108},[66,48096,48097],{"class":68,"line":4401},[66,48098,43747],{"class":758},[66,48100,48101,48103,48105,48107,48109,48111,48113],{"class":68,"line":4415},[66,48102,16499],{"class":72},[66,48104,43754],{"class":3793},[66,48106,348],{"class":76},[66,48108,32573],{"class":3793},[66,48110,2537],{"class":76},[66,48112,32578],{"class":3793},[66,48114,522],{"class":76},[66,48116,48117],{"class":68,"line":4423},[66,48118,43769],{"class":758},[66,48120,48121,48123,48125],{"class":68,"line":4428},[66,48122,32595],{"class":72},[66,48124,32598],{"class":102},[66,48126,43778],{"class":76},[66,48128,48129,48131,48133,48135,48137,48139],{"class":68,"line":4434},[66,48130,32611],{"class":102},[66,48132,43785],{"class":76},[66,48134,32617],{"class":102},[66,48136,32620],{"class":76},[66,48138,32623],{"class":102},[66,48140,1253],{"class":76},[66,48142,48143,48145,48147,48149],{"class":68,"line":4440},[66,48144,32639],{"class":102},[66,48146,43800],{"class":76},[66,48148,99],{"class":72},[66,48150,39797],{"class":76},[66,48152,48153,48155,48157,48159,48161,48163,48165,48167,48169,48171,48173,48175,48177,48179,48181,48183,48185,48187,48189,48191,48193],{"class":68,"line":4445},[66,48154,39802],{"class":76},[66,48156,32650],{"class":1234},[66,48158,99],{"class":72},[66,48160,1520],{"class":102},[66,48162,2362],{"class":76},[66,48164,32659],{"class":1234},[66,48166,99],{"class":72},[66,48168,2195],{"class":102},[66,48170,2362],{"class":76},[66,48172,32668],{"class":1234},[66,48174,99],{"class":72},[66,48176,2353],{"class":102},[66,48178,2362],{"class":76},[66,48180,32723],{"class":1234},[66,48182,99],{"class":72},[66,48184,795],{"class":102},[66,48186,2362],{"class":76},[66,48188,32677],{"class":1234},[66,48190,99],{"class":72},[66,48192,1520],{"class":102},[66,48194,39835],{"class":76},[66,48196,48197],{"class":68,"line":9759},[66,48198,39840],{"class":76},[66,48200,48201,48203,48205,48207,48209,48211,48213,48215,48217,48219,48221,48223,48225],{"class":68,"line":9783},[66,48202,39885],{"class":76},[66,48204,32668],{"class":1234},[66,48206,99],{"class":72},[66,48208,1520],{"class":102},[66,48210,2362],{"class":76},[66,48212,32723],{"class":1234},[66,48214,99],{"class":72},[66,48216,795],{"class":102},[66,48218,2362],{"class":76},[66,48220,32677],{"class":1234},[66,48222,99],{"class":72},[66,48224,304],{"class":102},[66,48226,313],{"class":76},[66,48228,48229],{"class":68,"line":9788},[66,48230,39914],{"class":76},[66,48232,48233,48235,48237,48239],{"class":68,"line":9794},[66,48234,32639],{"class":102},[66,48236,43891],{"class":76},[66,48238,99],{"class":72},[66,48240,39797],{"class":76},[66,48242,48243,48245,48247,48249,48251,48253,48255,48257,48259,48261,48263,48265,48267],{"class":68,"line":9821},[66,48244,39802],{"class":76},[66,48246,32650],{"class":1234},[66,48248,99],{"class":72},[66,48250,2195],{"class":102},[66,48252,2362],{"class":76},[66,48254,32659],{"class":1234},[66,48256,99],{"class":72},[66,48258,2195],{"class":102},[66,48260,2362],{"class":76},[66,48262,32668],{"class":1234},[66,48264,99],{"class":72},[66,48266,304],{"class":102},[66,48268,39835],{"class":76},[66,48270,48271],{"class":68,"line":9826},[66,48272,39840],{"class":76},[66,48274,48275,48277,48279,48281,48283,48285,48287,48289,48291,48293,48295,48297,48299,48301,48303,48305,48307],{"class":68,"line":9832},[66,48276,39802],{"class":76},[66,48278,32650],{"class":1234},[66,48280,99],{"class":72},[66,48282,2195],{"class":102},[66,48284,2362],{"class":76},[66,48286,32659],{"class":1234},[66,48288,99],{"class":72},[66,48290,43946],{"class":102},[66,48292,2362],{"class":76},[66,48294,32668],{"class":1234},[66,48296,99],{"class":72},[66,48298,1520],{"class":102},[66,48300,2362],{"class":76},[66,48302,32677],{"class":1234},[66,48304,99],{"class":72},[66,48306,304],{"class":102},[66,48308,39835],{"class":76},[66,48310,48311],{"class":68,"line":9844},[66,48312,39840],{"class":76},[66,48314,48315,48317,48319,48321,48323,48325,48327,48329,48331,48333,48335,48337,48339],{"class":68,"line":9856},[66,48316,39885],{"class":76},[66,48318,32668],{"class":1234},[66,48320,99],{"class":72},[66,48322,1520],{"class":102},[66,48324,2362],{"class":76},[66,48326,32723],{"class":1234},[66,48328,99],{"class":72},[66,48330,795],{"class":102},[66,48332,2362],{"class":76},[66,48334,32677],{"class":1234},[66,48336,99],{"class":72},[66,48338,304],{"class":102},[66,48340,313],{"class":76},[66,48342,48343],{"class":68,"line":9868},[66,48344,39914],{"class":76},[66,48346,48347,48349,48351,48353],{"class":68,"line":11523},[66,48348,32639],{"class":102},[66,48350,44007],{"class":76},[66,48352,99],{"class":72},[66,48354,39797],{"class":76},[66,48356,48357,48359,48361,48363,48365,48367,48369,48371,48373,48375,48377,48379,48381,48383,48385],{"class":68,"line":11548},[66,48358,44016],{"class":76},[66,48360,43946],{"class":102},[66,48362,2362],{"class":76},[66,48364,2195],{"class":102},[66,48366,44025],{"class":76},[66,48368,2201],{"class":102},[66,48370,2362],{"class":76},[66,48372,33862],{"class":102},[66,48374,44034],{"class":76},[66,48376,2580],{"class":102},[66,48378,2362],{"class":76},[66,48380,2189],{"class":102},[66,48382,44043],{"class":76},[66,48384,2189],{"class":102},[66,48386,39835],{"class":76},[66,48388,48389,48391,48393,48395,48397,48399,48401,48403,48405,48407,48409,48411,48413,48415,48417],{"class":68,"line":11571},[66,48390,44016],{"class":76},[66,48392,36658],{"class":102},[66,48394,2362],{"class":76},[66,48396,33862],{"class":102},[66,48398,44025],{"class":76},[66,48400,33862],{"class":102},[66,48402,2362],{"class":76},[66,48404,43946],{"class":102},[66,48406,44034],{"class":76},[66,48408,2189],{"class":102},[66,48410,2362],{"class":76},[66,48412,2201],{"class":102},[66,48414,44043],{"class":76},[66,48416,2195],{"class":102},[66,48418,39835],{"class":76},[66,48420,48421,48423,48425,48427,48429,48431,48433,48435,48437,48439,48441,48443,48445],{"class":68,"line":11595},[66,48422,39885],{"class":76},[66,48424,32668],{"class":1234},[66,48426,99],{"class":72},[66,48428,1520],{"class":102},[66,48430,2362],{"class":76},[66,48432,32723],{"class":1234},[66,48434,99],{"class":72},[66,48436,795],{"class":102},[66,48438,2362],{"class":76},[66,48440,32677],{"class":1234},[66,48442,99],{"class":72},[66,48444,304],{"class":102},[66,48446,313],{"class":76},[66,48448,48449],{"class":68,"line":11600},[66,48450,39914],{"class":76},[66,48452,48453,48455,48457,48459],{"class":68,"line":11605},[66,48454,32639],{"class":102},[66,48456,44118],{"class":76},[66,48458,99],{"class":72},[66,48460,39797],{"class":76},[66,48462,48463,48465,48467,48469,48471,48473,48475,48477,48479,48481,48483,48485,48487,48489,48491],{"class":68,"line":11610},[66,48464,44016],{"class":76},[66,48466,44129],{"class":102},[66,48468,2362],{"class":76},[66,48470,43946],{"class":102},[66,48472,44025],{"class":76},[66,48474,2201],{"class":102},[66,48476,2362],{"class":76},[66,48478,44142],{"class":102},[66,48480,44034],{"class":76},[66,48482,2580],{"class":102},[66,48484,2362],{"class":76},[66,48486,2586],{"class":102},[66,48488,44043],{"class":76},[66,48490,2195],{"class":102},[66,48492,39835],{"class":76},[66,48494,48495,48497,48499,48501,48503,48505,48507,48509,48511,48513,48515,48517,48519,48521,48523],{"class":68,"line":11619},[66,48496,44016],{"class":76},[66,48498,40245],{"class":102},[66,48500,2362],{"class":76},[66,48502,22851],{"class":102},[66,48504,44025],{"class":76},[66,48506,2597],{"class":102},[66,48508,2362],{"class":76},[66,48510,33294],{"class":102},[66,48512,44034],{"class":76},[66,48514,2779],{"class":102},[66,48516,2362],{"class":76},[66,48518,2195],{"class":102},[66,48520,44043],{"class":76},[66,48522,2195],{"class":102},[66,48524,39835],{"class":76},[66,48526,48527,48529,48531,48533,48535,48537,48539,48541,48543,48545,48547,48549,48551,48553,48555],{"class":68,"line":11624},[66,48528,44016],{"class":76},[66,48530,40245],{"class":102},[66,48532,2362],{"class":76},[66,48534,33862],{"class":102},[66,48536,44025],{"class":76},[66,48538,33862],{"class":102},[66,48540,2362],{"class":76},[66,48542,36658],{"class":102},[66,48544,44034],{"class":76},[66,48546,2779],{"class":102},[66,48548,2362],{"class":76},[66,48550,2195],{"class":102},[66,48552,44043],{"class":76},[66,48554,2195],{"class":102},[66,48556,39835],{"class":76},[66,48558,48559,48561,48563,48565,48567,48569,48571,48573,48575,48577,48579,48581,48583,48585,48587],{"class":68,"line":11630},[66,48560,44016],{"class":76},[66,48562,40245],{"class":102},[66,48564,2362],{"class":76},[66,48566,2597],{"class":102},[66,48568,44025],{"class":76},[66,48570,33862],{"class":102},[66,48572,2362],{"class":76},[66,48574,44239],{"class":102},[66,48576,44034],{"class":76},[66,48578,2189],{"class":102},[66,48580,2362],{"class":76},[66,48582,2195],{"class":102},[66,48584,44043],{"class":76},[66,48586,2195],{"class":102},[66,48588,39835],{"class":76},[66,48590,48591,48593,48595,48597,48599,48601,48603,48605,48607,48609,48611,48613,48615,48617,48619],{"class":68,"line":11651},[66,48592,44016],{"class":76},[66,48594,44260],{"class":102},[66,48596,2362],{"class":76},[66,48598,36658],{"class":102},[66,48600,44025],{"class":76},[66,48602,22851],{"class":102},[66,48604,2362],{"class":76},[66,48606,44273],{"class":102},[66,48608,44034],{"class":76},[66,48610,2189],{"class":102},[66,48612,2362],{"class":76},[66,48614,33862],{"class":102},[66,48616,44043],{"class":76},[66,48618,33862],{"class":102},[66,48620,39835],{"class":76},[66,48622,48623,48625,48627,48629,48631,48633,48635,48637,48639,48641,48643,48645,48647],{"class":68,"line":11657},[66,48624,39885],{"class":76},[66,48626,32668],{"class":1234},[66,48628,99],{"class":72},[66,48630,1520],{"class":102},[66,48632,2362],{"class":76},[66,48634,32723],{"class":1234},[66,48636,99],{"class":72},[66,48638,795],{"class":102},[66,48640,2362],{"class":76},[66,48642,32677],{"class":1234},[66,48644,99],{"class":72},[66,48646,304],{"class":102},[66,48648,313],{"class":76},[66,48650,48651],{"class":68,"line":11671},[66,48652,39914],{"class":76},[66,48654,48655,48657,48659,48661],{"class":68,"line":11677},[66,48656,32639],{"class":102},[66,48658,44326],{"class":76},[66,48660,99],{"class":72},[66,48662,39797],{"class":76},[66,48664,48665,48667,48669,48671,48673,48675,48677,48679,48681,48683,48685,48687,48689,48691,48693],{"class":68,"line":11704},[66,48666,44016],{"class":76},[66,48668,44337],{"class":102},[66,48670,2362],{"class":76},[66,48672,36658],{"class":102},[66,48674,44025],{"class":76},[66,48676,22851],{"class":102},[66,48678,2362],{"class":76},[66,48680,44273],{"class":102},[66,48682,44034],{"class":76},[66,48684,2189],{"class":102},[66,48686,2362],{"class":76},[66,48688,33862],{"class":102},[66,48690,44043],{"class":76},[66,48692,33862],{"class":102},[66,48694,39835],{"class":76},[66,48696,48697,48699,48701,48703,48705,48707,48709,48711,48713,48715,48717,48719,48721,48723,48725],{"class":68,"line":11713},[66,48698,44016],{"class":76},[66,48700,44337],{"class":102},[66,48702,2362],{"class":76},[66,48704,36728],{"class":102},[66,48706,44025],{"class":76},[66,48708,43946],{"class":102},[66,48710,2362],{"class":76},[66,48712,36728],{"class":102},[66,48714,44034],{"class":76},[66,48716,2586],{"class":102},[66,48718,2362],{"class":76},[66,48720,33862],{"class":102},[66,48722,44043],{"class":76},[66,48724,33862],{"class":102},[66,48726,39835],{"class":76},[66,48728,48729,48731,48733,48735,48737],{"class":68,"line":11719},[66,48730,44400],{"class":76},[66,48732,304],{"class":102},[66,48734,2362],{"class":76},[66,48736,304],{"class":102},[66,48738,44409],{"class":76},[66,48740,48741],{"class":68,"line":11727},[66,48742,40578],{"class":76},[66,48744,48745,48747,48749,48751,48753],{"class":68,"line":11732},[66,48746,40583],{"class":76},[66,48748,44420],{"class":102},[66,48750,2362],{"class":76},[66,48752,795],{"class":102},[66,48754,313],{"class":76},[66,48756,48757],{"class":68,"line":18407},[66,48758,39914],{"class":76},[66,48760,48761],{"class":68,"line":18413},[66,48762,44435],{"class":758},[66,48764,48765,48767,48769,48771,48773],{"class":68,"line":18436},[66,48766,5222],{"class":72},[66,48768,40656],{"class":76},[66,48770,507],{"class":72},[66,48772,40661],{"class":102},[66,48774,40664],{"class":76},[66,48776,48777,48779,48781],{"class":68,"line":18442},[66,48778,6458],{"class":72},[66,48780,40676],{"class":102},[66,48782,40679],{"class":76},[66,48784,48785,48787,48789,48791,48793,48795,48797,48799,48801],{"class":68,"line":18465},[66,48786,40689],{"class":76},[66,48788,44462],{"class":1234},[66,48790,99],{"class":72},[66,48792,44467],{"class":356},[66,48794,2362],{"class":76},[66,48796,40692],{"class":1234},[66,48798,99],{"class":72},[66,48800,40697],{"class":356},[66,48802,313],{"class":76},[66,48804,48805],{"class":68,"line":18479},[66,48806,44482],{"class":758},[66,48808,48809],{"class":68,"line":18499},[66,48810,44487],{"class":758},[66,48812,48813],{"class":68,"line":18505},[66,48814,44492],{"class":758},[66,48816,48817],{"class":68,"line":18516},[66,48818,44497],{"class":758},[66,48820,48821],{"class":68,"line":18539},[66,48822,44502],{"class":758},[66,48824,48825],{"class":68,"line":18561},[66,48826,44507],{"class":758},[66,48828,48829,48831,48833,48835,48837,48839],{"class":68,"line":18566},[66,48830,40709],{"class":72},[66,48832,40712],{"class":76},[66,48834,40715],{"class":72},[66,48836,40718],{"class":72},[66,48838,40721],{"class":102},[66,48840,126],{"class":76},[66,48842,48843,48845,48847],{"class":68,"line":18572},[66,48844,40733],{"class":76},[66,48846,2183],{"class":102},[66,48848,313],{"class":76},[66,48850,48851,48853,48855],{"class":68,"line":18586},[66,48852,44534],{"class":72},[66,48854,40676],{"class":102},[66,48856,40752],{"class":76},[66,48858,48859,48861,48863,48865,48867],{"class":68,"line":18599},[66,48860,44543],{"class":76},[66,48862,2183],{"class":102},[66,48864,2362],{"class":76},[66,48866,40774],{"class":102},[66,48868,313],{"class":76},[66,48870,48871,48873,48875,48877,48879,48881],{"class":68,"line":18604},[66,48872,44556],{"class":72},[66,48874,40712],{"class":76},[66,48876,40715],{"class":72},[66,48878,40718],{"class":72},[66,48880,40721],{"class":102},[66,48882,126],{"class":76},[66,48884,48885,48887,48889],{"class":68,"line":18618},[66,48886,44571],{"class":76},[66,48888,2183],{"class":102},[66,48890,313],{"class":76},[66,48892,48893],{"class":68,"line":18623},[66,48894,36953],{"class":758},[66,48896,48897,48899,48901],{"class":68,"line":18629},[66,48898,32595],{"class":72},[66,48900,32887],{"class":3793},[66,48902,32890],{"class":76},[66,48904,48905,48907,48909,48911],{"class":68,"line":18634},[66,48906,32895],{"class":76},[66,48908,99],{"class":72},[66,48910,32617],{"class":102},[66,48912,44598],{"class":76},[66,48914,48915,48917,48919,48921],{"class":68,"line":18648},[66,48916,32895],{"class":76},[66,48918,99],{"class":72},[66,48920,32617],{"class":102},[66,48922,44609],{"class":76},[66,48924,48925,48927,48929,48931],{"class":68,"line":18653},[66,48926,32895],{"class":76},[66,48928,99],{"class":72},[66,48930,32617],{"class":102},[66,48932,44620],{"class":76},[66,48934,48935,48937,48939,48941],{"class":68,"line":18658},[66,48936,32895],{"class":76},[66,48938,99],{"class":72},[66,48940,32617],{"class":102},[66,48942,44631],{"class":76},[66,48944,48945,48947,48949,48951],{"class":68,"line":18672},[66,48946,32895],{"class":76},[66,48948,99],{"class":72},[66,48950,32617],{"class":102},[66,48952,44642],{"class":76},[66,48954,48955,48957],{"class":68,"line":18684},[66,48956,16557],{"class":72},[66,48958,33003],{"class":76},[66,48960,48961],{"class":68,"line":18689},[66,48962,109],{"emptyLinePlaceholder":108},[66,48964,48965],{"class":68,"line":18702},[66,48966,44657],{"class":758},[66,48968,48969,48971,48973,48975,48977],{"class":68,"line":18707},[66,48970,3373],{"class":72},[66,48972,33014],{"class":102},[66,48974,531],{"class":72},[66,48976,33019],{"class":356},[66,48978,126],{"class":76},[66,48980,48981,48983,48985,48987,48989,48991,48993,48995,48997],{"class":68,"line":18712},[66,48982,33031],{"class":76},[66,48984,99],{"class":72},[66,48986,32247],{"class":76},[66,48988,33038],{"class":356},[66,48990,3534],{"class":72},[66,48992,33043],{"class":76},[66,48994,1292],{"class":72},[66,48996,32272],{"class":356},[66,48998,313],{"class":76},[66,49000,49001,49003,49005],{"class":68,"line":18717},[66,49002,33083],{"class":76},[66,49004,99],{"class":72},[66,49006,44698],{"class":76},[66,49008,49009,49011,49013,49015,49017,49019,49021,49023],{"class":68,"line":18730},[66,49010,132],{"class":102},[66,49012,33095],{"class":76},[66,49014,304],{"class":102},[66,49016,2362],{"class":76},[66,49018,33294],{"class":102},[66,49020,2362],{"class":76},[66,49022,33294],{"class":102},[66,49024,33108],{"class":76},[23801,49026,49028],{"id":49027},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,49030,49031],{},"计算图片的均值与方差，用于训练中归一化处理操作",[57,49033,49035],{"className":59,"code":49034,"language":61,"meta":62,"style":62},"# 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",[23,49036,49037,49042,49055,49060,49066,49071,49081,49085,49090,49100,49104,49109,49118,49135,49139,49144,49156,49168,49199,49208,49218,49228,49232,49237,49252,49256,49261,49266,49271,49281,49286,49311,49315,49320,49335,49339,49352,49356,49361,49366,49371,49376,49381,49391,49401,49424,49432,49440,49448,49452,49464,49468,49473,49477,49481,49488,49508,49532,49539,49553,49558,49563,49567,49581,49585,49597],{"__ignoreMap":62},[66,49038,49039],{"class":68,"line":69},[66,49040,49041],{"class":758},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[66,49043,49044,49046,49049,49052],{"class":68,"line":80},[66,49045,32532],{"class":72},[66,49047,49048],{"class":102}," PIL",[66,49050,49051],{"class":72}," import",[66,49053,49054],{"class":76}," Image\n",[66,49056,49057],{"class":68,"line":112},[66,49058,49059],{"class":758},"# os 用来处理文件夹和文件路径\n",[66,49061,49062,49064],{"class":68,"line":129},[66,49063,284],{"class":72},[66,49065,47092],{"class":76},[66,49067,49068],{"class":68,"line":138},[66,49069,49070],{"class":758},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[66,49072,49073,49075,49077,49079],{"class":68,"line":227},[66,49074,284],{"class":72},[66,49076,33173],{"class":76},[66,49078,33176],{"class":72},[66,49080,33179],{"class":76},[66,49082,49083],{"class":68,"line":236},[66,49084,109],{"emptyLinePlaceholder":108},[66,49086,49087],{"class":68,"line":241},[66,49088,49089],{"class":758},"# 文件夹路径，包含所有图片文件\n",[66,49091,49092,49095,49097],{"class":68,"line":372},[66,49093,49094],{"class":76},"folder_path ",[66,49096,99],{"class":72},[66,49098,49099],{"class":356}," 'data_cat_dog'\n",[66,49101,49102],{"class":68,"line":377},[66,49103,109],{"emptyLinePlaceholder":108},[66,49105,49106],{"class":68,"line":392},[66,49107,49108],{"class":758},"# 初始化累积变量\n",[66,49110,49111,49114,49116],{"class":68,"line":405},[66,49112,49113],{"class":76},"total_pixels ",[66,49115,99],{"class":72},[66,49117,197],{"class":102},[66,49119,49120,49123,49125,49128,49130,49132],{"class":68,"line":418},[66,49121,49122],{"class":76},"sum_normalized_pixel_values ",[66,49124,99],{"class":72},[66,49126,49127],{"class":76}," np.zeros(",[66,49129,1520],{"class":102},[66,49131,47593],{"class":76},[66,49133,49134],{"class":758},"# 如果是RGB图像，需要三个通道的均值和方差\n",[66,49136,49137],{"class":68,"line":430},[66,49138,109],{"emptyLinePlaceholder":108},[66,49140,49141],{"class":68,"line":438},[66,49142,49143],{"class":758},"# 遍历文件夹中的图片文件\n",[66,49145,49146,49148,49151,49153],{"class":68,"line":465},[66,49147,502],{"class":72},[66,49149,49150],{"class":76}," root, dirs, files ",[66,49152,507],{"class":72},[66,49154,49155],{"class":76}," os.walk(folder_path):\n",[66,49157,49158,49160,49163,49165],{"class":68,"line":1805},[66,49159,1083],{"class":72},[66,49161,49162],{"class":76}," filename ",[66,49164,507],{"class":72},[66,49166,49167],{"class":76}," files:\n",[66,49169,49170,49172,49175,49178,49180,49183,49185,49188,49190,49193,49196],{"class":68,"line":1817},[66,49171,4321],{"class":72},[66,49173,49174],{"class":76}," filename.endswith((",[66,49176,49177],{"class":356},"'.jpg'",[66,49179,307],{"class":76},[66,49181,49182],{"class":356},"'.jpeg'",[66,49184,307],{"class":76},[66,49186,49187],{"class":356},"'.png'",[66,49189,307],{"class":76},[66,49191,49192],{"class":356},"'.bmp'",[66,49194,49195],{"class":76},")):  ",[66,49197,49198],{"class":758},"# 可根据实际情况添加其他格式\n",[66,49200,49201,49203,49205],{"class":68,"line":1822},[66,49202,47459],{"class":76},[66,49204,99],{"class":72},[66,49206,49207],{"class":76}," os.path.join(root, filename)\n",[66,49209,49210,49213,49215],{"class":68,"line":1829},[66,49211,49212],{"class":76},"            image ",[66,49214,99],{"class":72},[66,49216,49217],{"class":76}," Image.open(image_path)\n",[66,49219,49220,49223,49225],{"class":68,"line":3529},[66,49221,49222],{"class":76},"            image_array ",[66,49224,99],{"class":72},[66,49226,49227],{"class":76}," np.array(image)\n",[66,49229,49230],{"class":68,"line":3557},[66,49231,109],{"emptyLinePlaceholder":108},[66,49233,49234],{"class":68,"line":3562},[66,49235,49236],{"class":758},"            # 归一化像素值到0-1之间\n",[66,49238,49239,49242,49244,49247,49249],{"class":68,"line":3579},[66,49240,49241],{"class":76},"            normalized_image_array ",[66,49243,99],{"class":72},[66,49245,49246],{"class":76}," image_array ",[66,49248,2563],{"class":72},[66,49250,49251],{"class":102}," 255.0\n",[66,49253,49254],{"class":68,"line":3584},[66,49255,109],{"emptyLinePlaceholder":108},[66,49257,49258],{"class":68,"line":3589},[66,49259,49260],{"class":758},"            # print(image_path)\n",[66,49262,49263],{"class":68,"line":3594},[66,49264,49265],{"class":758},"            # print(normalized_image_array.shape)\n",[66,49267,49268],{"class":68,"line":3608},[66,49269,49270],{"class":758},"            # 累积归一化后的像素值和像素数量\n",[66,49272,49273,49276,49278],{"class":68,"line":3613},[66,49274,49275],{"class":76},"            total_pixels ",[66,49277,144],{"class":72},[66,49279,49280],{"class":76}," normalized_image_array.size\n",[66,49282,49283],{"class":68,"line":4401},[66,49284,49285],{"class":758},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[66,49287,49288,49291,49293,49296,49299,49301,49303,49305,49307,49309],{"class":68,"line":4415},[66,49289,49290],{"class":76},"            sum_normalized_pixel_values ",[66,49292,144],{"class":72},[66,49294,49295],{"class":76}," np.sum(normalized_image_array, ",[66,49297,49298],{"class":1234},"axis",[66,49300,99],{"class":72},[66,49302,348],{"class":76},[66,49304,2183],{"class":102},[66,49306,307],{"class":76},[66,49308,304],{"class":102},[66,49310,360],{"class":76},[66,49312,49313],{"class":68,"line":4423},[66,49314,109],{"emptyLinePlaceholder":108},[66,49316,49317],{"class":68,"line":4428},[66,49318,49319],{"class":758},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[66,49321,49322,49325,49327,49330,49332],{"class":68,"line":4434},[66,49323,49324],{"class":76},"mean ",[66,49326,99],{"class":72},[66,49328,49329],{"class":76}," sum_normalized_pixel_values ",[66,49331,2563],{"class":72},[66,49333,49334],{"class":76}," total_pixels\n",[66,49336,49337],{"class":68,"line":4440},[66,49338,109],{"emptyLinePlaceholder":108},[66,49340,49341,49344,49346,49348,49350],{"class":68,"line":4445},[66,49342,49343],{"class":76},"sum_squared_diff ",[66,49345,99],{"class":72},[66,49347,49127],{"class":76},[66,49349,1520],{"class":102},[66,49351,313],{"class":76},[66,49353,49354],{"class":68,"line":9759},[66,49355,109],{"emptyLinePlaceholder":108},[66,49357,49358],{"class":68,"line":9783},[66,49359,49360],{"class":758},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[66,49362,49363],{"class":68,"line":9788},[66,49364,49365],{"class":758},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[66,49367,49368],{"class":68,"line":9794},[66,49369,49370],{"class":758},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[66,49372,49373],{"class":68,"line":9821},[66,49374,49375],{"class":758},"# Image.open(image_path)：打开图片\n",[66,49377,49378],{"class":68,"line":9826},[66,49379,49380],{"class":758},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[66,49382,49383,49385,49387,49389],{"class":68,"line":9832},[66,49384,502],{"class":72},[66,49386,49150],{"class":76},[66,49388,507],{"class":72},[66,49390,49155],{"class":76},[66,49392,49393,49395,49397,49399],{"class":68,"line":9844},[66,49394,1083],{"class":72},[66,49396,49162],{"class":76},[66,49398,507],{"class":72},[66,49400,49167],{"class":76},[66,49402,49403,49405,49407,49409,49411,49413,49415,49417,49419,49421],{"class":68,"line":9856},[66,49404,4321],{"class":72},[66,49406,49174],{"class":76},[66,49408,49177],{"class":356},[66,49410,307],{"class":76},[66,49412,49182],{"class":356},[66,49414,307],{"class":76},[66,49416,49187],{"class":356},[66,49418,307],{"class":76},[66,49420,49192],{"class":356},[66,49422,49423],{"class":76},")):\n",[66,49425,49426,49428,49430],{"class":68,"line":9868},[66,49427,47459],{"class":76},[66,49429,99],{"class":72},[66,49431,49207],{"class":76},[66,49433,49434,49436,49438],{"class":68,"line":11523},[66,49435,49212],{"class":76},[66,49437,99],{"class":72},[66,49439,49217],{"class":76},[66,49441,49442,49444,49446],{"class":68,"line":11548},[66,49443,49222],{"class":76},[66,49445,99],{"class":72},[66,49447,49227],{"class":76},[66,49449,49450],{"class":68,"line":11571},[66,49451,49236],{"class":758},[66,49453,49454,49456,49458,49460,49462],{"class":68,"line":11595},[66,49455,49241],{"class":76},[66,49457,99],{"class":72},[66,49459,49246],{"class":76},[66,49461,2563],{"class":72},[66,49463,49251],{"class":102},[66,49465,49466],{"class":68,"line":11600},[66,49467,49265],{"class":758},[66,49469,49470],{"class":68,"line":11605},[66,49471,49472],{"class":758},"            # print(mean.shape)\n",[66,49474,49475],{"class":68,"line":11610},[66,49476,49260],{"class":758},[66,49478,49479],{"class":68,"line":11619},[66,49480,109],{"emptyLinePlaceholder":108},[66,49482,49483,49486],{"class":68,"line":11624},[66,49484,49485],{"class":72},"            try",[66,49487,126],{"class":76},[66,49489,49490,49493,49495,49498,49500,49503,49505],{"class":68,"line":11630},[66,49491,49492],{"class":76},"                diff ",[66,49494,99],{"class":72},[66,49496,49497],{"class":76}," (normalized_image_array ",[66,49499,2511],{"class":72},[66,49501,49502],{"class":76}," mean) ",[66,49504,12467],{"class":72},[66,49506,49507],{"class":102}," 2\n",[66,49509,49510,49513,49515,49518,49520,49522,49524,49526,49528,49530],{"class":68,"line":11651},[66,49511,49512],{"class":76},"                sum_squared_diff ",[66,49514,144],{"class":72},[66,49516,49517],{"class":76}," np.sum(diff, ",[66,49519,49298],{"class":1234},[66,49521,99],{"class":72},[66,49523,348],{"class":76},[66,49525,2183],{"class":102},[66,49527,307],{"class":76},[66,49529,304],{"class":102},[66,49531,360],{"class":76},[66,49533,49534,49537],{"class":68,"line":11657},[66,49535,49536],{"class":72},"            except",[66,49538,126],{"class":76},[66,49540,49541,49544,49546,49548,49551],{"class":68,"line":11671},[66,49542,49543],{"class":102},"                print",[66,49545,348],{"class":76},[66,49547,445],{"class":72},[66,49549,49550],{"class":356},"\"捕获到自定义异常\"",[66,49552,313],{"class":76},[66,49554,49555],{"class":68,"line":11677},[66,49556,49557],{"class":758},"            # diff = (normalized_image_array - mean) ** 2\n",[66,49559,49560],{"class":68,"line":11704},[66,49561,49562],{"class":758},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[66,49564,49565],{"class":68,"line":11713},[66,49566,109],{"emptyLinePlaceholder":108},[66,49568,49569,49572,49574,49577,49579],{"class":68,"line":11719},[66,49570,49571],{"class":76},"variance ",[66,49573,99],{"class":72},[66,49575,49576],{"class":76}," sum_squared_diff ",[66,49578,2563],{"class":72},[66,49580,49334],{"class":76},[66,49582,49583],{"class":68,"line":11727},[66,49584,109],{"emptyLinePlaceholder":108},[66,49586,49587,49589,49591,49594],{"class":68,"line":11732},[66,49588,244],{"class":102},[66,49590,348],{"class":76},[66,49592,49593],{"class":356},"\"Mean:\"",[66,49595,49596],{"class":76},", mean)\n",[66,49598,49599,49601,49603,49606],{"class":68,"line":18407},[66,49600,244],{"class":102},[66,49602,348],{"class":76},[66,49604,49605],{"class":356},"\"Variance:\"",[66,49607,49608],{"class":76},", variance)\n",[57,49610,49612],{"className":59,"code":49611,"language":61,"meta":62,"style":62},"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",[23,49613,49614,49620,49626,49636,49642,49652,49666,49676,49686,49696,49700,49710,49720,49724,49728,49736,49741,49746,49765,49769,49774,49779,49784,49789,49830,49835,49845,49850,49863,49868,49873,49878,49883,49888,49892,49897,49902,49924,49928,49960,49974,49984,49994,49998,50008,50022,50032,50042,50052,50058,50062,50066,50070,50074,50078,50086,50106,50110,50114,50118,50122,50138,50142,50146,50154,50158,50162,50170,50174,50178,50182,50190,50194,50198,50202,50210,50214,50222,50226,50234,50238,50246,50250,50258,50262,50266,50274,50278,50282,50294,50318,50332,50336,50340,50344,50352,50356,50364,50368,50376,50380,50388,50392,50400,50404,50412,50416,50428,50432,50440,50444,50452,50456,50460,50464,50468,50476,50480,50496,50500,50508,50512,50516,50520,50524,50528,50532,50536,50552,50556,50568,50572,50584,50588,50600,50604,50612,50616,50624,50628,50632,50636,50642,50646,50654,50658,50674,50678,50686,50690,50706,50718,50722,50734,50738,50742,50750,50754,50758,50766,50770,50778,50782,50790,50794,50798,50840,50882,50886,50890,50906,50910,50926,50930,50934,50942,50946,50950,50962,51000,51004,51008,51016,51020,51034,51044,51050,51056,51062,51068,51072,51076,51082,51086,51090,51098,51102,51120,51124,51128,51132,51148,51152,51156,51160,51164,51168,51188,51208,51212,51216,51220,51228,51236,51240,51256,51276,51296,51300,51305,51314,51323,51328,51333,51338,51351,51356,51365,51374,51391],{"__ignoreMap":62},[66,49615,49616,49618],{"class":68,"line":69},[66,49617,284],{"class":72},[66,49619,33614],{"class":76},[66,49621,49622,49624],{"class":68,"line":80},[66,49623,284],{"class":72},[66,49625,33621],{"class":76},[66,49627,49628,49630,49632,49634],{"class":68,"line":112},[66,49629,284],{"class":72},[66,49631,33632],{"class":76},[66,49633,33176],{"class":72},[66,49635,33637],{"class":76},[66,49637,49638,49640],{"class":68,"line":129},[66,49639,284],{"class":72},[66,49641,32192],{"class":76},[66,49643,49644,49646,49648,49650],{"class":68,"line":138},[66,49645,32532],{"class":72},[66,49647,33208],{"class":76},[66,49649,284],{"class":72},[66,49651,33654],{"class":76},[66,49653,49654,49656,49658,49660,49663],{"class":68,"line":227},[66,49655,32532],{"class":72},[66,49657,33161],{"class":76},[66,49659,284],{"class":72},[66,49661,49662],{"class":76}," ImageFolder ",[66,49664,49665],{"class":758},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[66,49667,49668,49670,49672,49674],{"class":68,"line":236},[66,49669,32532],{"class":72},[66,49671,33191],{"class":76},[66,49673,284],{"class":72},[66,49675,33196],{"class":76},[66,49677,49678,49680,49682,49684],{"class":68,"line":241},[66,49679,284],{"class":72},[66,49681,33208],{"class":76},[66,49683,33176],{"class":72},[66,49685,33213],{"class":76},[66,49687,49688,49690,49692,49694],{"class":68,"line":372},[66,49689,284],{"class":72},[66,49691,33225],{"class":76},[66,49693,33176],{"class":72},[66,49695,33230],{"class":76},[66,49697,49698],{"class":68,"line":377},[66,49699,33699],{"class":758},[66,49701,49702,49704,49706,49708],{"class":68,"line":392},[66,49703,32532],{"class":72},[66,49705,33706],{"class":76},[66,49707,284],{"class":72},[66,49709,44818],{"class":76},[66,49711,49712,49714,49716,49718],{"class":68,"line":405},[66,49713,32532],{"class":72},[66,49715,32535],{"class":76},[66,49717,284],{"class":72},[66,49719,32540],{"class":76},[66,49721,49722],{"class":68,"line":418},[66,49723,109],{"emptyLinePlaceholder":108},[66,49725,49726],{"class":68,"line":430},[66,49727,33734],{"class":758},[66,49729,49730,49732,49734],{"class":68,"line":438},[66,49731,33739],{"class":72},[66,49733,33742],{"class":3793},[66,49735,33745],{"class":76},[66,49737,49738],{"class":68,"line":465},[66,49739,49740],{"class":758},"    # 导入自己的数据集，并进行数据处理\n",[66,49742,49743],{"class":68,"line":1805},[66,49744,49745],{"class":758},"    # 定义数据集的路径\n",[66,49747,49748,49751,49753,49755,49757,49759,49763],{"class":68,"line":1817},[66,49749,49750],{"class":102},"    ROOT_PATH",[66,49752,99],{"class":72},[66,49754,2649],{"class":72},[66,49756,1130],{"class":356},[66,49758,2537],{"class":102},[66,49760,49762],{"class":49761},"sA_wV","\u002Fdata\u002Ftrain",[66,49764,26935],{"class":356},[66,49766,49767],{"class":68,"line":1822},[66,49768,109],{"emptyLinePlaceholder":108},[66,49770,49771],{"class":68,"line":1829},[66,49772,49773],{"class":758},"    # 定义归一化方法\n",[66,49775,49776],{"class":68,"line":3529},[66,49777,49778],{"class":758},"    # 这里需要先计算一下数据集的均值和方差\n",[66,49780,49781],{"class":68,"line":3557},[66,49782,49783],{"class":758},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[66,49785,49786],{"class":68,"line":3562},[66,49787,49788],{"class":758},"    # 第一个参数是均值，第二个参数是方差\n",[66,49790,49791,49794,49796,49799,49802,49804,49807,49809,49812,49815,49818,49820,49823,49825,49828],{"class":68,"line":3579},[66,49792,49793],{"class":76},"    normalize",[66,49795,99],{"class":72},[66,49797,49798],{"class":76},"transforms.Normalize([",[66,49800,49801],{"class":102},"0.162",[66,49803,2362],{"class":76},[66,49805,49806],{"class":102},"0.151",[66,49808,2362],{"class":76},[66,49810,49811],{"class":102},"0.138",[66,49813,49814],{"class":76},"],[",[66,49816,49817],{"class":102},"0.058",[66,49819,2362],{"class":76},[66,49821,49822],{"class":102},"0.052",[66,49824,2362],{"class":76},[66,49826,49827],{"class":102},"0.048",[66,49829,6473],{"class":76},[66,49831,49832],{"class":68,"line":3584},[66,49833,49834],{"class":758},"    # 定义数据集处理方法变量\n",[66,49836,49837,49840,49842],{"class":68,"line":3589},[66,49838,49839],{"class":76},"    train_transform",[66,49841,99],{"class":72},[66,49843,49844],{"class":76},"transforms.Compose([\n",[66,49846,49847],{"class":68,"line":3594},[66,49848,49849],{"class":758},"        # 调整图像大小为224*224\n",[66,49851,49852,49855,49857,49859,49861],{"class":68,"line":3608},[66,49853,49854],{"class":76},"        transforms.Resize((",[66,49856,33294],{"class":102},[66,49858,2362],{"class":76},[66,49860,33294],{"class":102},[66,49862,44409],{"class":76},[66,49864,49865],{"class":68,"line":3613},[66,49866,49867],{"class":758},"        # 将图像转换为张量\n",[66,49869,49870],{"class":68,"line":4401},[66,49871,49872],{"class":76},"        transforms.ToTensor(),\n",[66,49874,49875],{"class":68,"line":4415},[66,49876,49877],{"class":76},"        normalize])\n",[66,49879,49880],{"class":68,"line":4423},[66,49881,49882],{"class":758},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[66,49884,49885],{"class":68,"line":4428},[66,49886,49887],{"class":758},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[66,49889,49890],{"class":68,"line":4434},[66,49891,109],{"emptyLinePlaceholder":108},[66,49893,49894],{"class":68,"line":4440},[66,49895,49896],{"class":758},"    # 加载数据集\n",[66,49898,49899],{"class":68,"line":4445},[66,49900,49901],{"class":758},"    # 传入数据集路径与处理方法\n",[66,49903,49904,49906,49908,49911,49914,49916,49919,49921],{"class":68,"line":9759},[66,49905,33750],{"class":76},[66,49907,99],{"class":72},[66,49909,49910],{"class":76},"ImageFolder(",[66,49912,49913],{"class":102},"ROOT_PATH",[66,49915,2362],{"class":76},[66,49917,49918],{"class":1234},"transform",[66,49920,99],{"class":72},[66,49922,49923],{"class":76},"train_transform)\n",[66,49925,49926],{"class":68,"line":9783},[66,49927,109],{"emptyLinePlaceholder":108},[66,49929,49930,49932,49934,49936,49938,49940,49942,49944,49946,49948,49950,49952,49954,49956,49958],{"class":68,"line":9788},[66,49931,33802],{"class":76},[66,49933,99],{"class":72},[66,49935,33807],{"class":76},[66,49937,33810],{"class":102},[66,49939,348],{"class":76},[66,49941,33815],{"class":102},[66,49943,1208],{"class":72},[66,49945,9169],{"class":102},[66,49947,33822],{"class":76},[66,49949,33810],{"class":102},[66,49951,348],{"class":76},[66,49953,33829],{"class":102},[66,49955,1208],{"class":72},[66,49957,9169],{"class":102},[66,49959,33836],{"class":76},[66,49961,49962,49964,49966,49968,49970,49972],{"class":68,"line":9794},[66,49963,33841],{"class":76},[66,49965,99],{"class":72},[66,49967,33846],{"class":76},[66,49969,33330],{"class":1234},[66,49971,99],{"class":72},[66,49973,33335],{"class":76},[66,49975,49976,49978,49980,49982],{"class":68,"line":9821},[66,49977,33857],{"class":1234},[66,49979,99],{"class":72},[66,49981,2189],{"class":102},[66,49983,33259],{"class":76},[66,49985,49986,49988,49990,49992],{"class":68,"line":9826},[66,49987,33869],{"class":1234},[66,49989,99],{"class":72},[66,49991,33269],{"class":102},[66,49993,33259],{"class":76},[66,49995,49996],{"class":68,"line":9832},[66,49997,33880],{"class":758},[66,49999,50000,50002,50004,50006],{"class":68,"line":9844},[66,50001,33885],{"class":1234},[66,50003,99],{"class":72},[66,50005,2379],{"class":102},[66,50007,313],{"class":76},[66,50009,50010,50012,50014,50016,50018,50020],{"class":68,"line":9856},[66,50011,33896],{"class":76},[66,50013,99],{"class":72},[66,50015,33327],{"class":76},[66,50017,33330],{"class":1234},[66,50019,99],{"class":72},[66,50021,33907],{"class":76},[66,50023,50024,50026,50028,50030],{"class":68,"line":9868},[66,50025,33912],{"class":1234},[66,50027,99],{"class":72},[66,50029,2189],{"class":102},[66,50031,33259],{"class":76},[66,50033,50034,50036,50038,50040],{"class":68,"line":11523},[66,50035,33923],{"class":1234},[66,50037,99],{"class":72},[66,50039,33269],{"class":102},[66,50041,33259],{"class":76},[66,50043,50044,50046,50048,50050],{"class":68,"line":11548},[66,50045,33934],{"class":1234},[66,50047,99],{"class":72},[66,50049,2379],{"class":102},[66,50051,313],{"class":76},[66,50053,50054,50056],{"class":68,"line":11571},[66,50055,5907],{"class":72},[66,50057,33947],{"class":76},[66,50059,50060],{"class":68,"line":11595},[66,50061,109],{"emptyLinePlaceholder":108},[66,50063,50064],{"class":68,"line":11600},[66,50065,33956],{"class":758},[66,50067,50068],{"class":68,"line":11605},[66,50069,33961],{"class":758},[66,50071,50072],{"class":68,"line":11610},[66,50073,109],{"emptyLinePlaceholder":108},[66,50075,50076],{"class":68,"line":11619},[66,50077,33970],{"class":758},[66,50079,50080,50082,50084],{"class":68,"line":11624},[66,50081,33739],{"class":72},[66,50083,33977],{"class":3793},[66,50085,33980],{"class":76},[66,50087,50088,50090,50092,50094,50096,50098,50100,50102,50104],{"class":68,"line":11630},[66,50089,33031],{"class":76},[66,50091,99],{"class":72},[66,50093,32247],{"class":76},[66,50095,33038],{"class":356},[66,50097,3534],{"class":72},[66,50099,33043],{"class":76},[66,50101,1292],{"class":72},[66,50103,33999],{"class":356},[66,50105,313],{"class":76},[66,50107,50108],{"class":68,"line":11651},[66,50109,109],{"emptyLinePlaceholder":108},[66,50111,50112],{"class":68,"line":11657},[66,50113,34014],{"class":758},[66,50115,50116],{"class":68,"line":11671},[66,50117,34019],{"class":758},[66,50119,50120],{"class":68,"line":11677},[66,50121,34024],{"class":758},[66,50123,50124,50126,50128,50130,50132,50134,50136],{"class":68,"line":11704},[66,50125,34029],{"class":76},[66,50127,99],{"class":72},[66,50129,34034],{"class":76},[66,50131,34037],{"class":1234},[66,50133,99],{"class":72},[66,50135,34042],{"class":102},[66,50137,313],{"class":76},[66,50139,50140],{"class":68,"line":11713},[66,50141,109],{"emptyLinePlaceholder":108},[66,50143,50144],{"class":68,"line":11719},[66,50145,34053],{"class":758},[66,50147,50148,50150,50152],{"class":68,"line":11727},[66,50149,34058],{"class":76},[66,50151,99],{"class":72},[66,50153,34063],{"class":76},[66,50155,50156],{"class":68,"line":11732},[66,50157,109],{"emptyLinePlaceholder":108},[66,50159,50160],{"class":68,"line":18407},[66,50161,34072],{"class":758},[66,50163,50164,50166,50168],{"class":68,"line":18413},[66,50165,33083],{"class":76},[66,50167,99],{"class":72},[66,50169,34081],{"class":76},[66,50171,50172],{"class":68,"line":18436},[66,50173,34086],{"class":758},[66,50175,50176],{"class":68,"line":18442},[66,50177,34091],{"class":758},[66,50179,50180],{"class":68,"line":18465},[66,50181,34096],{"class":758},[66,50183,50184,50186,50188],{"class":68,"line":18479},[66,50185,34101],{"class":76},[66,50187,99],{"class":72},[66,50189,34106],{"class":76},[66,50191,50192],{"class":68,"line":18499},[66,50193,109],{"emptyLinePlaceholder":108},[66,50195,50196],{"class":68,"line":18505},[66,50197,34119],{"class":758},[66,50199,50200],{"class":68,"line":18516},[66,50201,34124],{"class":758},[66,50203,50204,50206,50208],{"class":68,"line":18539},[66,50205,34129],{"class":76},[66,50207,99],{"class":72},[66,50209,34134],{"class":102},[66,50211,50212],{"class":68,"line":18561},[66,50213,34139],{"class":758},[66,50215,50216,50218,50220],{"class":68,"line":18566},[66,50217,34144],{"class":76},[66,50219,99],{"class":72},[66,50221,34149],{"class":76},[66,50223,50224],{"class":68,"line":18572},[66,50225,34154],{"class":758},[66,50227,50228,50230,50232],{"class":68,"line":18586},[66,50229,34159],{"class":76},[66,50231,99],{"class":72},[66,50233,34149],{"class":76},[66,50235,50236],{"class":68,"line":18599},[66,50237,34168],{"class":758},[66,50239,50240,50242,50244],{"class":68,"line":18604},[66,50241,34173],{"class":76},[66,50243,99],{"class":72},[66,50245,34149],{"class":76},[66,50247,50248],{"class":68,"line":18618},[66,50249,34182],{"class":758},[66,50251,50252,50254,50256],{"class":68,"line":18623},[66,50253,34187],{"class":76},[66,50255,99],{"class":72},[66,50257,34149],{"class":76},[66,50259,50260],{"class":68,"line":18629},[66,50261,109],{"emptyLinePlaceholder":108},[66,50263,50264],{"class":68,"line":18634},[66,50265,34200],{"class":758},[66,50267,50268,50270,50272],{"class":68,"line":18648},[66,50269,34205],{"class":76},[66,50271,99],{"class":72},[66,50273,34210],{"class":76},[66,50275,50276],{"class":68,"line":18653},[66,50277,109],{"emptyLinePlaceholder":108},[66,50279,50280],{"class":68,"line":18658},[66,50281,34223],{"class":758},[66,50283,50284,50286,50288,50290,50292],{"class":68,"line":18672},[66,50285,1083],{"class":72},[66,50287,34230],{"class":76},[66,50289,507],{"class":72},[66,50291,510],{"class":102},[66,50293,34237],{"class":76},[66,50295,50296,50298,50300,50302,50304,50306,50308,50310,50312,50314,50316],{"class":68,"line":18684},[66,50297,395],{"class":102},[66,50299,348],{"class":76},[66,50301,34246],{"class":356},[66,50303,34249],{"class":102},[66,50305,2563],{"class":356},[66,50307,34249],{"class":102},[66,50309,1130],{"class":356},[66,50311,34258],{"class":76},[66,50313,2511],{"class":72},[66,50315,304],{"class":102},[66,50317,360],{"class":76},[66,50319,50320,50322,50324,50326,50328,50330],{"class":68,"line":18689},[66,50321,395],{"class":102},[66,50323,348],{"class":76},[66,50325,34273],{"class":356},[66,50327,1208],{"class":72},[66,50329,790],{"class":102},[66,50331,313],{"class":76},[66,50333,50334],{"class":68,"line":18702},[66,50335,109],{"emptyLinePlaceholder":108},[66,50337,50338],{"class":68,"line":18707},[66,50339,34288],{"class":758},[66,50341,50342],{"class":68,"line":18712},[66,50343,34293],{"class":758},[66,50345,50346,50348,50350],{"class":68,"line":18717},[66,50347,34298],{"class":76},[66,50349,99],{"class":72},[66,50351,34134],{"class":102},[66,50353,50354],{"class":68,"line":18730},[66,50355,34307],{"class":758},[66,50357,50358,50360,50362],{"class":68,"line":18735},[66,50359,34312],{"class":76},[66,50361,99],{"class":72},[66,50363,4906],{"class":102},[66,50365,50366],{"class":68,"line":34423},[66,50367,34321],{"class":758},[66,50369,50370,50372,50374],{"class":68,"line":34429},[66,50371,34326],{"class":76},[66,50373,99],{"class":72},[66,50375,34134],{"class":102},[66,50377,50378],{"class":68,"line":34435},[66,50379,34335],{"class":758},[66,50381,50382,50384,50386],{"class":68,"line":34441},[66,50383,34340],{"class":76},[66,50385,99],{"class":72},[66,50387,4906],{"class":102},[66,50389,50390],{"class":68,"line":34447},[66,50391,34349],{"class":758},[66,50393,50394,50396,50398],{"class":68,"line":34458},[66,50395,34354],{"class":76},[66,50397,99],{"class":72},[66,50399,4906],{"class":102},[66,50401,50402],{"class":68,"line":34464},[66,50403,34363],{"class":758},[66,50405,50406,50408,50410],{"class":68,"line":34484},[66,50407,34368],{"class":76},[66,50409,99],{"class":72},[66,50411,4906],{"class":102},[66,50413,50414],{"class":68,"line":34490},[66,50415,34377],{"class":758},[66,50417,50418,50420,50422,50424,50426],{"class":68,"line":34501},[66,50419,5222],{"class":72},[66,50421,33394],{"class":76},[66,50423,507],{"class":72},[66,50425,33399],{"class":102},[66,50427,34390],{"class":76},[66,50429,50430],{"class":68,"line":34507},[66,50431,34395],{"class":758},[66,50433,50434,50436,50438],{"class":68,"line":34513},[66,50435,34400],{"class":76},[66,50437,99],{"class":72},[66,50439,34405],{"class":76},[66,50441,50442],{"class":68,"line":34519},[66,50443,34410],{"class":758},[66,50445,50446,50448,50450],{"class":68,"line":34525},[66,50447,34415],{"class":76},[66,50449,99],{"class":72},[66,50451,34420],{"class":76},[66,50453,50454],{"class":68,"line":34531},[66,50455,34426],{"class":758},[66,50457,50458],{"class":68,"line":34537},[66,50459,34432],{"class":76},[66,50461,50462],{"class":68,"line":34543},[66,50463,34438],{"class":758},[66,50465,50466],{"class":68,"line":34563},[66,50467,34444],{"class":758},[66,50469,50470,50472,50474],{"class":68,"line":34569},[66,50471,34450],{"class":76},[66,50473,99],{"class":72},[66,50475,34455],{"class":76},[66,50477,50478],{"class":68,"line":34585},[66,50479,34461],{"class":758},[66,50481,50482,50484,50486,50488,50490,50492,50494],{"class":68,"line":34591},[66,50483,34467],{"class":76},[66,50485,99],{"class":72},[66,50487,34472],{"class":76},[66,50489,34475],{"class":1234},[66,50491,99],{"class":72},[66,50493,304],{"class":102},[66,50495,313],{"class":76},[66,50497,50498],{"class":68,"line":34605},[66,50499,34487],{"class":758},[66,50501,50502,50504,50506],{"class":68,"line":34611},[66,50503,34493],{"class":76},[66,50505,99],{"class":72},[66,50507,34498],{"class":76},[66,50509,50510],{"class":68,"line":34626},[66,50511,34504],{"class":758},[66,50513,50514],{"class":68,"line":34632},[66,50515,34510],{"class":76},[66,50517,50518],{"class":68,"line":34641},[66,50519,34516],{"class":758},[66,50521,50522],{"class":68,"line":34647},[66,50523,34522],{"class":76},[66,50525,50526],{"class":68,"line":34656},[66,50527,34528],{"class":758},[66,50529,50530],{"class":68,"line":34662},[66,50531,34534],{"class":76},[66,50533,50534],{"class":68,"line":34668},[66,50535,34540],{"class":758},[66,50537,50538,50540,50542,50544,50546,50548,50550],{"class":68,"line":34677},[66,50539,34546],{"class":76},[66,50541,144],{"class":72},[66,50543,34551],{"class":76},[66,50545,1208],{"class":72},[66,50547,34556],{"class":76},[66,50549,2183],{"class":102},[66,50551,313],{"class":76},[66,50553,50554],{"class":68,"line":34683},[66,50555,34566],{"class":758},[66,50557,50558,50560,50562,50564,50566],{"class":68,"line":34694},[66,50559,34572],{"class":76},[66,50561,144],{"class":72},[66,50563,34577],{"class":76},[66,50565,531],{"class":72},[66,50567,34582],{"class":76},[66,50569,50570],{"class":68,"line":34700},[66,50571,34588],{"class":758},[66,50573,50574,50576,50578,50580,50582],{"class":68,"line":34719},[66,50575,34594],{"class":76},[66,50577,144],{"class":72},[66,50579,34556],{"class":76},[66,50581,2183],{"class":102},[66,50583,313],{"class":76},[66,50585,50586],{"class":68,"line":34725},[66,50587,34608],{"class":758},[66,50589,50590,50592,50594,50596,50598],{"class":68,"line":34736},[66,50591,5222],{"class":72},[66,50593,34616],{"class":76},[66,50595,507],{"class":72},[66,50597,33399],{"class":102},[66,50599,34623],{"class":76},[66,50601,50602],{"class":68,"line":34742},[66,50603,34629],{"class":758},[66,50605,50606,50608,50610],{"class":68,"line":34762},[66,50607,34400],{"class":76},[66,50609,99],{"class":72},[66,50611,34405],{"class":76},[66,50613,50614],{"class":68,"line":34778},[66,50615,34644],{"class":758},[66,50617,50618,50620,50622],{"class":68,"line":34784},[66,50619,34415],{"class":76},[66,50621,99],{"class":72},[66,50623,34420],{"class":76},[66,50625,50626],{"class":68,"line":34798},[66,50627,34659],{"class":758},[66,50629,50630],{"class":68,"line":34804},[66,50631,34665],{"class":76},[66,50633,50634],{"class":68,"line":34810},[66,50635,38144],{"class":758},[66,50637,50638,50640],{"class":68,"line":34821},[66,50639,34671],{"class":72},[66,50641,34674],{"class":76},[66,50643,50644],{"class":68,"line":34827},[66,50645,34680],{"class":758},[66,50647,50648,50650,50652],{"class":68,"line":34833},[66,50649,38159],{"class":76},[66,50651,99],{"class":72},[66,50653,34455],{"class":76},[66,50655,50656],{"class":68,"line":34843},[66,50657,34697],{"class":758},[66,50659,50660,50662,50664,50666,50668,50670,50672],{"class":68,"line":34849},[66,50661,38172],{"class":76},[66,50663,99],{"class":72},[66,50665,34472],{"class":76},[66,50667,34475],{"class":1234},[66,50669,99],{"class":72},[66,50671,304],{"class":102},[66,50673,313],{"class":76},[66,50675,50676],{"class":68,"line":34860},[66,50677,34722],{"class":758},[66,50679,50680,50682,50684],{"class":68,"line":34866},[66,50681,38193],{"class":76},[66,50683,99],{"class":72},[66,50685,34498],{"class":76},[66,50687,50688],{"class":68,"line":34876},[66,50689,34739],{"class":758},[66,50691,50692,50694,50696,50698,50700,50702,50704],{"class":68,"line":34881},[66,50693,38206],{"class":76},[66,50695,144],{"class":72},[66,50697,38211],{"class":76},[66,50699,1208],{"class":72},[66,50701,34556],{"class":76},[66,50703,2183],{"class":102},[66,50705,313],{"class":76},[66,50707,50708,50710,50712,50714,50716],{"class":68,"line":34887},[66,50709,38224],{"class":76},[66,50711,144],{"class":72},[66,50713,34577],{"class":76},[66,50715,531],{"class":72},[66,50717,34582],{"class":76},[66,50719,50720],{"class":68,"line":34936},[66,50721,38237],{"class":758},[66,50723,50724,50726,50728,50730,50732],{"class":68,"line":34983},[66,50725,38242],{"class":76},[66,50727,144],{"class":72},[66,50729,34556],{"class":76},[66,50731,2183],{"class":102},[66,50733,313],{"class":76},[66,50735,50736],{"class":68,"line":34988},[66,50737,34801],{"class":758},[66,50739,50740],{"class":68,"line":34994},[66,50741,34807],{"class":758},[66,50743,50744,50746,50748],{"class":68,"line":35013},[66,50745,34813],{"class":76},[66,50747,2563],{"class":72},[66,50749,34818],{"class":76},[66,50751,50752],{"class":68,"line":35019},[66,50753,34824],{"class":758},[66,50755,50756],{"class":68,"line":35038},[66,50757,34830],{"class":758},[66,50759,50760,50762,50764],{"class":68,"line":35044},[66,50761,34836],{"class":76},[66,50763,2563],{"class":72},[66,50765,34818],{"class":76},[66,50767,50768],{"class":68,"line":35050},[66,50769,34846],{"class":758},[66,50771,50772,50774,50776],{"class":68,"line":35060},[66,50773,34852],{"class":76},[66,50775,2563],{"class":72},[66,50777,34857],{"class":76},[66,50779,50780],{"class":68,"line":35065},[66,50781,34863],{"class":758},[66,50783,50784,50786,50788],{"class":68,"line":35071},[66,50785,34869],{"class":76},[66,50787,2563],{"class":72},[66,50789,34857],{"class":76},[66,50791,50792],{"class":68,"line":35087},[66,50793,109],{"emptyLinePlaceholder":108},[66,50795,50796],{"class":68,"line":35132},[66,50797,34884],{"class":758},[66,50799,50800,50802,50804,50806,50808,50810,50812,50814,50816,50818,50820,50822,50824,50826,50828,50830,50832,50834,50836,50838],{"class":68,"line":35138},[66,50801,395],{"class":102},[66,50803,348],{"class":76},[66,50805,5410],{"class":356},[66,50807,34249],{"class":102},[66,50809,34898],{"class":356},[66,50811,451],{"class":102},[66,50813,34903],{"class":72},[66,50815,457],{"class":102},[66,50817,34908],{"class":356},[66,50819,451],{"class":102},[66,50821,34903],{"class":72},[66,50823,457],{"class":102},[66,50825,5410],{"class":356},[66,50827,34919],{"class":76},[66,50829,2511],{"class":72},[66,50831,304],{"class":102},[66,50833,34926],{"class":76},[66,50835,2511],{"class":72},[66,50837,304],{"class":102},[66,50839,34933],{"class":76},[66,50841,50842,50844,50846,50848,50850,50852,50854,50856,50858,50860,50862,50864,50866,50868,50870,50872,50874,50876,50878,50880],{"class":68,"line":35144},[66,50843,395],{"class":102},[66,50845,348],{"class":76},[66,50847,5410],{"class":356},[66,50849,34249],{"class":102},[66,50851,34947],{"class":356},[66,50853,451],{"class":102},[66,50855,34903],{"class":72},[66,50857,457],{"class":102},[66,50859,34956],{"class":356},[66,50861,451],{"class":102},[66,50863,34903],{"class":72},[66,50865,457],{"class":102},[66,50867,5410],{"class":356},[66,50869,34967],{"class":76},[66,50871,2511],{"class":72},[66,50873,304],{"class":102},[66,50875,34974],{"class":76},[66,50877,2511],{"class":72},[66,50879,304],{"class":102},[66,50881,34933],{"class":76},[66,50883,50884],{"class":68,"line":35150},[66,50885,109],{"emptyLinePlaceholder":108},[66,50887,50888],{"class":68,"line":35161},[66,50889,34991],{"class":758},[66,50891,50892,50894,50896,50898,50900,50902,50904],{"class":68,"line":35167},[66,50893,4321],{"class":72},[66,50895,34999],{"class":76},[66,50897,2511],{"class":72},[66,50899,304],{"class":102},[66,50901,2917],{"class":76},[66,50903,386],{"class":72},[66,50905,35010],{"class":76},[66,50907,50908],{"class":68,"line":35173},[66,50909,35016],{"class":758},[66,50911,50912,50914,50916,50918,50920,50922,50924],{"class":68,"line":35179},[66,50913,35022],{"class":76},[66,50915,2038],{"class":102},[66,50917,99],{"class":72},[66,50919,35029],{"class":76},[66,50921,2511],{"class":72},[66,50923,304],{"class":102},[66,50925,704],{"class":76},[66,50927,50928],{"class":68,"line":35197},[66,50929,35041],{"class":758},[66,50931,50932],{"class":68,"line":35210},[66,50933,35047],{"class":758},[66,50935,50936,50938,50940],{"class":68,"line":35219},[66,50937,35053],{"class":76},[66,50939,99],{"class":72},[66,50941,34106],{"class":76},[66,50943,50944],{"class":68,"line":35228},[66,50945,109],{"emptyLinePlaceholder":108},[66,50947,50948],{"class":68,"line":35237},[66,50949,35068],{"class":758},[66,50951,50952,50954,50956,50958,50960],{"class":68,"line":35246},[66,50953,35074],{"class":76},[66,50955,99],{"class":72},[66,50957,35079],{"class":76},[66,50959,2511],{"class":72},[66,50961,35084],{"class":76},[66,50963,50964,50966,50968,50970,50972,50974,50976,50978,50980,50982,50984,50986,50988,50990,50992,50994,50996,50998],{"class":68,"line":35252},[66,50965,395],{"class":102},[66,50967,348],{"class":76},[66,50969,35094],{"class":356},[66,50971,451],{"class":102},[66,50973,35099],{"class":72},[66,50975,457],{"class":102},[66,50977,2523],{"class":356},[66,50979,451],{"class":102},[66,50981,35099],{"class":72},[66,50983,457],{"class":102},[66,50985,35112],{"class":356},[66,50987,35115],{"class":76},[66,50989,35118],{"class":72},[66,50991,2885],{"class":102},[66,50993,35123],{"class":76},[66,50995,953],{"class":72},[66,50997,2885],{"class":102},[66,50999,360],{"class":76},[66,51001,51002],{"class":68,"line":35258},[66,51003,38521],{"class":758},[66,51005,51006],{"class":68,"line":35266},[66,51007,38526],{"class":758},[66,51009,51010,51012,51014],{"class":68,"line":35271},[66,51011,38531],{"class":76},[66,51013,35156],{"class":356},[66,51015,313],{"class":76},[66,51017,51018],{"class":68,"line":35277},[66,51019,35176],{"class":758},[66,51021,51022,51024,51026,51028,51030,51032],{"class":68,"line":35288},[66,51023,35182],{"class":76},[66,51025,99],{"class":72},[66,51027,35187],{"class":76},[66,51029,35190],{"class":1234},[66,51031,99],{"class":72},[66,51033,3388],{"class":76},[66,51035,51036,51038,51040,51042],{"class":68,"line":35294},[66,51037,35200],{"class":356},[66,51039,2838],{"class":76},[66,51041,747],{"class":102},[66,51043,35207],{"class":76},[66,51045,51046,51048],{"class":68,"line":35314},[66,51047,35213],{"class":356},[66,51049,35216],{"class":76},[66,51051,51052,51054],{"class":68,"line":35320},[66,51053,35222],{"class":356},[66,51055,35225],{"class":76},[66,51057,51058,51060],{"class":68,"line":35326},[66,51059,35231],{"class":356},[66,51061,35234],{"class":76},[66,51063,51064,51066],{"class":68,"line":35332},[66,51065,35240],{"class":356},[66,51067,35243],{"class":76},[66,51069,51070],{"class":68,"line":35349},[66,51071,35249],{"class":76},[66,51073,51074],{"class":68,"line":35355},[66,51075,35255],{"class":758},[66,51077,51078,51080],{"class":68,"line":35361},[66,51079,5907],{"class":72},[66,51081,35263],{"class":76},[66,51083,51084],{"class":68,"line":35367},[66,51085,109],{"emptyLinePlaceholder":108},[66,51087,51088],{"class":68,"line":35373},[66,51089,35274],{"class":758},[66,51091,51092,51094,51096],{"class":68,"line":35379},[66,51093,33739],{"class":72},[66,51095,35282],{"class":3793},[66,51097,35285],{"class":76},[66,51099,51100],{"class":68,"line":35406},[66,51101,35291],{"class":758},[66,51103,51104,51106,51108,51110,51112,51114,51116,51118],{"class":68,"line":35430},[66,51105,35297],{"class":76},[66,51107,33485],{"class":1234},[66,51109,99],{"class":72},[66,51111,348],{"class":76},[66,51113,2477],{"class":102},[66,51115,2362],{"class":76},[66,51117,1076],{"class":102},[66,51119,360],{"class":76},[66,51121,51122],{"class":68,"line":35436},[66,51123,35317],{"class":758},[66,51125,51126],{"class":68,"line":35442},[66,51127,35323],{"class":758},[66,51129,51130],{"class":68,"line":35448},[66,51131,35329],{"class":758},[66,51133,51134,51136,51138,51140,51142,51144,51146],{"class":68,"line":35459},[66,51135,33519],{"class":76},[66,51137,304],{"class":102},[66,51139,2362],{"class":76},[66,51141,795],{"class":102},[66,51143,2362],{"class":76},[66,51145,304],{"class":102},[66,51147,313],{"class":76},[66,51149,51150],{"class":68,"line":35470},[66,51151,35352],{"class":758},[66,51153,51154],{"class":68,"line":35476},[66,51155,35358],{"class":758},[66,51157,51158],{"class":68,"line":35493},[66,51159,35364],{"class":758},[66,51161,51162],{"class":68,"line":35516},[66,51163,35370],{"class":758},[66,51165,51166],{"class":68,"line":35539},[66,51167,35376],{"class":758},[66,51169,51170,51172,51174,51176,51178,51180,51182,51184,51186],{"class":68,"line":35545},[66,51171,35382],{"class":76},[66,51173,35385],{"class":356},[66,51175,35388],{"class":76},[66,51177,35391],{"class":356},[66,51179,2362],{"class":76},[66,51181,35396],{"class":1234},[66,51183,99],{"class":72},[66,51185,35401],{"class":356},[66,51187,313],{"class":76},[66,51189,51190,51192,51194,51196,51198,51200,51202,51204,51206],{"class":68,"line":35550},[66,51191,35382],{"class":76},[66,51193,35385],{"class":356},[66,51195,35413],{"class":76},[66,51197,35416],{"class":356},[66,51199,2362],{"class":76},[66,51201,35396],{"class":1234},[66,51203,99],{"class":72},[66,51205,35425],{"class":356},[66,51207,313],{"class":76},[66,51209,51210],{"class":68,"line":35559},[66,51211,35433],{"class":758},[66,51213,51214],{"class":68,"line":35569},[66,51215,35439],{"class":76},[66,51217,51218],{"class":68,"line":35575},[66,51219,35445],{"class":758},[66,51221,51222,51224,51226],{"class":68,"line":35580},[66,51223,35451],{"class":76},[66,51225,35454],{"class":356},[66,51227,313],{"class":76},[66,51229,51230,51232,51234],{"class":68,"line":35586},[66,51231,35462],{"class":76},[66,51233,35465],{"class":356},[66,51235,313],{"class":76},[66,51237,51238],{"class":68,"line":35599},[66,51239,35473],{"class":758},[66,51241,51242,51244,51246,51248,51250,51252,51254],{"class":68,"line":35605},[66,51243,33519],{"class":76},[66,51245,304],{"class":102},[66,51247,2362],{"class":76},[66,51249,795],{"class":102},[66,51251,2362],{"class":76},[66,51253,795],{"class":102},[66,51255,313],{"class":76},[66,51257,51258,51260,51262,51264,51266,51268,51270,51272,51274],{"class":68,"line":35616},[66,51259,35382],{"class":76},[66,51261,35385],{"class":356},[66,51263,35500],{"class":76},[66,51265,35391],{"class":356},[66,51267,2362],{"class":76},[66,51269,35396],{"class":1234},[66,51271,99],{"class":72},[66,51273,35511],{"class":356},[66,51275,313],{"class":76},[66,51277,51278,51280,51282,51284,51286,51288,51290,51292,51294],{"class":68,"line":35627},[66,51279,35382],{"class":76},[66,51281,35385],{"class":356},[66,51283,35523],{"class":76},[66,51285,35416],{"class":356},[66,51287,2362],{"class":76},[66,51289,35396],{"class":1234},[66,51291,99],{"class":72},[66,51293,35534],{"class":356},[66,51295,313],{"class":76},[66,51297,51298],{"class":68,"line":35646},[66,51299,35542],{"class":758},[66,51301,51303],{"class":68,"line":51302},219,[66,51304,35439],{"class":76},[66,51306,51308,51310,51312],{"class":68,"line":51307},220,[66,51309,35451],{"class":76},[66,51311,35385],{"class":356},[66,51313,313],{"class":76},[66,51315,51317,51319,51321],{"class":68,"line":51316},221,[66,51318,35462],{"class":76},[66,51320,35564],{"class":356},[66,51322,313],{"class":76},[66,51324,51326],{"class":68,"line":51325},222,[66,51327,35572],{"class":76},[66,51329,51331],{"class":68,"line":51330},223,[66,51332,109],{"emptyLinePlaceholder":108},[66,51334,51336],{"class":68,"line":51335},224,[66,51337,35583],{"class":758},[66,51339,51341,51343,51345,51347,51349],{"class":68,"line":51340},225,[66,51342,3373],{"class":72},[66,51344,33014],{"class":102},[66,51346,531],{"class":72},[66,51348,33019],{"class":356},[66,51350,126],{"class":76},[66,51352,51354],{"class":68,"line":51353},226,[66,51355,35602],{"class":758},[66,51357,51359,51361,51363],{"class":68,"line":51358},227,[66,51360,46333],{"class":76},[66,51362,99],{"class":72},[66,51364,46338],{"class":76},[66,51366,51368,51370,51372],{"class":68,"line":51367},228,[66,51369,35619],{"class":76},[66,51371,99],{"class":72},[66,51373,35624],{"class":76},[66,51375,51377,51379,51381,51383,51385,51387,51389],{"class":68,"line":51376},229,[66,51378,35182],{"class":76},[66,51380,99],{"class":72},[66,51382,46355],{"class":76},[66,51384,35637],{"class":1234},[66,51386,99],{"class":72},[66,51388,2885],{"class":102},[66,51390,313],{"class":76},[66,51392,51394],{"class":68,"line":51393},230,[66,51395,35649],{"class":76},[23801,51397,51399],{"id":51398},"_242测试代码","2.4.2.测试代码",[19,51401,51402],{},"使用测试集进行测试与推理",[57,51404,51406],{"className":59,"code":51405,"language":61,"meta":62,"style":62},"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",[23,51407,51408,51414,51424,51434,51445,51455,51459,51463,51471,51476,51480,51497,51501,51505,51509,51513,51517,51549,51553,51561,51565,51577,51581,51585,51589,51593,51597,51601,51605,51609,51627,51641,51645,51655,51665,51675,51681,51685,51689,51697,51701,51717,51725,51729,51733,51741,51749,51753,51757,51761,51765,51771,51775,51785,51793,51801,51805,51809,51813,51821,51825,51841,51845,51849,51853,51865,51869,51881,51885,51889,51901,51905,51915,51919,51923,51935,51939,51947,51951,51955,51963,51967,51975,51979,51983,51987,51991,51995,52011,52019,52023,52027,52045,52051,52055,52065,52073,52081,52085,52089,52093,52097,52105,52109,52125,52129,52137,52145],{"__ignoreMap":62},[66,51409,51410,51412],{"class":68,"line":69},[66,51411,284],{"class":72},[66,51413,32192],{"class":76},[66,51415,51416,51418,51420,51422],{"class":68,"line":80},[66,51417,284],{"class":72},[66,51419,33208],{"class":76},[66,51421,33176],{"class":72},[66,51423,33213],{"class":76},[66,51425,51426,51428,51430,51432],{"class":68,"line":112},[66,51427,32532],{"class":72},[66,51429,33191],{"class":76},[66,51431,284],{"class":72},[66,51433,33196],{"class":76},[66,51435,51436,51438,51440,51442],{"class":68,"line":129},[66,51437,32532],{"class":72},[66,51439,33161],{"class":76},[66,51441,284],{"class":72},[66,51443,51444],{"class":76}," ImageFolder\n",[66,51446,51447,51449,51451,51453],{"class":68,"line":138},[66,51448,32532],{"class":72},[66,51450,33706],{"class":76},[66,51452,284],{"class":72},[66,51454,46427],{"class":76},[66,51456,51457],{"class":68,"line":227},[66,51458,109],{"emptyLinePlaceholder":108},[66,51460,51461],{"class":68,"line":236},[66,51462,35739],{"class":758},[66,51464,51465,51467,51469],{"class":68,"line":241},[66,51466,33739],{"class":72},[66,51468,35746],{"class":3793},[66,51470,33745],{"class":76},[66,51472,51473],{"class":68,"line":372},[66,51474,51475],{"class":758},"   # 导入自己的数据集，并进行数据处理\n",[66,51477,51478],{"class":68,"line":377},[66,51479,49745],{"class":758},[66,51481,51482,51484,51486,51488,51490,51492,51495],{"class":68,"line":392},[66,51483,49750],{"class":102},[66,51485,99],{"class":72},[66,51487,2649],{"class":72},[66,51489,1130],{"class":356},[66,51491,2537],{"class":102},[66,51493,51494],{"class":49761},"\u002Fdata\u002Ftest",[66,51496,26935],{"class":356},[66,51498,51499],{"class":68,"line":405},[66,51500,109],{"emptyLinePlaceholder":108},[66,51502,51503],{"class":68,"line":418},[66,51504,49773],{"class":758},[66,51506,51507],{"class":68,"line":430},[66,51508,49778],{"class":758},[66,51510,51511],{"class":68,"line":438},[66,51512,49783],{"class":758},[66,51514,51515],{"class":68,"line":465},[66,51516,49788],{"class":758},[66,51518,51519,51521,51523,51525,51527,51529,51531,51533,51535,51537,51539,51541,51543,51545,51547],{"class":68,"line":1805},[66,51520,49793],{"class":76},[66,51522,99],{"class":72},[66,51524,49798],{"class":76},[66,51526,49801],{"class":102},[66,51528,2362],{"class":76},[66,51530,49806],{"class":102},[66,51532,2362],{"class":76},[66,51534,49811],{"class":102},[66,51536,49814],{"class":76},[66,51538,49817],{"class":102},[66,51540,2362],{"class":76},[66,51542,49822],{"class":102},[66,51544,2362],{"class":76},[66,51546,49827],{"class":102},[66,51548,6473],{"class":76},[66,51550,51551],{"class":68,"line":1817},[66,51552,49834],{"class":758},[66,51554,51555,51557,51559],{"class":68,"line":1822},[66,51556,49839],{"class":76},[66,51558,99],{"class":72},[66,51560,49844],{"class":76},[66,51562,51563],{"class":68,"line":1829},[66,51564,49849],{"class":758},[66,51566,51567,51569,51571,51573,51575],{"class":68,"line":3529},[66,51568,49854],{"class":76},[66,51570,33294],{"class":102},[66,51572,2362],{"class":76},[66,51574,33294],{"class":102},[66,51576,44409],{"class":76},[66,51578,51579],{"class":68,"line":3557},[66,51580,49867],{"class":758},[66,51582,51583],{"class":68,"line":3562},[66,51584,49872],{"class":76},[66,51586,51587],{"class":68,"line":3579},[66,51588,49877],{"class":76},[66,51590,51591],{"class":68,"line":3584},[66,51592,49882],{"class":758},[66,51594,51595],{"class":68,"line":3589},[66,51596,49887],{"class":758},[66,51598,51599],{"class":68,"line":3594},[66,51600,109],{"emptyLinePlaceholder":108},[66,51602,51603],{"class":68,"line":3608},[66,51604,49896],{"class":758},[66,51606,51607],{"class":68,"line":3613},[66,51608,49901],{"class":758},[66,51610,51611,51613,51615,51617,51619,51621,51623,51625],{"class":68,"line":4401},[66,51612,35753],{"class":76},[66,51614,99],{"class":72},[66,51616,49910],{"class":76},[66,51618,49913],{"class":102},[66,51620,2362],{"class":76},[66,51622,49918],{"class":1234},[66,51624,99],{"class":72},[66,51626,49923],{"class":76},[66,51628,51629,51631,51633,51635,51637,51639],{"class":68,"line":4415},[66,51630,35810],{"class":76},[66,51632,99],{"class":72},[66,51634,33327],{"class":76},[66,51636,33330],{"class":1234},[66,51638,99],{"class":72},[66,51640,35821],{"class":76},[66,51642,51643],{"class":68,"line":4423},[66,51644,35826],{"class":758},[66,51646,51647,51649,51651,51653],{"class":68,"line":4428},[66,51648,35831],{"class":1234},[66,51650,99],{"class":72},[66,51652,304],{"class":102},[66,51654,33259],{"class":76},[66,51656,51657,51659,51661,51663],{"class":68,"line":4434},[66,51658,35842],{"class":1234},[66,51660,99],{"class":72},[66,51662,33269],{"class":102},[66,51664,33259],{"class":76},[66,51666,51667,51669,51671,51673],{"class":68,"line":4440},[66,51668,35853],{"class":1234},[66,51670,99],{"class":72},[66,51672,2183],{"class":102},[66,51674,313],{"class":76},[66,51676,51677,51679],{"class":68,"line":4445},[66,51678,5907],{"class":72},[66,51680,35866],{"class":76},[66,51682,51683],{"class":68,"line":9759},[66,51684,109],{"emptyLinePlaceholder":108},[66,51686,51687],{"class":68,"line":9783},[66,51688,35875],{"class":758},[66,51690,51691,51693,51695],{"class":68,"line":9788},[66,51692,33739],{"class":72},[66,51694,35882],{"class":3793},[66,51696,35885],{"class":76},[66,51698,51699],{"class":68,"line":9794},[66,51700,35890],{"class":758},[66,51702,51703,51705,51707,51709,51711,51713,51715],{"class":68,"line":9821},[66,51704,33031],{"class":76},[66,51706,99],{"class":72},[66,51708,33038],{"class":356},[66,51710,3534],{"class":72},[66,51712,33043],{"class":76},[66,51714,1292],{"class":72},[66,51716,35907],{"class":356},[66,51718,51719,51721,51723],{"class":68,"line":9826},[66,51720,33083],{"class":76},[66,51722,99],{"class":72},[66,51724,34081],{"class":76},[66,51726,51727],{"class":68,"line":9832},[66,51728,109],{"emptyLinePlaceholder":108},[66,51730,51731],{"class":68,"line":9844},[66,51732,35924],{"class":758},[66,51734,51735,51737,51739],{"class":68,"line":9856},[66,51736,35929],{"class":76},[66,51738,99],{"class":72},[66,51740,34134],{"class":102},[66,51742,51743,51745,51747],{"class":68,"line":9868},[66,51744,35938],{"class":76},[66,51746,99],{"class":72},[66,51748,4906],{"class":102},[66,51750,51751],{"class":68,"line":11523},[66,51752,109],{"emptyLinePlaceholder":108},[66,51754,51755],{"class":68,"line":11548},[66,51756,35951],{"class":758},[66,51758,51759],{"class":68,"line":11571},[66,51760,35956],{"class":758},[66,51762,51763],{"class":68,"line":11595},[66,51764,35961],{"class":758},[66,51766,51767,51769],{"class":68,"line":11600},[66,51768,35966],{"class":72},[66,51770,34674],{"class":76},[66,51772,51773],{"class":68,"line":11605},[66,51774,35973],{"class":758},[66,51776,51777,51779,51781,51783],{"class":68,"line":11610},[66,51778,5222],{"class":72},[66,51780,35980],{"class":76},[66,51782,507],{"class":72},[66,51784,35985],{"class":76},[66,51786,51787,51789,51791],{"class":68,"line":11619},[66,51788,35990],{"class":76},[66,51790,99],{"class":72},[66,51792,35995],{"class":76},[66,51794,51795,51797,51799],{"class":68,"line":11624},[66,51796,36000],{"class":76},[66,51798,99],{"class":72},[66,51800,36005],{"class":76},[66,51802,51803],{"class":68,"line":11630},[66,51804,36010],{"class":758},[66,51806,51807],{"class":68,"line":11651},[66,51808,34665],{"class":76},[66,51810,51811],{"class":68,"line":11657},[66,51812,36019],{"class":758},[66,51814,51815,51817,51819],{"class":68,"line":11671},[66,51816,34450],{"class":76},[66,51818,99],{"class":72},[66,51820,36028],{"class":76},[66,51822,51823],{"class":68,"line":11677},[66,51824,36033],{"class":758},[66,51826,51827,51829,51831,51833,51835,51837,51839],{"class":68,"line":11704},[66,51828,34467],{"class":76},[66,51830,99],{"class":72},[66,51832,34472],{"class":76},[66,51834,34475],{"class":1234},[66,51836,99],{"class":72},[66,51838,304],{"class":102},[66,51840,313],{"class":76},[66,51842,51843],{"class":68,"line":11713},[66,51844,36054],{"class":758},[66,51846,51847],{"class":68,"line":11719},[66,51848,36059],{"class":758},[66,51850,51851],{"class":68,"line":11727},[66,51852,36064],{"class":758},[66,51854,51855,51857,51859,51861,51863],{"class":68,"line":11732},[66,51856,36069],{"class":76},[66,51858,144],{"class":72},[66,51860,34577],{"class":76},[66,51862,531],{"class":72},[66,51864,36078],{"class":76},[66,51866,51867],{"class":68,"line":18407},[66,51868,36083],{"class":758},[66,51870,51871,51873,51875,51877,51879],{"class":68,"line":18413},[66,51872,36088],{"class":76},[66,51874,144],{"class":72},[66,51876,36093],{"class":76},[66,51878,2183],{"class":102},[66,51880,313],{"class":76},[66,51882,51883],{"class":68,"line":18436},[66,51884,109],{"emptyLinePlaceholder":108},[66,51886,51887],{"class":68,"line":18442},[66,51888,36106],{"class":758},[66,51890,51891,51893,51895,51897,51899],{"class":68,"line":18465},[66,51892,36111],{"class":76},[66,51894,99],{"class":72},[66,51896,36116],{"class":76},[66,51898,2563],{"class":72},[66,51900,36121],{"class":76},[66,51902,51903],{"class":68,"line":18479},[66,51904,36126],{"class":758},[66,51906,51907,51909,51911,51913],{"class":68,"line":18499},[66,51908,395],{"class":102},[66,51910,348],{"class":76},[66,51912,36135],{"class":356},[66,51914,36138],{"class":76},[66,51916,51917],{"class":68,"line":18505},[66,51918,109],{"emptyLinePlaceholder":108},[66,51920,51921],{"class":68,"line":18516},[66,51922,36147],{"class":758},[66,51924,51925,51927,51929,51931,51933],{"class":68,"line":18539},[66,51926,3373],{"class":72},[66,51928,33014],{"class":102},[66,51930,531],{"class":72},[66,51932,33019],{"class":356},[66,51934,126],{"class":76},[66,51936,51937],{"class":68,"line":18561},[66,51938,36164],{"class":758},[66,51940,51941,51943,51945],{"class":68,"line":18566},[66,51942,33083],{"class":76},[66,51944,99],{"class":72},[66,51946,46338],{"class":76},[66,51948,51949],{"class":68,"line":18572},[66,51950,36177],{"class":758},[66,51952,51953],{"class":68,"line":18586},[66,51954,36182],{"class":758},[66,51956,51957,51959,51961],{"class":68,"line":18599},[66,51958,36187],{"class":76},[66,51960,36190],{"class":356},[66,51962,360],{"class":76},[66,51964,51965],{"class":68,"line":18604},[66,51966,36197],{"class":758},[66,51968,51969,51971,51973],{"class":68,"line":18618},[66,51970,35810],{"class":76},[66,51972,99],{"class":72},[66,51974,36206],{"class":76},[66,51976,51977],{"class":68,"line":18623},[66,51978,36211],{"class":758},[66,51980,51981],{"class":68,"line":18629},[66,51982,36216],{"class":76},[66,51984,51985],{"class":68,"line":18634},[66,51986,109],{"emptyLinePlaceholder":108},[66,51988,51989],{"class":68,"line":18648},[66,51990,36225],{"class":758},[66,51992,51993],{"class":68,"line":18653},[66,51994,36230],{"class":758},[66,51996,51997,51999,52001,52003,52005,52007,52009],{"class":68,"line":18658},[66,51998,33031],{"class":76},[66,52000,99],{"class":72},[66,52002,33038],{"class":356},[66,52004,3534],{"class":72},[66,52006,33043],{"class":76},[66,52008,1292],{"class":72},[66,52010,35907],{"class":356},[66,52012,52013,52015,52017],{"class":68,"line":18672},[66,52014,33083],{"class":76},[66,52016,99],{"class":72},[66,52018,34081],{"class":76},[66,52020,52021],{"class":68,"line":18684},[66,52022,36259],{"class":758},[66,52024,52025],{"class":68,"line":18689},[66,52026,36264],{"class":758},[66,52028,52029,52031,52033,52035,52038,52040,52043],{"class":68,"line":18702},[66,52030,36269],{"class":76},[66,52032,99],{"class":72},[66,52034,2869],{"class":76},[66,52036,52037],{"class":356},"'猫'",[66,52039,2362],{"class":76},[66,52041,52042],{"class":356},"'狗'",[66,52044,704],{"class":76},[66,52046,52047,52049],{"class":68,"line":18707},[66,52048,35966],{"class":72},[66,52050,34674],{"class":76},[66,52052,52053],{"class":68,"line":18712},[66,52054,36334],{"class":758},[66,52056,52057,52059,52061,52063],{"class":68,"line":18717},[66,52058,5222],{"class":72},[66,52060,36341],{"class":76},[66,52062,507],{"class":72},[66,52064,35985],{"class":76},[66,52066,52067,52069,52071],{"class":68,"line":18730},[66,52068,34400],{"class":76},[66,52070,99],{"class":72},[66,52072,34405],{"class":76},[66,52074,52075,52077,52079],{"class":68,"line":18735},[66,52076,34415],{"class":76},[66,52078,99],{"class":72},[66,52080,34420],{"class":76},[66,52082,52083],{"class":68,"line":34423},[66,52084,109],{"emptyLinePlaceholder":108},[66,52086,52087],{"class":68,"line":34429},[66,52088,36370],{"class":758},[66,52090,52091],{"class":68,"line":34435},[66,52092,34665],{"class":76},[66,52094,52095],{"class":68,"line":34441},[66,52096,36379],{"class":758},[66,52098,52099,52101,52103],{"class":68,"line":34447},[66,52100,34450],{"class":76},[66,52102,99],{"class":72},[66,52104,34455],{"class":76},[66,52106,52107],{"class":68,"line":34458},[66,52108,36392],{"class":758},[66,52110,52111,52113,52115,52117,52119,52121,52123],{"class":68,"line":34464},[66,52112,34467],{"class":76},[66,52114,99],{"class":72},[66,52116,34472],{"class":76},[66,52118,34475],{"class":1234},[66,52120,99],{"class":72},[66,52122,304],{"class":102},[66,52124,313],{"class":76},[66,52126,52127],{"class":68,"line":34484},[66,52128,36413],{"class":758},[66,52130,52131,52133,52135],{"class":68,"line":34490},[66,52132,36418],{"class":76},[66,52134,99],{"class":72},[66,52136,36423],{"class":76},[66,52138,52139,52141,52143],{"class":68,"line":34501},[66,52140,36428],{"class":76},[66,52142,99],{"class":72},[66,52144,36433],{"class":76},[66,52146,52147,52149,52151,52153,52155,52157,52159,52161],{"class":68,"line":34507},[66,52148,36438],{"class":102},[66,52150,348],{"class":76},[66,52152,36443],{"class":356},[66,52154,36446],{"class":76},[66,52156,36449],{"class":356},[66,52158,2362],{"class":76},[66,52160,36454],{"class":356},[66,52162,36457],{"class":76},[1903,52164,52165],{},"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":62,"searchDepth":80,"depth":80,"links":52167},[52168,52169,52170,52171],{"id":32386,"depth":112,"text":32387},{"id":39627,"depth":112,"text":39628},{"id":43059,"depth":112,"text":43060},{"id":47068,"depth":112,"text":47069},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":32378,"description":1926},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":52178,"title":52179,"body":52180,"description":1926,"extension":1927,"meta":52187,"navigation":108,"path":52188,"seo":52189,"stem":52190,"__hash__":52191},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":52181,"toc":52185},[52182],[10,52183,52179],{"id":52184},"_3yolo模型学习",{"title":62,"searchDepth":80,"depth":80,"links":52186},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":52179,"description":1926},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":52193,"title":52194,"body":52195,"description":52202,"extension":1927,"meta":52203,"navigation":108,"path":52205,"seo":52206,"stem":52207,"__hash__":52208},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":52196,"toc":52200},[52197],[19,52198,52199],{},"yolo模型还未补充",{"title":62,"searchDepth":80,"depth":80,"links":52201},[],"深度学习学习",{"category":52204},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":52194,"description":52202},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":52210,"title":52211,"body":52212,"description":1926,"extension":1927,"meta":52237,"navigation":108,"path":52238,"seo":52239,"stem":52240,"__hash__":52241},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":52213,"toc":52235},[52214,52217,52220,52225,52232],[10,52215,52211],{"id":52216},"_1工具",[19,52218,52219],{},"提示错误插件：有问题会提前报错",[19,52221,52222],{},[3304,52223],{"alt":62,"src":52224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,52226,52227],{},[2229,52228,52231],{"href":52229,"rel":52230},"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",[25668],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,52233,52234],{},"alt键加上下箭头可以实现语句的移动",{"title":62,"searchDepth":80,"depth":80,"links":52236},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":52211,"description":1926},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":52243,"title":52244,"body":52245,"description":1926,"extension":1927,"meta":55107,"navigation":108,"path":55108,"seo":55109,"stem":55110,"__hash__":55111},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":52246,"toc":55058},[52247,52250,52254,52258,52263,52266,52271,52275,52282,52287,52294,52299,52306,52311,52315,52320,52323,52327,52332,52336,52341,52344,52347,52350,52353,52356,52359,52362,52365,52370,52375,52380,52384,52387,52390,52394,52399,52402,52410,52415,52432,52440,52445,52450,52455,52460,52465,52468,52473,52478,52482,52491,52496,52501,52505,52510,52513,52517,52522,52530,52535,52540,52543,52548,52553,52558,52561,52564,52567,52572,52577,52580,52585,52588,52593,52596,52599,52602,52607,52610,52613,52628,52633,52638,52643,52646,52649,52652,52666,52669,52674,52679,52682,52685,52688,52691,52694,52697,52700,52704,52708,52713,52717,52720,52725,52730,52733,52738,52741,52745,52750,52753,52756,52759,52762,52765,52768,52771,52774,52777,52781,52786,52791,52796,52799,52802,52806,52811,52814,52818,52821,52824,52829,52832,52835,52839,52843,52846,52851,52856,52859,52888,52893,52898,52903,52908,52912,52917,52921,52926,52929,52933,52937,52942,52946,52951,52956,52960,52965,52968,52970,52973,52978,52982,52987,52991,52995,53000,53005,53010,53015,53019,53024,53029,53034,53037,53040,53045,53048,53053,53058,53063,53068,53072,53879,53883,54224,54229,54232,54235,54238,54241,54244,54247,54250,54253,54255,54258,54260,54263,54267,54272,54275,54278,54281,54285,54290,54295,54315,54318,54322,54327,54332,54349,54353,54382,54386,54408,54410,54449,54457,54463,54467,54470,54473,54478,54483,54486,54489,54492,54497,54502,54505,54508,54511,54514,54517,54520,54523,54526,54529,54532,54535,54537,54540,54543,54546,54549,54552,54555,54558,54561,54565,54570,54573,54578,54581,54584,54587,54590,54593,54596,54599,54601,54604,54607,54610,54613,54616,54619,54623,54626,54635,54638,54643,54646,54651,54654,54657,54660,54663,54666,54669,54672,54676,54680,54683,54686,54691,54696,54701,54705,54710,54715,54718,54721,54724,54727,54730,54735,54738,54743,54745,54750,54753,54757,54762,54765,54768,54773,54777,54780,54785,54788,54791,54820,54825,54828,54831,54834,54837,54840,54844,54847,54933,54937,54940,54945,54950,54957,54960,54963,54966,54969,54972,54977,54982,54985,54988,54991,54994,54997,55000,55003,55006,55009,55011,55014,55018,55023,55028,55033,55036,55041,55046,55049,55052,55055],[10,52248,52244],{"id":52249},"_2基础语法",[14,52251,52253],{"id":52252},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[484,52255,52257],{"id":52256},"_211-js组成","2.1.1 js组成",[31,52259,52260],{},[34,52261,52262],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,52264,52265],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[31,52267,52268],{"start":80},[34,52269,52270],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[484,52272,52274],{"id":52273},"_212-js书写位置","2.1.2 js书写位置",[31,52276,52277],{},[34,52278,52279],{},[2141,52280,52281],{},"内部 JavaScript",[19,52283,52284],{},[3304,52285],{"alt":62,"src":52286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[31,52288,52289],{"start":80},[34,52290,52291],{},[2141,52292,52293],{},"外部 JavaScript",[19,52295,52296],{},[3304,52297],{"alt":62,"src":52298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[31,52300,52301],{"start":112},[34,52302,52303],{},[2141,52304,52305],{},"内联 JavaScript",[19,52307,52308],{},[3304,52309],{"alt":62,"src":52310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[484,52312,52314],{"id":52313},"_213-javascript注释","2.1.3 JavaScript注释",[19,52316,52317],{},[3304,52318],{"alt":62,"src":52319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,52321,52322],{},"alt+shift+a一定要记住！",[484,52324,52326],{"id":52325},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,52328,52329],{},[3304,52330],{"alt":62,"src":52331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[484,52333,52335],{"id":52334},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[31,52337,52338],{},[34,52339,52340],{},"输出语法：",[19,52342,52343],{},"①document.write('要出的内容')",[19,52345,52346],{},"向body内输出内容；",[19,52348,52349],{},"如果输出的内容写的是标签，也会被解析cheng",[19,52351,52352],{},"②alert('要出的内容')",[19,52354,52355],{},"页面弹出警告对话框",[19,52357,52358],{},"③console.log('控制台打印')",[19,52360,52361],{},"控制台输出语法，程序员调试使用",[19,52363,52364],{},"输入log就行，自动生成：",[19,52366,52367],{},[3304,52368],{"alt":62,"src":52369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[31,52371,52372],{"start":80},[34,52373,52374],{},"输入语法：",[19,52376,52377],{},[3304,52378],{"alt":62,"src":52379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[484,52381,52383],{"id":52382},"_2116-字面量","21.1.6 字面量",[19,52385,52386],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,52388,52389],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,52391,52393],{"id":52392},"_22-变量","2.2 变量",[31,52395,52396],{},[34,52397,52398],{},"变量声明",[19,52400,52401],{},"let 变量名",[2982,52403,52404,52407],{},[34,52405,52406],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[34,52408,52409],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[31,52411,52412],{"start":80},[34,52413,52414],{},"变量赋值",[57,52416,52420],{"className":52417,"code":52418,"language":52419,"meta":62,"style":62},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[23,52421,52422,52427],{"__ignoreMap":62},[66,52423,52424],{"class":68,"line":69},[66,52425,52426],{"class":76},"let age\n",[66,52428,52429],{"class":68,"line":80},[66,52430,52431],{"class":76},"age=18\n",[31,52433,52434,52437],{"start":112},[34,52435,52436],{},"连这些（变量的初始化）：let age=18",[34,52438,52439],{},"更新变量",[19,52441,52442],{},[3304,52443],{"alt":62,"src":52444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[31,52446,52447],{"start":138},[34,52448,52449],{},"声明多个变量",[19,52451,52452],{},[3304,52453],{"alt":62,"src":52454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[31,52456,52457],{"start":227},[34,52458,52459],{},"变量命名规则与规范",[19,52461,52462],{},[3304,52463],{"alt":62,"src":52464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,52466,52467],{},"遵守小驼峰！",[31,52469,52470],{"start":236},[34,52471,52472],{},"变量拓展-let和var的区别",[19,52474,52475],{},[3304,52476],{"alt":62,"src":52477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,52479,52481],{"id":52480},"_23-数组","2.3 数组",[57,52483,52485],{"className":52417,"code":52484,"language":52419,"meta":62,"style":62},"let arr = []\n",[23,52486,52487],{"__ignoreMap":62},[66,52488,52489],{"class":68,"line":69},[66,52490,52484],{"class":76},[19,52492,52493],{},[3304,52494],{"alt":62,"src":52495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,52497,52498],{},[3304,52499],{"alt":62,"src":52500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,52502,52504],{"id":52503},"_24-常量","2.4 常量",[19,52506,52507],{},[3304,52508],{"alt":62,"src":52509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,52511,52512],{},"const — 类似于 let ，但是变量的值无法被修改",[14,52514,52516],{"id":52515},"_25-数据类型","2.5 数据类型",[19,52518,52519],{},[3304,52520],{"alt":62,"src":52521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[31,52523,52524,52527],{},[34,52525,52526],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[34,52528,52529],{},"算数运算符：",[19,52531,52532],{},[3304,52533],{"alt":62,"src":52534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[31,52536,52537],{"start":112},[34,52538,52539],{},"数字类型（Number）",[19,52541,52542],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,52544,52545],{},[3304,52546],{"alt":62,"src":52547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[31,52549,52550],{"start":129},[34,52551,52552],{},"字符串类型（string）",[19,52554,52555],{},[3304,52556],{"alt":62,"src":52557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,52559,52560],{},"反引号也是可以使用的",[19,52562,52563],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,52565,52566],{},"例如：document.write(\"我今年\"+age+\"岁\")",[31,52568,52569],{"start":138},[34,52570,52571],{},"模板字符串",[19,52573,52574],{},[3304,52575],{"alt":62,"src":52576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,52578,52579],{},"类似于python的字符串格式化",[31,52581,52582],{"start":227},[34,52583,52584],{},"布尔类型",[19,52586,52587],{},"true 和 false",[31,52589,52590],{"start":236},[34,52591,52592],{},"未定义类型（underfined）",[19,52594,52595],{},"表示没有赋值",[19,52597,52598],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,52600,52601],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[31,52603,52604],{"start":241},[34,52605,52606],{},"null（空类型）",[19,52608,52609],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,52611,52612],{},"赋值了，但是内容为空",[57,52614,52616],{"className":52417,"code":52615,"language":52419,"meta":62,"style":62},"typeof null\n输出的是'object'，是一个对象数据类型\n",[23,52617,52618,52623],{"__ignoreMap":62},[66,52619,52620],{"class":68,"line":69},[66,52621,52622],{"class":76},"typeof null\n",[66,52624,52625],{"class":68,"line":80},[66,52626,52627],{"class":76},"输出的是'object'，是一个对象数据类型\n",[31,52629,52630],{"start":372},[34,52631,52632],{},"控制台检测数据类型",[19,52634,52635],{},[3304,52636],{"alt":62,"src":52637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[31,52639,52640],{"start":377},[34,52641,52642],{},"类型转换",[19,52644,52645],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,52647,52648],{},"转换方式：隐式转换和显示转换",[19,52650,52651],{},"①隐式转换",[2982,52653,52654,52657,52660,52663],{},[34,52655,52656],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[34,52658,52659],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[34,52661,52662],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[34,52664,52665],{},"任何数据和字符串相加结果都是字符串",[19,52667,52668],{},"②显示转换",[19,52670,52671],{},[3304,52672],{"alt":62,"src":52673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,52675,52676],{},[3304,52677],{"alt":62,"src":52678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,52680,52681],{},"在输入的时候要用好隐式转换，简单写起来",[19,52683,52684],{},"let num = +prompt(’请输入数字：‘)",[19,52686,52687],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,52689,52690],{},"console.log(parseInt('12.333px'))",[19,52692,52693],{},"输出为：12",[19,52695,52696],{},"console.log(parseInt('a'a'a12.333px'))",[19,52698,52699],{},"输出：NaN",[14,52701,52703],{"id":52702},"_26-运算符","2.6 运算符",[484,52705,52707],{"id":52706},"_261-赋值运算符","2.6.1 赋值运算符",[19,52709,52710],{},[3304,52711],{"alt":62,"src":52712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[484,52714,52716],{"id":52715},"_262-一元运算符","2.6.2 一元运算符",[19,52718,52719],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,52721,52722],{},[3304,52723],{"alt":62,"src":52724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,52726,52727],{},[3304,52728],{"alt":62,"src":52729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,52731,52732],{},"两者的区别：",[19,52734,52735],{},[3304,52736],{"alt":62,"src":52737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,52739,52740],{},"前置先自加；后置后加，代码执行完之后再加",[484,52742,52744],{"id":52743},"_263-比较运算符","2.6.3 比较运算符",[19,52746,52747],{},[3304,52748],{"alt":62,"src":52749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,52751,52752],{},"比较运算符也有隐式转换",[19,52754,52755],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,52757,52758],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,52760,52761],{},"要使用三等，开发的时候",[19,52763,52764],{},"NaN不等于任何人，包括它自己",[19,52766,52767],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,52769,52770],{},"7\u002F10=0.7",[19,52772,52773],{},"最后：0.5+0.2=0.7",[19,52775,52776],{},"字符串比较，比较的是字符对应的ASCII码",[484,52778,52780],{"id":52779},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,52782,52783],{},[3304,52784],{"alt":62,"src":52785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,52787,52788],{},[3304,52789],{"alt":62,"src":52790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,52792,52793],{},[3304,52794],{"alt":62,"src":52795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,52797,52798],{},"上述题目选D",[19,52800,52801],{},"与真2假1；或真1假2",[484,52803,52805],{"id":52804},"_265-运算符优先级","2.6.5 运算符优先级",[19,52807,52808],{},[3304,52809],{"alt":62,"src":52810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,52812,52813],{},"先算逻辑与，后算逻辑或",[14,52815,52817],{"id":52816},"_27-语句","2.7 语句",[19,52819,52820],{},"表达式：是可以被求值的代码，会有结果给我们",[19,52822,52823],{},"语句：语句是可以被执行的代码，例如prompt()",[19,52825,52826],{},[3304,52827],{"alt":62,"src":52828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,52830,52831],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,52833,52834],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[484,52836,52838],{"id":52837},"_271-分支语句","2.7.1 分支语句",[23801,52840,52842],{"id":52841},"_2711-if分支语句","2.7.1.1 if分支语句",[19,52844,52845],{},"if语句单行简单的话，可以不写{}，写在一行就行",[31,52847,52848],{},[34,52849,52850],{},"单分支语句",[19,52852,52853],{},[3304,52854],{"alt":62,"src":52855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,52857,52858],{},"除了0，所有数字都为真",[57,52860,52862],{"className":52417,"code":52861,"language":52419,"meta":62,"style":62},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[23,52863,52864,52869,52874,52879,52883],{"__ignoreMap":62},[66,52865,52866],{"class":68,"line":69},[66,52867,52868],{"class":76},"if（0) {\n",[66,52870,52871],{"class":68,"line":80},[66,52872,52873],{"class":76},"    let a=1\n",[66,52875,52876],{"class":68,"line":112},[66,52877,52878],{"class":76},"    alert(typeof a)\n",[66,52880,52881],{"class":68,"line":129},[66,52882,3407],{"class":76},[66,52884,52885],{"class":68,"line":138},[66,52886,52887],{"class":76},"不输出，括号为假\n",[31,52889,52890],{"start":80},[34,52891,52892],{},"双分支语句",[19,52894,52895],{},[3304,52896],{"alt":62,"src":52897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[31,52899,52900],{"start":112},[34,52901,52902],{},"多分支语句",[19,52904,52905],{},[3304,52906],{"alt":62,"src":52907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[23801,52909,52911],{"id":52910},"_2712-三元运算符","2.7.1.2 三元运算符",[19,52913,52914],{},[3304,52915],{"alt":62,"src":52916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[23801,52918,52920],{"id":52919},"_2713-switch语句","2.7.1.3 switch语句",[19,52922,52923],{},[3304,52924],{"alt":62,"src":52925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,52927,52928],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[484,52930,52932],{"id":52931},"_272-循环语句","2.7.2 循环语句",[23801,52934,52936],{"id":52935},"_2721-断点演示","2.7.2.1 断点演示",[19,52938,52939],{},[3304,52940],{"alt":62,"src":52941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[23801,52943,52945],{"id":52944},"_2722-while循环","2.7.2.2 while循环",[19,52947,52948],{},[3304,52949],{"alt":62,"src":52950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,52952,52953],{},[3304,52954],{"alt":62,"src":52955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[23801,52957,52959],{"id":52958},"_2723-for循环","2.7.2.3 for循环",[19,52961,52962],{},[3304,52963],{"alt":62,"src":52964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,52966,52967],{},"for(;;) {",[19,52969,457],{},[19,52971,52972],{},"表示无限循环",[19,52974,52975],{},[3304,52976],{"alt":62,"src":52977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[23801,52979,52981],{"id":52980},"_2724-循环的退出","2.7.2.4 循环的退出",[19,52983,52984],{},[3304,52985],{"alt":62,"src":52986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,52988,52990],{"id":52989},"_28-数组","2.8 数组",[484,52992,52994],{"id":52993},"_281-基础认识","2.8.1 基础认识",[19,52996,52997],{},[3304,52998],{"alt":62,"src":52999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,53001,53002],{},[3304,53003],{"alt":62,"src":53004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,53006,53007],{},[3304,53008],{"alt":62,"src":53009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,53011,53012],{},[3304,53013],{"alt":62,"src":53014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[484,53016,53018],{"id":53017},"_282-操作数组","2.8.2 操作数组",[19,53020,53021],{},[3304,53022],{"alt":62,"src":53023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[31,53025,53026],{},[34,53027,53028],{},"添加元素",[19,53030,53031],{},[3304,53032],{"alt":62,"src":53033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,53035,53036],{},"console.log(arr.push('green'))",[19,53038,53039],{},"输出结果：为新数组的长度",[19,53041,53042],{},[3304,53043],{"alt":62,"src":53044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,53046,53047],{},"push用的非常多，一定要记住",[31,53049,53050],{},[34,53051,53052],{},"删除元素",[19,53054,53055],{},[3304,53056],{"alt":62,"src":53057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,53059,53060],{},[3304,53061],{"alt":62,"src":53062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,53064,53065],{},[3304,53066],{"alt":62,"src":53067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[484,53069,53071],{"id":53070},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[57,53073,53075],{"className":52417,"code":53074,"language":52419,"meta":62,"style":62},"\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",[23,53076,53077,53092,53108,53112,53121,53139,53163,53185,53199,53207,53214,53226,53237,53241,53245,53252,53264,53279,53292,53311,53328,53343,53355,53367,53379,53383,53387,53398,53408,53420,53432,53444,53455,53459,53463,53475,53479,53493,53497,53501,53512,53526,53538,53552,53556,53565,53574,53578,53587,53591,53600,53605,53610,53623,53651,53656,53661,53686,53691,53695,53700,53705,53720,53724,53729,53759,53771,53787,53803,53817,53822,53829,53833,53838,53851,53859,53867,53871],{"__ignoreMap":62},[66,53078,53079,53082,53086,53089],{"class":68,"line":69},[66,53080,53081],{"class":76},"\u003C!",[66,53083,53085],{"class":53084},"s9eBZ","DOCTYPE",[66,53087,53088],{"class":3793}," html",[66,53090,53091],{"class":76},">\n",[66,53093,53094,53096,53098,53101,53103,53106],{"class":68,"line":80},[66,53095,413],{"class":76},[66,53097,52419],{"class":53084},[66,53099,53100],{"class":3793}," lang",[66,53102,99],{"class":76},[66,53104,53105],{"class":356},"\"en\"",[66,53107,53091],{"class":76},[66,53109,53110],{"class":68,"line":112},[66,53111,109],{"emptyLinePlaceholder":108},[66,53113,53114,53116,53119],{"class":68,"line":129},[66,53115,413],{"class":76},[66,53117,53118],{"class":53084},"head",[66,53120,53091],{"class":76},[66,53122,53123,53126,53129,53132,53134,53137],{"class":68,"line":138},[66,53124,53125],{"class":76},"    \u003C",[66,53127,53128],{"class":53084},"meta",[66,53130,53131],{"class":3793}," charset",[66,53133,99],{"class":76},[66,53135,53136],{"class":356},"\"UTF-8\"",[66,53138,53091],{"class":76},[66,53140,53141,53143,53145,53148,53150,53153,53156,53158,53161],{"class":68,"line":227},[66,53142,53125],{"class":76},[66,53144,53128],{"class":53084},[66,53146,53147],{"class":3793}," http-equiv",[66,53149,99],{"class":76},[66,53151,53152],{"class":356},"\"X-UA-Compatible\"",[66,53154,53155],{"class":3793}," content",[66,53157,99],{"class":76},[66,53159,53160],{"class":356},"\"IE=edge\"",[66,53162,53091],{"class":76},[66,53164,53165,53167,53169,53171,53173,53176,53178,53180,53183],{"class":68,"line":236},[66,53166,53125],{"class":76},[66,53168,53128],{"class":53084},[66,53170,16724],{"class":3793},[66,53172,99],{"class":76},[66,53174,53175],{"class":356},"\"viewport\"",[66,53177,53155],{"class":3793},[66,53179,99],{"class":76},[66,53181,53182],{"class":356},"\"width=device-width, initial-scale=1.0\"",[66,53184,53091],{"class":76},[66,53186,53187,53189,53192,53195,53197],{"class":68,"line":241},[66,53188,53125],{"class":76},[66,53190,53191],{"class":53084},"title",[66,53193,53194],{"class":76},">Document\u003C\u002F",[66,53196,53191],{"class":53084},[66,53198,53091],{"class":76},[66,53200,53201,53203,53205],{"class":68,"line":372},[66,53202,53125],{"class":76},[66,53204,1903],{"class":53084},[66,53206,53091],{"class":76},[66,53208,53209,53212],{"class":68,"line":377},[66,53210,53211],{"class":53084},"        *",[66,53213,17375],{"class":76},[66,53215,53216,53219,53222,53224],{"class":68,"line":392},[66,53217,53218],{"class":102},"            margin",[66,53220,53221],{"class":76},": ",[66,53223,2183],{"class":102},[66,53225,3135],{"class":76},[66,53227,53228,53231,53233,53235],{"class":68,"line":405},[66,53229,53230],{"class":102},"            padding",[66,53232,53221],{"class":76},[66,53234,2183],{"class":102},[66,53236,3135],{"class":76},[66,53238,53239],{"class":68,"line":418},[66,53240,4353],{"class":76},[66,53242,53243],{"class":68,"line":430},[66,53244,109],{"emptyLinePlaceholder":108},[66,53246,53247,53250],{"class":68,"line":438},[66,53248,53249],{"class":3793},"        .box",[66,53251,17375],{"class":76},[66,53253,53254,53257,53259,53262],{"class":68,"line":465},[66,53255,53256],{"class":102},"            display",[66,53258,53221],{"class":76},[66,53260,53261],{"class":102},"flex",[66,53263,3135],{"class":76},[66,53265,53266,53269,53271,53274,53277],{"class":68,"line":1805},[66,53267,53268],{"class":102},"            width",[66,53270,53221],{"class":76},[66,53272,53273],{"class":102},"700",[66,53275,53276],{"class":72},"px",[66,53278,3135],{"class":76},[66,53280,53281,53284,53286,53288,53290],{"class":68,"line":1817},[66,53282,53283],{"class":102},"            height",[66,53285,53221],{"class":76},[66,53287,5790],{"class":102},[66,53289,53276],{"class":72},[66,53291,3135],{"class":76},[66,53293,53294,53297,53299,53301,53303,53306,53309],{"class":68,"line":1822},[66,53295,53296],{"class":102},"            border-left",[66,53298,53221],{"class":76},[66,53300,304],{"class":102},[66,53302,53276],{"class":72},[66,53304,53305],{"class":102}," solid",[66,53307,53308],{"class":102}," pink",[66,53310,3135],{"class":76},[66,53312,53313,53316,53318,53320,53322,53324,53326],{"class":68,"line":1829},[66,53314,53315],{"class":102},"            border-bottom",[66,53317,53221],{"class":76},[66,53319,304],{"class":102},[66,53321,53276],{"class":72},[66,53323,53305],{"class":102},[66,53325,53308],{"class":102},[66,53327,3135],{"class":76},[66,53329,53330,53332,53334,53336,53338,53341],{"class":68,"line":3529},[66,53331,53218],{"class":102},[66,53333,53221],{"class":76},[66,53335,2635],{"class":102},[66,53337,53276],{"class":72},[66,53339,53340],{"class":102}," auto",[66,53342,3135],{"class":76},[66,53344,53345,53348,53350,53353],{"class":68,"line":3557},[66,53346,53347],{"class":102},"            justify-content",[66,53349,53221],{"class":76},[66,53351,53352],{"class":102},"space-around",[66,53354,3135],{"class":76},[66,53356,53357,53360,53362,53365],{"class":68,"line":3562},[66,53358,53359],{"class":102},"            align-items",[66,53361,53221],{"class":76},[66,53363,53364],{"class":102},"flex-end",[66,53366,3135],{"class":76},[66,53368,53369,53372,53374,53377],{"class":68,"line":3579},[66,53370,53371],{"class":102},"            text-align",[66,53373,53221],{"class":76},[66,53375,53376],{"class":102},"center",[66,53378,3135],{"class":76},[66,53380,53381],{"class":68,"line":3584},[66,53382,4353],{"class":76},[66,53384,53385],{"class":68,"line":3589},[66,53386,109],{"emptyLinePlaceholder":108},[66,53388,53389,53391,53393,53396],{"class":68,"line":3594},[66,53390,53249],{"class":3793},[66,53392,386],{"class":72},[66,53394,53395],{"class":53084},"div",[66,53397,17375],{"class":76},[66,53399,53400,53402,53404,53406],{"class":68,"line":3608},[66,53401,53256],{"class":102},[66,53403,53221],{"class":76},[66,53405,53261],{"class":102},[66,53407,3135],{"class":76},[66,53409,53410,53412,53414,53416,53418],{"class":68,"line":3613},[66,53411,53268],{"class":102},[66,53413,53221],{"class":76},[66,53415,2635],{"class":102},[66,53417,53276],{"class":72},[66,53419,3135],{"class":76},[66,53421,53422,53425,53427,53430],{"class":68,"line":4401},[66,53423,53424],{"class":102},"            background-color",[66,53426,53221],{"class":76},[66,53428,53429],{"class":102},"pink",[66,53431,3135],{"class":76},[66,53433,53434,53437,53439,53442],{"class":68,"line":4415},[66,53435,53436],{"class":102},"            flex-direction",[66,53438,53221],{"class":76},[66,53440,53441],{"class":102},"column",[66,53443,3135],{"class":76},[66,53445,53446,53448,53450,53453],{"class":68,"line":4423},[66,53447,53347],{"class":102},[66,53449,53221],{"class":76},[66,53451,53452],{"class":102},"space-between",[66,53454,3135],{"class":76},[66,53456,53457],{"class":68,"line":4428},[66,53458,4353],{"class":76},[66,53460,53461],{"class":68,"line":4434},[66,53462,109],{"emptyLinePlaceholder":108},[66,53464,53465,53467,53470,53473],{"class":68,"line":4440},[66,53466,53249],{"class":3793},[66,53468,53469],{"class":53084}," div",[66,53471,53472],{"class":53084}," span",[66,53474,17375],{"class":76},[66,53476,53477],{"class":68,"line":4445},[66,53478,109],{"emptyLinePlaceholder":108},[66,53480,53481,53484,53486,53489,53491],{"class":68,"line":9759},[66,53482,53483],{"class":102},"            margin-top",[66,53485,53221],{"class":76},[66,53487,53488],{"class":102},"-20",[66,53490,53276],{"class":72},[66,53492,3135],{"class":76},[66,53494,53495],{"class":68,"line":9783},[66,53496,4353],{"class":76},[66,53498,53499],{"class":68,"line":9788},[66,53500,109],{"emptyLinePlaceholder":108},[66,53502,53503,53505,53507,53510],{"class":68,"line":9794},[66,53504,53249],{"class":3793},[66,53506,53469],{"class":53084},[66,53508,53509],{"class":53084}," h4",[66,53511,17375],{"class":76},[66,53513,53514,53517,53519,53522,53524],{"class":68,"line":9821},[66,53515,53516],{"class":102},"            margin-bottom",[66,53518,53221],{"class":76},[66,53520,53521],{"class":102},"-35",[66,53523,53276],{"class":72},[66,53525,3135],{"class":76},[66,53527,53528,53530,53532,53534,53536],{"class":68,"line":9826},[66,53529,53268],{"class":102},[66,53531,53221],{"class":76},[66,53533,2340],{"class":102},[66,53535,53276],{"class":72},[66,53537,3135],{"class":76},[66,53539,53540,53543,53545,53548,53550],{"class":68,"line":9832},[66,53541,53542],{"class":102},"            margin-left",[66,53544,53221],{"class":76},[66,53546,53547],{"class":102},"-10",[66,53549,53276],{"class":72},[66,53551,3135],{"class":76},[66,53553,53554],{"class":68,"line":9844},[66,53555,4353],{"class":76},[66,53557,53558,53561,53563],{"class":68,"line":9856},[66,53559,53560],{"class":76},"    \u003C\u002F",[66,53562,1903],{"class":53084},[66,53564,53091],{"class":76},[66,53566,53567,53570,53572],{"class":68,"line":9868},[66,53568,53569],{"class":76},"\u003C\u002F",[66,53571,53118],{"class":53084},[66,53573,53091],{"class":76},[66,53575,53576],{"class":68,"line":11523},[66,53577,109],{"emptyLinePlaceholder":108},[66,53579,53580,53582,53585],{"class":68,"line":11548},[66,53581,413],{"class":76},[66,53583,53584],{"class":53084},"body",[66,53586,53091],{"class":76},[66,53588,53589],{"class":68,"line":11571},[66,53590,109],{"emptyLinePlaceholder":108},[66,53592,53593,53595,53598],{"class":68,"line":11595},[66,53594,53125],{"class":76},[66,53596,53597],{"class":53084},"script",[66,53599,53091],{"class":76},[66,53601,53602],{"class":68,"line":11600},[66,53603,53604],{"class":758},"        \u002F\u002F 1. 四次弹框效果\n",[66,53606,53607],{"class":68,"line":11605},[66,53608,53609],{"class":758},"        \u002F\u002F 声明一个新的数组\n",[66,53611,53612,53615,53618,53620],{"class":68,"line":11610},[66,53613,53614],{"class":72},"        let",[66,53616,53617],{"class":76}," arr ",[66,53619,99],{"class":72},[66,53621,53622],{"class":76}," []\n",[66,53624,53625,53627,53629,53632,53634,53636,53638,53640,53642,53645,53647,53649],{"class":68,"line":11619},[66,53626,5222],{"class":72},[66,53628,3492],{"class":76},[66,53630,53631],{"class":72},"let",[66,53633,117],{"class":76},[66,53635,99],{"class":72},[66,53637,1187],{"class":102},[66,53639,11254],{"class":76},[66,53641,120],{"class":72},[66,53643,53644],{"class":102}," 4",[66,53646,5033],{"class":76},[66,53648,4118],{"class":72},[66,53650,14247],{"class":76},[66,53652,53653],{"class":68,"line":11624},[66,53654,53655],{"class":758},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[66,53657,53658],{"class":68,"line":11630},[66,53659,53660],{"class":758},"            \u002F\u002F arr.push(num)\n",[66,53662,53663,53666,53669,53671,53674,53676,53679,53681,53684],{"class":68,"line":11651},[66,53664,53665],{"class":76},"            arr.",[66,53667,53668],{"class":3793},"push",[66,53670,348],{"class":76},[66,53672,53673],{"class":3793},"prompt",[66,53675,348],{"class":76},[66,53677,53678],{"class":356},"`请输入第${",[66,53680,257],{"class":76},[66,53682,53683],{"class":356},"}季度的数据:`",[66,53685,360],{"class":76},[66,53687,53688],{"class":68,"line":11657},[66,53689,53690],{"class":758},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[66,53692,53693],{"class":68,"line":11671},[66,53694,4353],{"class":76},[66,53696,53697],{"class":68,"line":11677},[66,53698,53699],{"class":758},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[66,53701,53702],{"class":68,"line":11704},[66,53703,53704],{"class":758},"        \u002F\u002F 盒子开头\n",[66,53706,53707,53710,53713,53715,53718],{"class":68,"line":11713},[66,53708,53709],{"class":76},"        document.",[66,53711,53712],{"class":3793},"write",[66,53714,348],{"class":76},[66,53716,53717],{"class":356},"` \u003Cdiv class=\"box\">`",[66,53719,313],{"class":76},[66,53721,53722],{"class":68,"line":11719},[66,53723,109],{"emptyLinePlaceholder":108},[66,53725,53726],{"class":68,"line":11727},[66,53727,53728],{"class":758},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[66,53730,53731,53733,53735,53737,53739,53741,53743,53745,53747,53750,53753,53755,53757],{"class":68,"line":11732},[66,53732,5222],{"class":72},[66,53734,3492],{"class":76},[66,53736,53631],{"class":72},[66,53738,117],{"class":76},[66,53740,99],{"class":72},[66,53742,962],{"class":102},[66,53744,11254],{"class":76},[66,53746,413],{"class":72},[66,53748,53749],{"class":76}," arr.",[66,53751,53752],{"class":102},"length",[66,53754,5033],{"class":76},[66,53756,4118],{"class":72},[66,53758,14247],{"class":76},[66,53760,53761,53764,53766,53768],{"class":68,"line":18407},[66,53762,53763],{"class":76},"            document.",[66,53765,53712],{"class":3793},[66,53767,348],{"class":76},[66,53769,53770],{"class":356},"`\n",[66,53772,53773,53776,53778,53780,53782,53784],{"class":68,"line":18413},[66,53774,53775],{"class":356},"              \u003Cdiv style=\"height: ${",[66,53777,5697],{"class":76},[66,53779,2869],{"class":356},[66,53781,257],{"class":76},[66,53783,2917],{"class":356},[66,53785,53786],{"class":356},"}px;\">\n",[66,53788,53789,53792,53794,53796,53798,53800],{"class":68,"line":18436},[66,53790,53791],{"class":356},"                \u003Cspan>${",[66,53793,5697],{"class":76},[66,53795,2869],{"class":356},[66,53797,257],{"class":76},[66,53799,2917],{"class":356},[66,53801,53802],{"class":356},"}\u003C\u002Fspan>\n",[66,53804,53805,53808,53810,53812,53814],{"class":68,"line":18442},[66,53806,53807],{"class":356},"                \u003Ch4>第${",[66,53809,257],{"class":76},[66,53811,47352],{"class":72},[66,53813,1187],{"class":102},[66,53815,53816],{"class":356},"}季度\u003C\u002Fh4>\n",[66,53818,53819],{"class":68,"line":18465},[66,53820,53821],{"class":356},"              \u003C\u002Fdiv>          \n",[66,53823,53824,53827],{"class":68,"line":18479},[66,53825,53826],{"class":356},"            `",[66,53828,313],{"class":76},[66,53830,53831],{"class":68,"line":18499},[66,53832,4353],{"class":76},[66,53834,53835],{"class":68,"line":18505},[66,53836,53837],{"class":758},"        \u002F\u002F 盒子结尾\n",[66,53839,53840,53842,53844,53846,53849],{"class":68,"line":18516},[66,53841,53709],{"class":76},[66,53843,53712],{"class":3793},[66,53845,348],{"class":76},[66,53847,53848],{"class":356},"` \u003C\u002Fdiv>`",[66,53850,313],{"class":76},[66,53852,53853,53855,53857],{"class":68,"line":18539},[66,53854,53560],{"class":76},[66,53856,53597],{"class":53084},[66,53858,53091],{"class":76},[66,53860,53861,53863,53865],{"class":68,"line":18561},[66,53862,53569],{"class":76},[66,53864,53584],{"class":53084},[66,53866,53091],{"class":76},[66,53868,53869],{"class":68,"line":18566},[66,53870,109],{"emptyLinePlaceholder":108},[66,53872,53873,53875,53877],{"class":68,"line":18572},[66,53874,53569],{"class":76},[66,53876,52419],{"class":53084},[66,53878,53091],{"class":76},[484,53880,53882],{"id":53881},"_284-冒泡排序","2.8.4 冒泡排序",[57,53884,53886],{"className":52417,"code":53885,"language":52419,"meta":62,"style":62},"\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",[23,53887,53888,53898,53912,53916,53924,53939,53959,53971,53979,53983,53991,53999,54030,54062,54099,54104,54123,54128,54141,54156,54172,54176,54181,54185,54195,54204,54212,54216],{"__ignoreMap":62},[66,53889,53890,53892,53894,53896],{"class":68,"line":69},[66,53891,53081],{"class":76},[66,53893,53085],{"class":53084},[66,53895,53088],{"class":3793},[66,53897,53091],{"class":76},[66,53899,53900,53902,53904,53906,53908,53910],{"class":68,"line":80},[66,53901,413],{"class":76},[66,53903,52419],{"class":53084},[66,53905,53100],{"class":3793},[66,53907,99],{"class":76},[66,53909,53105],{"class":356},[66,53911,53091],{"class":76},[66,53913,53914],{"class":68,"line":112},[66,53915,109],{"emptyLinePlaceholder":108},[66,53917,53918,53920,53922],{"class":68,"line":129},[66,53919,413],{"class":76},[66,53921,53118],{"class":53084},[66,53923,53091],{"class":76},[66,53925,53926,53929,53931,53933,53935,53937],{"class":68,"line":138},[66,53927,53928],{"class":76},"  \u003C",[66,53930,53128],{"class":53084},[66,53932,53131],{"class":3793},[66,53934,99],{"class":76},[66,53936,53136],{"class":356},[66,53938,53091],{"class":76},[66,53940,53941,53943,53945,53947,53949,53951,53953,53955,53957],{"class":68,"line":227},[66,53942,53928],{"class":76},[66,53944,53128],{"class":53084},[66,53946,16724],{"class":3793},[66,53948,99],{"class":76},[66,53950,53175],{"class":356},[66,53952,53155],{"class":3793},[66,53954,99],{"class":76},[66,53956,53182],{"class":356},[66,53958,53091],{"class":76},[66,53960,53961,53963,53965,53967,53969],{"class":68,"line":236},[66,53962,53928],{"class":76},[66,53964,53191],{"class":53084},[66,53966,53194],{"class":76},[66,53968,53191],{"class":53084},[66,53970,53091],{"class":76},[66,53972,53973,53975,53977],{"class":68,"line":241},[66,53974,53569],{"class":76},[66,53976,53118],{"class":53084},[66,53978,53091],{"class":76},[66,53980,53981],{"class":68,"line":372},[66,53982,109],{"emptyLinePlaceholder":108},[66,53984,53985,53987,53989],{"class":68,"line":377},[66,53986,413],{"class":76},[66,53988,53584],{"class":53084},[66,53990,53091],{"class":76},[66,53992,53993,53995,53997],{"class":68,"line":392},[66,53994,53928],{"class":76},[66,53996,53597],{"class":53084},[66,53998,53091],{"class":76},[66,54000,54001,54004,54006,54008,54010,54012,54014,54016,54018,54020,54022,54024,54026,54028],{"class":68,"line":405},[66,54002,54003],{"class":72},"    let",[66,54005,53617],{"class":76},[66,54007,99],{"class":72},[66,54009,688],{"class":76},[66,54011,752],{"class":102},[66,54013,307],{"class":76},[66,54015,1076],{"class":102},[66,54017,307],{"class":76},[66,54019,1520],{"class":102},[66,54021,307],{"class":76},[66,54023,795],{"class":102},[66,54025,307],{"class":76},[66,54027,304],{"class":102},[66,54029,704],{"class":76},[66,54031,54032,54034,54036,54038,54040,54042,54044,54046,54048,54050,54052,54054,54056,54058,54060],{"class":68,"line":418},[66,54033,1083],{"class":72},[66,54035,3492],{"class":76},[66,54037,53631],{"class":72},[66,54039,117],{"class":76},[66,54041,99],{"class":72},[66,54043,962],{"class":102},[66,54045,11254],{"class":76},[66,54047,413],{"class":72},[66,54049,53749],{"class":76},[66,54051,53752],{"class":102},[66,54053,1593],{"class":72},[66,54055,1187],{"class":102},[66,54057,5033],{"class":76},[66,54059,4118],{"class":72},[66,54061,14247],{"class":76},[66,54063,54064,54067,54069,54071,54073,54075,54077,54079,54081,54083,54085,54087,54089,54091,54093,54095,54097],{"class":68,"line":430},[66,54065,54066],{"class":72},"      for",[66,54068,3492],{"class":76},[66,54070,53631],{"class":72},[66,54072,1086],{"class":76},[66,54074,99],{"class":72},[66,54076,962],{"class":102},[66,54078,11314],{"class":76},[66,54080,413],{"class":72},[66,54082,53749],{"class":76},[66,54084,53752],{"class":102},[66,54086,1593],{"class":72},[66,54088,117],{"class":76},[66,54090,2511],{"class":72},[66,54092,1187],{"class":102},[66,54094,11321],{"class":76},[66,54096,4118],{"class":72},[66,54098,14247],{"class":76},[66,54100,54101],{"class":68,"line":438},[66,54102,54103],{"class":758},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[66,54105,54106,54108,54111,54113,54116,54118,54120],{"class":68,"line":465},[66,54107,4321],{"class":72},[66,54109,54110],{"class":76}," (arr[j] ",[66,54112,386],{"class":72},[66,54114,54115],{"class":76}," arr[j ",[66,54117,1184],{"class":72},[66,54119,1187],{"class":102},[66,54121,54122],{"class":76},"]) {\n",[66,54124,54125],{"class":68,"line":1805},[66,54126,54127],{"class":758},"          \u002F\u002F 交换两个变量\n",[66,54129,54130,54133,54136,54138],{"class":68,"line":1817},[66,54131,54132],{"class":72},"          let",[66,54134,54135],{"class":76}," tmp ",[66,54137,99],{"class":72},[66,54139,54140],{"class":76}," arr[j]\n",[66,54142,54143,54146,54148,54150,54152,54154],{"class":68,"line":1822},[66,54144,54145],{"class":76},"          arr[j] ",[66,54147,99],{"class":72},[66,54149,54115],{"class":76},[66,54151,1184],{"class":72},[66,54153,1187],{"class":102},[66,54155,704],{"class":76},[66,54157,54158,54161,54163,54165,54167,54169],{"class":68,"line":1829},[66,54159,54160],{"class":76},"          arr[j ",[66,54162,1184],{"class":72},[66,54164,1187],{"class":102},[66,54166,6259],{"class":76},[66,54168,99],{"class":72},[66,54170,54171],{"class":76}," tmp\n",[66,54173,54174],{"class":68,"line":3529},[66,54175,4353],{"class":76},[66,54177,54178],{"class":68,"line":3557},[66,54179,54180],{"class":76},"      }\n",[66,54182,54183],{"class":68,"line":3562},[66,54184,4013],{"class":76},[66,54186,54187,54190,54192],{"class":68,"line":3579},[66,54188,54189],{"class":76},"    document.",[66,54191,53712],{"class":3793},[66,54193,54194],{"class":76},"(arr)\n",[66,54196,54197,54200,54202],{"class":68,"line":3584},[66,54198,54199],{"class":76},"  \u003C\u002F",[66,54201,53597],{"class":53084},[66,54203,53091],{"class":76},[66,54205,54206,54208,54210],{"class":68,"line":3589},[66,54207,53569],{"class":76},[66,54209,53584],{"class":53084},[66,54211,53091],{"class":76},[66,54213,54214],{"class":68,"line":3594},[66,54215,109],{"emptyLinePlaceholder":108},[66,54217,54218,54220,54222],{"class":68,"line":3608},[66,54219,53569],{"class":76},[66,54221,52419],{"class":53084},[66,54223,53091],{"class":76},[19,54225,54226],{},[3304,54227],{"alt":62,"src":54228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,54230,54231],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,54233,54234],{},"let arr = [4, 2, 5, 1, 3]",[19,54236,54237],{},"\u002F\u002F 1.升序排列写法",[19,54239,54240],{},"arr.sort(function (a, b) {",[19,54242,54243],{},"return a - b",[19,54245,54246],{},"})",[19,54248,54249],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,54251,54252],{},"\u002F\u002F 降序排列写法",[19,54254,54240],{},[19,54256,54257],{},"return b - a",[19,54259,54246],{},[19,54261,54262],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,54264,54266],{"id":54265},"_29-函数","2.9 函数",[19,54268,54269],{},[3304,54270],{"alt":62,"src":54271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,54273,54274],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,54276,54277],{},"函数的声明用function",[19,54279,54280],{},"函数里边可以嵌套函数",[484,54282,54284],{"id":54283},"_291-函数传参","2.9.1 函数传参",[19,54286,54287],{},[3304,54288],{"alt":62,"src":54289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,54291,54292],{},[3304,54293],{"alt":62,"src":54294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[2982,54296,54297,54300,54303,54306,54309,54312],{},[34,54298,54299],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[34,54301,54302],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[34,54304,54305],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[34,54307,54308],{},"开发中尽量保持形参和实参个数一致",[34,54310,54311],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[34,54313,54314],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,54316,54317],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[484,54319,54321],{"id":54320},"_292-函数的返回值","2.9.2 函数的返回值",[19,54323,54324],{},[3304,54325],{"alt":62,"src":54326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,54328,54329],{},[3304,54330],{"alt":62,"src":54331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[2982,54333,54334,54337,54340,54343,54346],{},[34,54335,54336],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[34,54338,54339],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[34,54341,54342],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[34,54344,54345],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[34,54347,54348],{},"断点调试:进入函数内部看执行过程F11",[484,54350,54352],{"id":54351},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[57,54354,54356],{"className":52417,"code":54355,"language":52419,"meta":62,"style":62},"    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",[23,54357,54358,54363,54368,54372,54377],{"__ignoreMap":62},[66,54359,54360],{"class":68,"line":69},[66,54361,54362],{"class":76},"    function fn(a, b) {\n",[66,54364,54365],{"class":68,"line":80},[66,54366,54367],{"class":76},"      console.log(a + b);\n",[66,54369,54370],{"class":68,"line":112},[66,54371,4013],{"class":76},[66,54373,54374],{"class":68,"line":129},[66,54375,54376],{"class":76},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[66,54378,54379],{"class":68,"line":138},[66,54380,54381],{"class":76},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[484,54383,54385],{"id":54384},"_294-作用域","2.9.4 作用域",[2982,54387,54388,54394,54399,54402,54405],{},[34,54389,54390,54391],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[2141,54392,54393],{},"作用域",[34,54395,54396],{},[2141,54397,54398],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[34,54400,54401],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[34,54403,54404],{},"函数内部可以直接所使用全局变量",[34,54406,54407],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,54409,16438],{},[57,54411,54413],{"className":52417,"code":54412,"language":52419,"meta":62,"style":62},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[23,54414,54415,54420,54425,54429,54434,54439,54444],{"__ignoreMap":62},[66,54416,54417],{"class":68,"line":69},[66,54418,54419],{"class":76},"    function fun() {\n",[66,54421,54422],{"class":68,"line":80},[66,54423,54424],{"class":76},"      num = 10\n",[66,54426,54427],{"class":68,"line":112},[66,54428,4013],{"class":76},[66,54430,54431],{"class":68,"line":129},[66,54432,54433],{"class":76},"    fun()\n",[66,54435,54436],{"class":68,"line":138},[66,54437,54438],{"class":76},"    console.log(num)\n",[66,54440,54441],{"class":68,"line":227},[66,54442,54443],{"class":76},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[66,54445,54446],{"class":68,"line":236},[66,54447,54448],{"class":76},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[2982,54450,54451,54454],{},[34,54452,54453],{},"函数内部的形参可以看做是局部变量",[34,54455,54456],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,54458,54459,54460],{},"变量访问原则： ",[2141,54461,54462],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[484,54464,54466],{"id":54465},"_295-匿名函数","2.9.5 匿名函数",[19,54468,54469],{},"函数可以分为具名函数和匿名函数",[19,54471,54472],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[31,54474,54475],{},[34,54476,54477],{},"函数表达式",[19,54479,54480],{},[3304,54481],{"alt":62,"src":54482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,54484,54485],{},"里边也可以写参数",[19,54487,54488],{},"具名函数调用位置可以随意调整；",[19,54490,54491],{},"匿名函数函数表达式形式只能在声明后才可以使用",[31,54493,54494],{"start":80},[34,54495,54496],{},"立即执行函数",[19,54498,54499],{},[3304,54500],{"alt":62,"src":54501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,54503,54504],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,54506,54507],{},"写法：两个小括号，然后在第一个小括号中写function",[19,54509,54510],{},"(function () {})();",[19,54512,54513],{},"不要落下最后的;",[19,54515,54516],{},"立即执行函数必须要加;",[19,54518,54519],{},"分号写前写后都没问题",[19,54521,54522],{},"写前：",[19,54524,54525],{},"(function() {})()",[19,54527,54528],{},";(function () {})();",[19,54530,54531],{},"写后:",[19,54533,54534],{},"(function() {})();",[19,54536,54510],{},[19,54538,54539],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,54541,54542],{},"还有一种写法：",[19,54544,54545],{},"(function(){}());",[19,54547,54548],{},"或者:",[19,54550,54551],{},"!function(){}();",[19,54553,54554],{},"立即执行函数有时候也是可以加名字的：",[19,54556,54557],{},"(function flexible(window,document) {}(window,document));",[19,54559,54560],{},"省一些调用方法",[484,54562,54564],{"id":54563},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,54566,54567],{},[3304,54568],{"alt":62,"src":54569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,54571,54572],{},"这样就不用非得给x,y初始化了",[19,54574,54575],{},[3304,54576],{"alt":62,"src":54577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,54579,54580],{},"代码执行时先看左边",[19,54582,54583],{},"例如：console.log(false && 3+5)",[19,54585,54586],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,54588,54589],{},"&&都是真时，就返回最后一个真值",[19,54591,54592],{},"console.log(11 && 22)",[19,54594,54595],{},"输出22",[19,54597,54598],{},"逻辑与：遇真则真",[19,54600,16438],{},[19,54602,54603],{},"let age=1",[19,54605,54606],{},"console.log(11 || age++)",[19,54608,54609],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,54611,54612],{},"console.log(11 || 22)",[19,54614,54615],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,54617,54618],{},"||如果都是假的话，就取最后一个假的值了",[484,54620,54622],{"id":54621},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,54624,54625],{},"显示转换：",[19,54627,54628,54631,54632],{},[2141,54629,54630],{},"记忆","： ",[2141,54633,54634],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,54636,54637],{},"空字符串为假，其他字符串全为真",[19,54639,54640],{},[3304,54641],{"alt":62,"src":54642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,54644,54645],{},"隐式转换：",[19,54647,54648],{},[3304,54649],{"alt":62,"src":54650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,54652,54653],{},"隐式转换:",[19,54655,54656],{},"null+3=3",[19,54658,54659],{},"undefined+3=NaN",[19,54661,54662],{},"null==undefined 输出true,他两个都当0看",[19,54664,54665],{},"null===undefined 输出false",[19,54667,54668],{},"undefined做任何操作都是NaN",[19,54670,54671],{},"NaN不等于NaN，NaN表示计算错误",[14,54673,54675],{"id":54674},"_210-对象","2.10 对象",[484,54677,54679],{"id":54678},"_2101-对象的介绍","2.10.1 对象的介绍",[19,54681,54682],{},"对象也是一种数据类型，里边的数据是无序的",[19,54684,54685],{},"对象由属性和方法组成",[19,54687,54688],{},[3304,54689],{"alt":62,"src":54690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,54692,54693],{},[3304,54694],{"alt":62,"src":54695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,54697,54698],{},[3304,54699],{"alt":62,"src":54700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[484,54702,54704],{"id":54703},"_2102-对象属性","2.10.2 对象属性",[19,54706,54707],{},[3304,54708],{"alt":62,"src":54709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[31,54711,54712],{},[34,54713,54714],{},"查询对象",[19,54716,54717],{},"对象名.属性 goods.uname",[19,54719,54720],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,54722,54723],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,54725,54726],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,54728,54729],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[31,54731,54732],{"start":80},[34,54733,54734],{},"重新赋值",[19,54736,54737],{},"对象名.属性=新值",[31,54739,54740],{"start":112},[34,54741,54742],{},"增加新数据",[19,54744,54737],{},[31,54746,54747],{"start":129},[34,54748,54749],{},"删除对象中的属性",[19,54751,54752],{},"delete 对象名.属性",[484,54754,54756],{"id":54755},"_2103-对象方法","2.10.3 对象方法",[19,54758,54759],{},[3304,54760],{"alt":62,"src":54761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,54763,54764],{},"后边跟的是匿名函数",[19,54766,54767],{},"对象外面的叫函数；对象内部的叫方法",[19,54769,54770],{},[3304,54771],{"alt":62,"src":54772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[484,54774,54776],{"id":54775},"_2104-遍历对象","2.10.4 遍历对象",[19,54778,54779],{},"理解为加括号的python字典遍历",[19,54781,54782],{},[3304,54783],{"alt":62,"src":54784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,54786,54787],{},"k是字符串类型",[19,54789,54790],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[57,54792,54794],{"className":52417,"code":54793,"language":52419,"meta":62,"style":62},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[23,54795,54796,54801,54806,54811,54816],{"__ignoreMap":62},[66,54797,54798],{"class":68,"line":69},[66,54799,54800],{"class":76},"   let arr = [1, 2, 3]\n",[66,54802,54803],{"class":68,"line":80},[66,54804,54805],{"class":76},"    for (let k in arr) {\n",[66,54807,54808],{"class":68,"line":112},[66,54809,54810],{"class":76},"      console.log(k)\n",[66,54812,54813],{"class":68,"line":129},[66,54814,54815],{"class":76},"      console.log(arr[k])\n",[66,54817,54818],{"class":68,"line":138},[66,54819,4013],{"class":76},[19,54821,54822],{},[3304,54823],{"alt":62,"src":54824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,54826,54827],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,54829,54830],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,54832,54833],{},"for in 得到的k是属性名",[53597,54835,54836],{},"\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,54838,54839],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[484,54841,54843],{"id":54842},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,54845,54846],{},"数组中放对象信息",[57,54848,54852],{"className":54849,"code":54850,"language":54851,"meta":62,"style":62},"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",[23,54853,54854,54862,54867,54872,54877,54882,54887,54892,54897,54902,54907,54912,54917,54921,54925],{"__ignoreMap":62},[66,54855,54856,54858,54860],{"class":68,"line":69},[66,54857,413],{"class":76},[66,54859,53597],{"class":53084},[66,54861,53091],{"class":76},[66,54863,54864],{"class":68,"line":80},[66,54865,54866],{"class":76},"    let students = [\n",[66,54868,54869],{"class":68,"line":112},[66,54870,54871],{"class":76},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[66,54873,54874],{"class":68,"line":129},[66,54875,54876],{"class":76},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[66,54878,54879],{"class":68,"line":138},[66,54880,54881],{"class":76},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[66,54883,54884],{"class":68,"line":227},[66,54885,54886],{"class":76},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[66,54888,54889],{"class":68,"line":236},[66,54890,54891],{"class":76},"    ]\n",[66,54893,54894],{"class":68,"line":241},[66,54895,54896],{"class":76},"    for (let i = 0; i \u003C students.length; i++) {\n",[66,54898,54899],{"class":68,"line":372},[66,54900,54901],{"class":76},"      for (let k in students[i]) {\n",[66,54903,54904],{"class":68,"line":377},[66,54905,54906],{"class":76},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[66,54908,54909],{"class":68,"line":392},[66,54910,54911],{"class":76},"        \u002F\u002F输出每个人的名字：\n",[66,54913,54914],{"class":68,"line":405},[66,54915,54916],{"class":76},"        \u002F\u002Fconsole.log(students[i].name)\n",[66,54918,54919],{"class":68,"line":418},[66,54920,54180],{"class":76},[66,54922,54923],{"class":68,"line":430},[66,54924,4013],{"class":76},[66,54926,54927,54929,54931],{"class":68,"line":438},[66,54928,54199],{"class":76},[66,54930,53597],{"class":53084},[66,54932,53091],{"class":76},[484,54934,54936],{"id":54935},"_2106-内置对象","2.10.6 内置对象",[19,54938,54939],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[31,54941,54942],{},[34,54943,54944],{},"数学对象Math",[19,54946,54947],{},[3304,54948],{"alt":62,"src":54949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,54951,54952],{},[2229,54953,54956],{"href":54954,"rel":54955},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[25668],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,54958,54959],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,54961,54962],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,54964,54965],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,54967,54968],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,54970,54971],{},"null属于对象数据类型",[31,54973,54974],{"start":80},[34,54975,54976],{},"生成任意范围随机数",[19,54978,54979],{},[3304,54980],{"alt":62,"src":54981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,54983,54984],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,54986,54987],{},"乘以几就取不到几",[19,54989,54990],{},"取数组中的随机元素：",[19,54992,54993],{},"let arr = ['red', 'green', 'blue']",[19,54995,54996],{},"let random = Math.floor(Math.random() * arr.length)",[19,54998,54999],{},"console.log(arr[random])",[19,55001,55002],{},"这个函数得到的是全闭区间",[19,55004,55005],{},"function getRandom(N, M) {",[19,55007,55008],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,55010,457],{},[19,55012,55013],{},"console.log(getRandom(4, 8))",[484,55015,55017],{"id":55016},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,55019,55020],{},[3304,55021],{"alt":62,"src":55022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,55024,55025],{},[3304,55026],{"alt":62,"src":55027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,55029,55030],{},[3304,55031],{"alt":62,"src":55032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,55034,55035],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,55037,55038],{},[3304,55039],{"alt":62,"src":55040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,55042,55043],{},[3304,55044],{"alt":62,"src":55045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,55047,55048],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,55050,55051],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,55053,55054],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[1903,55056,55057],{},"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":62,"searchDepth":80,"depth":80,"links":55059},[55060,55068,55069,55070,55071,55072,55079,55083,55089,55098],{"id":52252,"depth":80,"text":52253,"children":55061},[55062,55063,55064,55065,55066,55067],{"id":52256,"depth":112,"text":52257},{"id":52273,"depth":112,"text":52274},{"id":52313,"depth":112,"text":52314},{"id":52325,"depth":112,"text":52326},{"id":52334,"depth":112,"text":52335},{"id":52382,"depth":112,"text":52383},{"id":52392,"depth":80,"text":52393},{"id":52480,"depth":80,"text":52481},{"id":52503,"depth":80,"text":52504},{"id":52515,"depth":80,"text":52516},{"id":52702,"depth":80,"text":52703,"children":55073},[55074,55075,55076,55077,55078],{"id":52706,"depth":112,"text":52707},{"id":52715,"depth":112,"text":52716},{"id":52743,"depth":112,"text":52744},{"id":52779,"depth":112,"text":52780},{"id":52804,"depth":112,"text":52805},{"id":52816,"depth":80,"text":52817,"children":55080},[55081,55082],{"id":52837,"depth":112,"text":52838},{"id":52931,"depth":112,"text":52932},{"id":52989,"depth":80,"text":52990,"children":55084},[55085,55086,55087,55088],{"id":52993,"depth":112,"text":52994},{"id":53017,"depth":112,"text":53018},{"id":53070,"depth":112,"text":53071},{"id":53881,"depth":112,"text":53882},{"id":54265,"depth":80,"text":54266,"children":55090},[55091,55092,55093,55094,55095,55096,55097],{"id":54283,"depth":112,"text":54284},{"id":54320,"depth":112,"text":54321},{"id":54351,"depth":112,"text":54352},{"id":54384,"depth":112,"text":54385},{"id":54465,"depth":112,"text":54466},{"id":54563,"depth":112,"text":54564},{"id":54621,"depth":112,"text":54622},{"id":54674,"depth":80,"text":54675,"children":55099},[55100,55101,55102,55103,55104,55105,55106],{"id":54678,"depth":112,"text":54679},{"id":54703,"depth":112,"text":54704},{"id":54755,"depth":112,"text":54756},{"id":54775,"depth":112,"text":54776},{"id":54842,"depth":112,"text":54843},{"id":54935,"depth":112,"text":54936},{"id":55016,"depth":112,"text":55017},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":52244,"description":1926},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":55113,"title":55114,"body":55115,"description":1926,"extension":1927,"meta":78452,"navigation":108,"path":78453,"seo":78454,"stem":78455,"__hash__":78456},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":55116,"toc":78392},[55117,55120,55123,55126,55131,55134,55137,55140,55144,55148,55154,55159,55167,55174,55177,55181,55186,55191,55196,55199,55202,55213,55216,55220,55223,55226,55231,55236,55241,55244,55247,55339,55342,55347,55350,55355,55358,55361,55366,55369,55374,55378,55381,55395,55399,55404,55407,55410,55414,55419,55422,55426,55430,55435,55439,55444,55447,55450,55453,55456,55459,55462,55467,55472,55500,55503,55506,55509,55514,55517,55520,55523,55526,55530,55559,55563,55568,55573,55576,55579,55582,55587,55701,55706,55711,55872,55877,55880,55884,55889,55894,55897,55900,55903,55906,55909,55912,55915,55918,55921,55924,55927,55930,55933,55936,55938,55941,55944,55947,55952,55956,56353,56356,56362,56366,56371,57652,57657,57660,57663,57666,57671,58867,58871,58877,58882,58885,58890,58895,58899,58903,58908,58911,58916,58919,58922,58926,59834,59837,59841,60062,60065,60068,60071,60297,60300,60524,60527,60531,60536,60539,60542,60770,60773,60806,60809,60813,60818,60822,60825,60828,60831,60834,60837,60840,60843,60848,62128,62132,62135,63227,63231,63234,63237,63240,63243,63247,63250,63253,63255,63263,64744,64748,64751,64754,64757,64966,64969,64973,64977,64982,64987,64990,64993,64998,65002,65007,65010,65119,65123,65128,65133,65136,65139,65143,65148,65153,65158,65161,65164,65175,65178,65183,65188,65191,65194,65267,65271,65276,65279,65281,65292,65296,65301,66627,66630,66633,66636,66638,66641,66644,66647,66650,66653,66656,66659,66662,66665,66668,66671,66674,66676,66678,66681,66685,67779,67782,67785,67801,67815,67818,67823,67829,67834,67838,67842,67847,67851,67856,68298,68303,68306,68310,68315,68318,68321,68325,68330,68334,68339,68344,68348,68353,68358,68361,68366,68371,68375,68380,68385,68489,68492,68496,68501,68867,68870,68873,68876,68879,68882,68885,68888,68891,70187,70191,70196,70201,70204,70207,70210,70213,70215,70220,70225,70228,70232,70237,70242,70247,70250,70253,70256,70259,70262,70267,70270,70274,70279,70284,70288,70293,70296,70301,70304,70307,70310,70313,70316,70321,70324,70327,70330,70333,70337,70342,70345,70349,70354,70357,70360,70364,70393,70396,70400,70404,70409,70413,70418,70421,70424,70427,70430,70433,70436,70439,70442,70445,70448,70451,70454,70457,70460,70464,70469,70474,70477,70481,70485,70490,70493,70497,70500,70503,70508,70513,70518,70523,70528,70531,70534,70539,70544,70548,70553,70556,70561,70564,70567,70570,70573,70578,70581,70590,70594,70599,70602,70605,70609,70612,70617,70621,70624,70630,70636,70640,70666,70669,72230,72233,72729,72732,72737,72742,72747,72751,72756,72761,72766,72770,72775,72778,72781,72784,72787,72791,72794,72799,72802,72807,72811,72816,72819,72824,72829,72834,72837,72840,72845,72850,72853,72856,72860,72863,72868,72871,72876,72879,72884,72889,72894,72897,72902,72967,72970,72981,72985,72990,73162,73166,73171,73174,73177,73180,73184,73195,73199,73202,73207,73212,73215,73218,73221,73224,73227,73229,73232,73235,73238,73243,73246,73251,73254,73258,73261,73264,73278,73282,73285,73340,73345,73348,73351,73356,73359,73363,73368,73498,73502,73507,73512,73593,73598,73602,73605,73610,73615,73621,73624,73627,73630,73634,73639,73642,73653,73657,73674,76721,76725,76728,76731,76734,76755,76759,76762,76770,76773,76778,76781,76784,76789,76794,76798,76819,76823,76828,76831,76834,76837,76840,76844,76849,76852,76856,76861,76864,76869,76872,76877,76880,76885,78088,78092,78097,78100,78105,78389],[10,55118,55114],{"id":55119},"_3web-apis",[19,55121,55122],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,55124,55125],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,55127,55128],{},[3304,55129],{"alt":62,"src":55130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,55132,55133],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,55135,55136],{},"建议数组和对象使用 const 来声明",[19,55138,55139],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,55141,55143],{"id":55142},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[484,55145,55147],{"id":55146},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,55149,55150,55153],{},[23,55151,55152],{},"document"," = HTML 文件解析后的对象化表示；",[19,55155,55156,55158],{},[23,55157,55152],{}," ≠ HTML 文件本身",[19,55160,55161,55166],{},[2141,55162,55163],{},[23,55164,55165],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,55168,55169,55173],{},[2141,55170,55171],{},[23,55172,55152],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,55175,55176],{},"document实际上为window.document的简写",[484,55178,55180],{"id":55179},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,55182,55183],{},[3304,55184],{"alt":62,"src":55185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,55187,55188],{},[3304,55189],{"alt":62,"src":55190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,55192,55193],{},[3304,55194],{"alt":62,"src":55195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,55197,55198],{},"console.dir()",[19,55200,55201],{},"dir用来打印对象",[2982,55203,55204,55207,55210],{},[34,55205,55206],{},"任何一个标签，都是一个对象",[34,55208,55209],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[34,55211,55212],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,55214,55215],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[484,55217,55219],{"id":55218},"_312-获取dom对象","3.1.2 获取DoM对象",[19,55221,55222],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,55224,55225],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,55227,55228],{},[2141,55229,55230],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[31,55232,55233],{},[34,55234,55235],{},"利用CSS选择器来获取标签元素",[19,55237,55238],{},[3304,55239],{"alt":62,"src":55240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,55242,55243],{},"里边的选择器必须必须加引号！！！",[19,55245,55246],{},"只选择第一个元素",[57,55248,55250],{"className":54849,"code":55249,"language":54851,"meta":62,"style":62},"\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",[23,55251,55252,55260,55281,55300,55308,55313,55318,55323,55331],{"__ignoreMap":62},[66,55253,55254,55256,55258],{"class":68,"line":69},[66,55255,413],{"class":76},[66,55257,53584],{"class":53084},[66,55259,53091],{"class":76},[66,55261,55262,55264,55266,55269,55271,55274,55277,55279],{"class":68,"line":80},[66,55263,53928],{"class":76},[66,55265,53395],{"class":53084},[66,55267,55268],{"class":3793}," class",[66,55270,99],{"class":76},[66,55272,55273],{"class":356},"\"box\"",[66,55275,55276],{"class":76},">123\u003C\u002F",[66,55278,53395],{"class":53084},[66,55280,53091],{"class":76},[66,55282,55283,55285,55287,55289,55291,55293,55296,55298],{"class":68,"line":112},[66,55284,53928],{"class":76},[66,55286,53395],{"class":53084},[66,55288,55268],{"class":3793},[66,55290,99],{"class":76},[66,55292,55273],{"class":356},[66,55294,55295],{"class":76},">456\u003C\u002F",[66,55297,53395],{"class":53084},[66,55299,53091],{"class":76},[66,55301,55302,55304,55306],{"class":68,"line":129},[66,55303,53928],{"class":76},[66,55305,53597],{"class":53084},[66,55307,53091],{"class":76},[66,55309,55310],{"class":68,"line":138},[66,55311,55312],{"class":76},"    \u002F\u002F 1.获取匹配的第一个元素\n",[66,55314,55315],{"class":68,"line":227},[66,55316,55317],{"class":76},"    const box = document.querySelector('div')\n",[66,55319,55320],{"class":68,"line":236},[66,55321,55322],{"class":76},"    console.dir(box)\n",[66,55324,55325,55327,55329],{"class":68,"line":241},[66,55326,54199],{"class":76},[66,55328,53597],{"class":53084},[66,55330,53091],{"class":76},[66,55332,55333,55335,55337],{"class":68,"line":372},[66,55334,53569],{"class":76},[66,55336,53584],{"class":53084},[66,55338,53091],{"class":76},[19,55340,55341],{},"只选123，不选456",[19,55343,55344],{},[3304,55345],{"alt":62,"src":55346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,55348,55349],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,55351,55352],{},[3304,55353],{"alt":62,"src":55354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,55356,55357],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,55359,55360],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[31,55362,55363],{"start":80},[34,55364,55365],{},"其他方法来获取标签元素",[19,55367,55368],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,55370,55371],{},[3304,55372],{"alt":62,"src":55373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[484,55375,55377],{"id":55376},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,55379,55380],{},"设置修改DOM元素内容有两种方式：",[2982,55382,55383,55386,55389,55392],{},[34,55384,55385],{},"元素.innerText=''",[34,55387,55388],{},"元素.innerHTML=''",[34,55390,55391],{},"不写字符串输出数字也是可以的",[34,55393,55394],{},"元素.innerHtml=1",[23801,55396,55398],{"id":55397},"_3131-innertext","3.1.3.1 innerText",[19,55400,55401],{},[3304,55402],{"alt":62,"src":55403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,55405,55406],{},"思路：实现了修改盒子中的内容！",[19,55408,55409],{},"它只显示纯文本，不解析标签",[23801,55411,55413],{"id":55412},"_3132-innerhtml","3.1.3.2 innerHTML",[19,55415,55416],{},[3304,55417],{"alt":62,"src":55418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,55420,55421],{},"相比于innerText，他的强大之处在于可以解析标签",[484,55423,55425],{"id":55424},"_314-操作元素属性","3.1.4 操作元素属性",[23801,55427,55429],{"id":55428},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,55431,55432],{},[3304,55433],{"alt":62,"src":55434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[23801,55436,55438],{"id":55437},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,55440,55441],{},[3304,55442],{"alt":62,"src":55443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,55445,55446],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,55448,55449],{},"div.style.backgroundColor = 'hotpink'",[19,55451,55452],{},"如果按照css的写法，-表示减，就会出错",[19,55454,55455],{},"body元素不需要再获取，直接用就行！！！！！！",[19,55457,55458],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,55460,55461],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,55463,55464],{},[3304,55465],{"alt":62,"src":55466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,55468,55469],{},[3304,55470],{"alt":62,"src":55471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[31,55473,55474,55477,55480,55483,55486,55489],{},[34,55475,55476],{},"className这个方式就是修改很多样式的时候来使用的！",[34,55478,55479],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[34,55481,55482],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[34,55484,55485],{},"className为属性名，如果还用class的话就导致与关键字冲突",[34,55487,55488],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[34,55490,55491,55492,55497],{},"解析标签的时候就变为了",[53395,55493],{"className":55494},[55495,55496],"nav","box",[55498,55499],"br",{},[19,55501,55502],{},"例子：",[53395,55504],{"className":55505},[55495],[53597,55507,55508],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,55510,55511],{},[3304,55512],{"alt":62,"src":55513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,55515,55516],{},"追加和删除类名用classList",[19,55518,55519],{},"常用于类似于开关的操作",[19,55521,55522],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,55524,55525],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[23801,55527,55529],{"id":55528},"_3143-牢记点","3.1.4.3 牢记点",[31,55531,55532,55535,55538,55541,55544,55547,55550,55553,55556],{},[34,55533,55534],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[34,55536,55537],{},"使用style属性操作css时不要忘记引号",[34,55539,55540],{},"使用className或者classList时也不要忘记引号",[34,55542,55543],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[34,55545,55546],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[34,55548,55549],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[34,55551,55552],{},"若： let arr=['1','2',3] arr[0]=1",[34,55554,55555],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[34,55557,55558],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[484,55560,55562],{"id":55561},"_315-操作表单元素","3.1.5 操作表单元素",[31,55564,55565],{},[34,55566,55567],{},"天生的属性",[19,55569,55570],{},[3304,55571],{"alt":62,"src":55572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,55574,55575],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,55577,55578],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,55580,55581],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,55583,55584],{},[3304,55585],{"alt":62,"src":55586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[57,55588,55590],{"className":52417,"code":55589,"language":52419,"meta":62,"style":62},"在复选框中如果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",[23,55591,55592,55597,55628,55633,55638,55643,55648,55652,55657,55662,55679,55691,55696],{"__ignoreMap":62},[66,55593,55594],{"class":68,"line":69},[66,55595,55596],{"class":76},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[66,55598,55599,55601,55603,55606,55608,55611,55613,55615,55617,55619,55621,55623,55626],{"class":68,"line":80},[66,55600,413],{"class":76},[66,55602,351],{"class":53084},[66,55604,55605],{"class":3793}," type",[66,55607,99],{"class":76},[66,55609,55610],{"class":356},"\"checkbox\"",[66,55612,16724],{"class":3793},[66,55614,99],{"class":76},[66,55616,9463],{"class":356},[66,55618,16763],{"class":3793},[66,55620,99],{"class":76},[66,55622,9463],{"class":356},[66,55624,55625],{"class":3793}," checked",[66,55627,53091],{"class":76},[66,55629,55630],{"class":68,"line":112},[66,55631,55632],{"class":76},"不选的话：\n",[66,55634,55635],{"class":68,"line":129},[66,55636,55637],{"class":76},"const input = document.querySelector('input')\n",[66,55639,55640],{"class":68,"line":138},[66,55641,55642],{"class":76},"input.checked=false\n",[66,55644,55645],{"class":68,"line":227},[66,55646,55647],{"class":76},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[66,55649,55650],{"class":68,"line":236},[66,55651,109],{"emptyLinePlaceholder":108},[66,55653,55654],{"class":68,"line":241},[66,55655,55656],{"class":76},"禁用按钮：\n",[66,55658,55659],{"class":68,"line":372},[66,55660,55661],{"class":76},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[66,55663,55664,55666,55669,55672,55675,55677],{"class":68,"line":377},[66,55665,413],{"class":76},[66,55667,55668],{"class":53084},"button",[66,55670,55671],{"class":3793}," disabled",[66,55673,55674],{"class":76},">点击\u003C\u002F",[66,55676,55668],{"class":53084},[66,55678,53091],{"class":76},[66,55680,55681,55683,55685,55687,55689],{"class":68,"line":392},[66,55682,413],{"class":76},[66,55684,55668],{"class":53084},[66,55686,55674],{"class":76},[66,55688,55668],{"class":53084},[66,55690,53091],{"class":76},[66,55692,55693],{"class":68,"line":405},[66,55694,55695],{"class":76},"const bt = document.querySelector('button')\n",[66,55697,55698],{"class":68,"line":418},[66,55699,55700],{"class":76},"bt.disabled = false\n",[31,55702,55703],{"start":80},[34,55704,55705],{},"自定义属性",[19,55707,55708],{},[3304,55709],{"alt":62,"src":55710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[57,55712,55714],{"className":54849,"code":55713,"language":54851,"meta":62,"style":62},"\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",[23,55715,55716,55724,55752,55771,55790,55809,55828,55836,55841,55846,55851,55856,55864],{"__ignoreMap":62},[66,55717,55718,55720,55722],{"class":68,"line":69},[66,55719,413],{"class":76},[66,55721,53584],{"class":53084},[66,55723,53091],{"class":76},[66,55725,55726,55728,55730,55733,55735,55737,55740,55742,55745,55748,55750],{"class":68,"line":80},[66,55727,53928],{"class":76},[66,55729,53395],{"class":53084},[66,55731,55732],{"class":3793}," data-id",[66,55734,99],{"class":76},[66,55736,5496],{"class":356},[66,55738,55739],{"class":3793}," data-spm",[66,55741,99],{"class":76},[66,55743,55744],{"class":356},"\"我不知道\"",[66,55746,55747],{"class":76},">1\u003C\u002F",[66,55749,53395],{"class":53084},[66,55751,53091],{"class":76},[66,55753,55754,55756,55758,55760,55762,55764,55767,55769],{"class":68,"line":112},[66,55755,53928],{"class":76},[66,55757,53395],{"class":53084},[66,55759,55732],{"class":3793},[66,55761,99],{"class":76},[66,55763,5519],{"class":356},[66,55765,55766],{"class":76},">2\u003C\u002F",[66,55768,53395],{"class":53084},[66,55770,53091],{"class":76},[66,55772,55773,55775,55777,55779,55781,55783,55786,55788],{"class":68,"line":129},[66,55774,53928],{"class":76},[66,55776,53395],{"class":53084},[66,55778,55732],{"class":3793},[66,55780,99],{"class":76},[66,55782,5532],{"class":356},[66,55784,55785],{"class":76},">3\u003C\u002F",[66,55787,53395],{"class":53084},[66,55789,53091],{"class":76},[66,55791,55792,55794,55796,55798,55800,55802,55805,55807],{"class":68,"line":138},[66,55793,53928],{"class":76},[66,55795,53395],{"class":53084},[66,55797,55732],{"class":3793},[66,55799,99],{"class":76},[66,55801,5545],{"class":356},[66,55803,55804],{"class":76},">4\u003C\u002F",[66,55806,53395],{"class":53084},[66,55808,53091],{"class":76},[66,55810,55811,55813,55815,55817,55819,55821,55824,55826],{"class":68,"line":227},[66,55812,53928],{"class":76},[66,55814,53395],{"class":53084},[66,55816,55732],{"class":3793},[66,55818,99],{"class":76},[66,55820,5565],{"class":356},[66,55822,55823],{"class":76},">5\u003C\u002F",[66,55825,53395],{"class":53084},[66,55827,53091],{"class":76},[66,55829,55830,55832,55834],{"class":68,"line":236},[66,55831,53928],{"class":76},[66,55833,53597],{"class":53084},[66,55835,53091],{"class":76},[66,55837,55838],{"class":68,"line":241},[66,55839,55840],{"class":76},"    const one = document.querySelector('div')\n",[66,55842,55843],{"class":68,"line":372},[66,55844,55845],{"class":76},"    console.log(one.dataset)\n",[66,55847,55848],{"class":68,"line":377},[66,55849,55850],{"class":76},"    console.log(one.dataset.id)\n",[66,55852,55853],{"class":68,"line":392},[66,55854,55855],{"class":76},"    console.log(one.dataset.spm)\n",[66,55857,55858,55860,55862],{"class":68,"line":405},[66,55859,54199],{"class":76},[66,55861,53597],{"class":53084},[66,55863,53091],{"class":76},[66,55865,55866,55868,55870],{"class":68,"line":418},[66,55867,53569],{"class":76},[66,55869,53584],{"class":53084},[66,55871,53091],{"class":76},[19,55873,55874],{},[3304,55875],{"alt":62,"src":55876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,55878,55879],{},"document.querySelector选择的是第一个对象（元素）",[484,55881,55883],{"id":55882},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,55885,55886],{},[3304,55887],{"alt":62,"src":55888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,55890,55891],{},[3304,55892],{"alt":62,"src":55893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,55895,55896],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[53597,55898,55899],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,55901,55902],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[53597,55904,55905],{},"\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,55907,55908],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,55910,55911],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,55913,55914],{},"单位为毫秒！！！",[19,55916,55917],{},"可以搭配匿名函数来用！！！",[19,55919,55920],{},"setInterval(function () {",[19,55922,55923],{},"alert('两秒执行一次')",[19,55925,55926],{},"}, 2000)",[19,55928,55929],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,55931,55932],{},"function fn() {",[19,55934,55935],{},"document.write(1)",[19,55937,457],{},[19,55939,55940],{},"setInterval(fn, 1000)",[19,55942,55943],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,55945,55946],{},"setInterval('fn()', 1000)",[19,55948,55949],{},[3304,55950],{"alt":62,"src":55951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[23801,55953,55955],{"id":55954},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[57,55957,55959],{"className":52417,"code":55958,"language":52419,"meta":62,"style":62},"\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",[23,55960,55961,55971,55985,55989,55997,56011,56031,56043,56051,56055,56063,56100,56105,56110,56115,56123,56131,56153,56161,56166,56188,56193,56198,56209,56214,56234,56242,56257,56272,56283,56288,56298,56308,56312,56321,56325,56333,56341,56345],{"__ignoreMap":62},[66,55962,55963,55965,55967,55969],{"class":68,"line":69},[66,55964,53081],{"class":76},[66,55966,53085],{"class":53084},[66,55968,53088],{"class":3793},[66,55970,53091],{"class":76},[66,55972,55973,55975,55977,55979,55981,55983],{"class":68,"line":80},[66,55974,413],{"class":76},[66,55976,52419],{"class":53084},[66,55978,53100],{"class":3793},[66,55980,99],{"class":76},[66,55982,53105],{"class":356},[66,55984,53091],{"class":76},[66,55986,55987],{"class":68,"line":112},[66,55988,109],{"emptyLinePlaceholder":108},[66,55990,55991,55993,55995],{"class":68,"line":129},[66,55992,413],{"class":76},[66,55994,53118],{"class":53084},[66,55996,53091],{"class":76},[66,55998,55999,56001,56003,56005,56007,56009],{"class":68,"line":138},[66,56000,53928],{"class":76},[66,56002,53128],{"class":53084},[66,56004,53131],{"class":3793},[66,56006,99],{"class":76},[66,56008,53136],{"class":356},[66,56010,53091],{"class":76},[66,56012,56013,56015,56017,56019,56021,56023,56025,56027,56029],{"class":68,"line":227},[66,56014,53928],{"class":76},[66,56016,53128],{"class":53084},[66,56018,16724],{"class":3793},[66,56020,99],{"class":76},[66,56022,53175],{"class":356},[66,56024,53155],{"class":3793},[66,56026,99],{"class":76},[66,56028,53182],{"class":356},[66,56030,53091],{"class":76},[66,56032,56033,56035,56037,56039,56041],{"class":68,"line":236},[66,56034,53928],{"class":76},[66,56036,53191],{"class":53084},[66,56038,53194],{"class":76},[66,56040,53191],{"class":53084},[66,56042,53091],{"class":76},[66,56044,56045,56047,56049],{"class":68,"line":241},[66,56046,53569],{"class":76},[66,56048,53118],{"class":53084},[66,56050,53091],{"class":76},[66,56052,56053],{"class":68,"line":372},[66,56054,109],{"emptyLinePlaceholder":108},[66,56056,56057,56059,56061],{"class":68,"line":377},[66,56058,413],{"class":76},[66,56060,53584],{"class":53084},[66,56062,53091],{"class":76},[66,56064,56065,56067,56070,56072,56074,56076,56078,56080,56082,56085,56087,56090,56093,56095,56098],{"class":68,"line":392},[66,56066,53928],{"class":76},[66,56068,56069],{"class":53084},"textarea",[66,56071,16724],{"class":3793},[66,56073,99],{"class":76},[66,56075,9463],{"class":356},[66,56077,16763],{"class":3793},[66,56079,99],{"class":76},[66,56081,9463],{"class":356},[66,56083,56084],{"class":3793}," cols",[66,56086,99],{"class":76},[66,56088,56089],{"class":356},"\"30\"",[66,56091,56092],{"class":3793}," rows",[66,56094,99],{"class":76},[66,56096,56097],{"class":356},"\"10\"",[66,56099,53091],{"class":76},[66,56101,56102],{"class":68,"line":405},[66,56103,56104],{"class":76},"        用户注册协议\n",[66,56106,56107],{"class":68,"line":418},[66,56108,56109],{"class":76},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[66,56111,56112],{"class":68,"line":430},[66,56113,56114],{"class":76},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[66,56116,56117,56119,56121],{"class":68,"line":438},[66,56118,53560],{"class":76},[66,56120,56069],{"class":53084},[66,56122,53091],{"class":76},[66,56124,56125,56127,56129],{"class":68,"line":465},[66,56126,53928],{"class":76},[66,56128,55498],{"class":53084},[66,56130,53091],{"class":76},[66,56132,56133,56135,56137,56139,56141,56144,56146,56149,56151],{"class":68,"line":1805},[66,56134,53928],{"class":76},[66,56136,55668],{"class":53084},[66,56138,55268],{"class":3793},[66,56140,99],{"class":76},[66,56142,56143],{"class":356},"\"btn\"",[66,56145,55671],{"class":3793},[66,56147,56148],{"class":76},">我已经阅读用户协议(5)\u003C\u002F",[66,56150,55668],{"class":53084},[66,56152,53091],{"class":76},[66,56154,56155,56157,56159],{"class":68,"line":1817},[66,56156,53928],{"class":76},[66,56158,53597],{"class":53084},[66,56160,53091],{"class":76},[66,56162,56163],{"class":68,"line":1822},[66,56164,56165],{"class":758},"    \u002F\u002F 1. 获取元素\n",[66,56167,56168,56170,56173,56175,56178,56181,56183,56186],{"class":68,"line":1829},[66,56169,13027],{"class":72},[66,56171,56172],{"class":102}," btn",[66,56174,15369],{"class":72},[66,56176,56177],{"class":76}," document.",[66,56179,56180],{"class":3793},"querySelector",[66,56182,348],{"class":76},[66,56184,56185],{"class":356},"'.btn'",[66,56187,313],{"class":76},[66,56189,56190],{"class":68,"line":3529},[66,56191,56192],{"class":758},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[66,56194,56195],{"class":68,"line":3557},[66,56196,56197],{"class":758},"    \u002F\u002F 2. 倒计时\n",[66,56199,56200,56202,56204,56206],{"class":68,"line":3562},[66,56201,54003],{"class":72},[66,56203,117],{"class":76},[66,56205,99],{"class":72},[66,56207,56208],{"class":102}," 5\n",[66,56210,56211],{"class":68,"line":3579},[66,56212,56213],{"class":758},"    \u002F\u002F 2.1 开启定时器\n",[66,56215,56216,56218,56221,56223,56226,56228,56231],{"class":68,"line":3584},[66,56217,54003],{"class":72},[66,56219,56220],{"class":76}," n ",[66,56222,99],{"class":72},[66,56224,56225],{"class":3793}," setInterval",[66,56227,348],{"class":76},[66,56229,56230],{"class":72},"function",[66,56232,56233],{"class":76}," () {\n",[66,56235,56236,56239],{"class":68,"line":3589},[66,56237,56238],{"class":76},"      i",[66,56240,56241],{"class":72},"--\n",[66,56243,56244,56247,56249,56252,56254],{"class":68,"line":3594},[66,56245,56246],{"class":76},"      btn.innerHTML ",[66,56248,99],{"class":72},[66,56250,56251],{"class":356}," `我已经阅读用户协议(${",[66,56253,257],{"class":76},[66,56255,56256],{"class":356},"})`\n",[66,56258,56259,56262,56265,56268,56270],{"class":68,"line":3608},[66,56260,56261],{"class":72},"      if",[66,56263,56264],{"class":76}," (i ",[66,56266,56267],{"class":72},"===",[66,56269,962],{"class":102},[66,56271,14247],{"class":76},[66,56273,56274,56277,56280],{"class":68,"line":3613},[66,56275,56276],{"class":3793},"        clearInterval",[66,56278,56279],{"class":76},"(n)  ",[66,56281,56282],{"class":758},"\u002F\u002F 关闭定时器\n",[66,56284,56285],{"class":68,"line":4401},[66,56286,56287],{"class":758},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[66,56289,56290,56293,56295],{"class":68,"line":4415},[66,56291,56292],{"class":76},"        btn.disabled ",[66,56294,99],{"class":72},[66,56296,56297],{"class":102}," false\n",[66,56299,56300,56303,56305],{"class":68,"line":4423},[66,56301,56302],{"class":76},"        btn.innerHTML ",[66,56304,99],{"class":72},[66,56306,56307],{"class":356}," '同意'\n",[66,56309,56310],{"class":68,"line":4428},[66,56311,54180],{"class":76},[66,56313,56314,56317,56319],{"class":68,"line":4434},[66,56315,56316],{"class":76},"    }, ",[66,56318,8221],{"class":102},[66,56320,313],{"class":76},[66,56322,56323],{"class":68,"line":4440},[66,56324,109],{"emptyLinePlaceholder":108},[66,56326,56327,56329,56331],{"class":68,"line":4445},[66,56328,54199],{"class":76},[66,56330,53597],{"class":53084},[66,56332,53091],{"class":76},[66,56334,56335,56337,56339],{"class":68,"line":9759},[66,56336,53569],{"class":76},[66,56338,53584],{"class":53084},[66,56340,53091],{"class":76},[66,56342,56343],{"class":68,"line":9783},[66,56344,109],{"emptyLinePlaceholder":108},[66,56346,56347,56349,56351],{"class":68,"line":9788},[66,56348,53569],{"class":76},[66,56350,52419],{"class":53084},[66,56352,53091],{"class":76},[19,56354,56355],{},"不要一直想着用死循环,避免死循环",[19,56357,56358,56361],{},[23,56359,56360],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[23801,56363,56365],{"id":56364},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[31,56367,56368],{},[34,56369,56370],{},"法1",[57,56372,56374],{"className":52417,"code":56373,"language":52419,"meta":62,"style":62},"\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",[23,56375,56376,56386,56400,56404,56412,56426,56446,56458,56466,56472,56483,56494,56498,56502,56509,56521,56525,56529,56536,56548,56562,56575,56589,56593,56597,56604,56615,56626,56637,56649,56661,56673,56677,56681,56689,56699,56712,56724,56737,56741,56745,56752,56762,56774,56786,56797,56808,56818,56830,56842,56846,56850,56859,56871,56883,56911,56924,56928,56932,56939,56950,56954,56962,56970,56974,56982,56996,57011,57035,57043,57058,57071,57079,57100,57112,57124,57136,57148,57160,57172,57184,57193,57201,57209,57217,57229,57252,57271,57290,57309,57328,57347,57366,57386,57390,57410,57429,57449,57470,57480,57497,57507,57517,57527,57532,57537,57542,57547,57572,57585,57589,57612,57616,57624,57632,57640,57644],{"__ignoreMap":62},[66,56377,56378,56380,56382,56384],{"class":68,"line":69},[66,56379,53081],{"class":76},[66,56381,53085],{"class":53084},[66,56383,53088],{"class":3793},[66,56385,53091],{"class":76},[66,56387,56388,56390,56392,56394,56396,56398],{"class":68,"line":80},[66,56389,413],{"class":76},[66,56391,52419],{"class":53084},[66,56393,53100],{"class":3793},[66,56395,99],{"class":76},[66,56397,53105],{"class":356},[66,56399,53091],{"class":76},[66,56401,56402],{"class":68,"line":112},[66,56403,109],{"emptyLinePlaceholder":108},[66,56405,56406,56408,56410],{"class":68,"line":129},[66,56407,413],{"class":76},[66,56409,53118],{"class":53084},[66,56411,53091],{"class":76},[66,56413,56414,56416,56418,56420,56422,56424],{"class":68,"line":138},[66,56415,53928],{"class":76},[66,56417,53128],{"class":53084},[66,56419,53131],{"class":3793},[66,56421,99],{"class":76},[66,56423,53136],{"class":356},[66,56425,53091],{"class":76},[66,56427,56428,56430,56432,56434,56436,56438,56440,56442,56444],{"class":68,"line":227},[66,56429,53928],{"class":76},[66,56431,53128],{"class":53084},[66,56433,16724],{"class":3793},[66,56435,99],{"class":76},[66,56437,53175],{"class":356},[66,56439,53155],{"class":3793},[66,56441,99],{"class":76},[66,56443,53182],{"class":356},[66,56445,53091],{"class":76},[66,56447,56448,56450,56452,56454,56456],{"class":68,"line":236},[66,56449,53928],{"class":76},[66,56451,53191],{"class":53084},[66,56453,53194],{"class":76},[66,56455,53191],{"class":53084},[66,56457,53091],{"class":76},[66,56459,56460,56462,56464],{"class":68,"line":241},[66,56461,53928],{"class":76},[66,56463,1903],{"class":53084},[66,56465,53091],{"class":76},[66,56467,56468,56470],{"class":68,"line":372},[66,56469,8214],{"class":53084},[66,56471,17375],{"class":76},[66,56473,56474,56477,56479,56481],{"class":68,"line":377},[66,56475,56476],{"class":102},"      padding",[66,56478,53221],{"class":76},[66,56480,2183],{"class":102},[66,56482,3135],{"class":76},[66,56484,56485,56488,56490,56492],{"class":68,"line":392},[66,56486,56487],{"class":102},"      margin",[66,56489,53221],{"class":76},[66,56491,2183],{"class":102},[66,56493,3135],{"class":76},[66,56495,56496],{"class":68,"line":405},[66,56497,4013],{"class":76},[66,56499,56500],{"class":68,"line":418},[66,56501,109],{"emptyLinePlaceholder":108},[66,56503,56504,56507],{"class":68,"line":430},[66,56505,56506],{"class":53084},"    li",[66,56508,17375],{"class":76},[66,56510,56511,56514,56516,56519],{"class":68,"line":438},[66,56512,56513],{"class":102},"      list-style",[66,56515,53221],{"class":76},[66,56517,56518],{"class":102},"none",[66,56520,3135],{"class":76},[66,56522,56523],{"class":68,"line":465},[66,56524,4013],{"class":76},[66,56526,56527],{"class":68,"line":1805},[66,56528,109],{"emptyLinePlaceholder":108},[66,56530,56531,56534],{"class":68,"line":1817},[66,56532,56533],{"class":3793},"    .box",[66,56535,17375],{"class":76},[66,56537,56538,56541,56543,56546],{"class":68,"line":1822},[66,56539,56540],{"class":102},"      position",[66,56542,53221],{"class":76},[66,56544,56545],{"class":102},"relative",[66,56547,3135],{"class":76},[66,56549,56550,56553,56555,56558,56560],{"class":68,"line":1829},[66,56551,56552],{"class":102},"      width",[66,56554,53221],{"class":76},[66,56556,56557],{"class":102},"976",[66,56559,53276],{"class":72},[66,56561,3135],{"class":76},[66,56563,56564,56567,56569,56571,56573],{"class":68,"line":3529},[66,56565,56566],{"class":102},"      height",[66,56568,53221],{"class":76},[66,56570,3381],{"class":102},[66,56572,53276],{"class":72},[66,56574,3135],{"class":76},[66,56576,56577,56579,56581,56583,56585,56587],{"class":68,"line":3557},[66,56578,56487],{"class":102},[66,56580,53221],{"class":76},[66,56582,310],{"class":102},[66,56584,53276],{"class":72},[66,56586,53340],{"class":102},[66,56588,3135],{"class":76},[66,56590,56591],{"class":68,"line":3562},[66,56592,4013],{"class":76},[66,56594,56595],{"class":68,"line":3579},[66,56596,109],{"emptyLinePlaceholder":108},[66,56598,56599,56602],{"class":68,"line":3584},[66,56600,56601],{"class":3793},"    .slider-footer",[66,56603,17375],{"class":76},[66,56605,56606,56608,56610,56613],{"class":68,"line":3589},[66,56607,56540],{"class":102},[66,56609,53221],{"class":76},[66,56611,56612],{"class":102},"absolute",[66,56614,3135],{"class":76},[66,56616,56617,56620,56622,56624],{"class":68,"line":3594},[66,56618,56619],{"class":102},"      left",[66,56621,53221],{"class":76},[66,56623,2183],{"class":102},[66,56625,3135],{"class":76},[66,56627,56628,56631,56633,56635],{"class":68,"line":3608},[66,56629,56630],{"class":102},"      bottom",[66,56632,53221],{"class":76},[66,56634,2183],{"class":102},[66,56636,3135],{"class":76},[66,56638,56639,56641,56643,56645,56647],{"class":68,"line":3613},[66,56640,56552],{"class":102},[66,56642,53221],{"class":76},[66,56644,310],{"class":102},[66,56646,953],{"class":72},[66,56648,3135],{"class":76},[66,56650,56651,56653,56655,56657,56659],{"class":68,"line":4401},[66,56652,56566],{"class":102},[66,56654,53221],{"class":76},[66,56656,2554],{"class":102},[66,56658,953],{"class":72},[66,56660,3135],{"class":76},[66,56662,56663,56666,56668,56671],{"class":68,"line":4415},[66,56664,56665],{"class":102},"      background-color",[66,56667,53221],{"class":76},[66,56669,56670],{"class":102},"skyblue",[66,56672,3135],{"class":76},[66,56674,56675],{"class":68,"line":4423},[66,56676,4013],{"class":76},[66,56678,56679],{"class":68,"line":4428},[66,56680,109],{"emptyLinePlaceholder":108},[66,56682,56683,56685,56687],{"class":68,"line":4434},[66,56684,56601],{"class":3793},[66,56686,8636],{"class":53084},[66,56688,17375],{"class":76},[66,56690,56691,56693,56695,56697],{"class":68,"line":4440},[66,56692,56540],{"class":102},[66,56694,53221],{"class":76},[66,56696,56612],{"class":102},[66,56698,3135],{"class":76},[66,56700,56701,56704,56706,56708,56710],{"class":68,"line":4445},[66,56702,56703],{"class":102},"      font-size",[66,56705,53221],{"class":76},[66,56707,2879],{"class":102},[66,56709,53276],{"class":72},[66,56711,3135],{"class":76},[66,56713,56714,56716,56718,56720,56722],{"class":68,"line":9759},[66,56715,56619],{"class":102},[66,56717,53221],{"class":76},[66,56719,2679],{"class":102},[66,56721,53276],{"class":72},[66,56723,3135],{"class":76},[66,56725,56726,56729,56731,56733,56735],{"class":68,"line":9783},[66,56727,56728],{"class":102},"      top",[66,56730,53221],{"class":76},[66,56732,752],{"class":102},[66,56734,53276],{"class":72},[66,56736,3135],{"class":76},[66,56738,56739],{"class":68,"line":9788},[66,56740,4013],{"class":76},[66,56742,56743],{"class":68,"line":9794},[66,56744,109],{"emptyLinePlaceholder":108},[66,56746,56747,56750],{"class":68,"line":9821},[66,56748,56749],{"class":53084},"    ul",[66,56751,17375],{"class":76},[66,56753,56754,56756,56758,56760],{"class":68,"line":9826},[66,56755,56540],{"class":102},[66,56757,53221],{"class":76},[66,56759,56612],{"class":102},[66,56761,3135],{"class":76},[66,56763,56764,56766,56768,56770,56772],{"class":68,"line":9832},[66,56765,56728],{"class":102},[66,56767,53221],{"class":76},[66,56769,2760],{"class":102},[66,56771,53276],{"class":72},[66,56773,3135],{"class":76},[66,56775,56776,56778,56780,56782,56784],{"class":68,"line":9844},[66,56777,56619],{"class":102},[66,56779,53221],{"class":76},[66,56781,2679],{"class":102},[66,56783,53276],{"class":72},[66,56785,3135],{"class":76},[66,56787,56788,56791,56793,56795],{"class":68,"line":9856},[66,56789,56790],{"class":102},"      display",[66,56792,53221],{"class":76},[66,56794,53261],{"class":102},[66,56796,3135],{"class":76},[66,56798,56799,56802,56804,56806],{"class":68,"line":9868},[66,56800,56801],{"class":102},"      justify-content",[66,56803,53221],{"class":76},[66,56805,53452],{"class":102},[66,56807,3135],{"class":76},[66,56809,56810,56812,56814,56816],{"class":68,"line":11523},[66,56811,56540],{"class":102},[66,56813,53221],{"class":76},[66,56815,56612],{"class":102},[66,56817,3135],{"class":76},[66,56819,56820,56822,56824,56826,56828],{"class":68,"line":11548},[66,56821,56552],{"class":102},[66,56823,53221],{"class":76},[66,56825,5809],{"class":102},[66,56827,53276],{"class":72},[66,56829,3135],{"class":76},[66,56831,56832,56834,56836,56838,56840],{"class":68,"line":11571},[66,56833,56566],{"class":102},[66,56835,53221],{"class":76},[66,56837,2679],{"class":102},[66,56839,53276],{"class":72},[66,56841,3135],{"class":76},[66,56843,56844],{"class":68,"line":11595},[66,56845,4013],{"class":76},[66,56847,56848],{"class":68,"line":11600},[66,56849,109],{"emptyLinePlaceholder":108},[66,56851,56852,56854,56857],{"class":68,"line":11605},[66,56853,56749],{"class":53084},[66,56855,56856],{"class":53084}," li",[66,56858,17375],{"class":76},[66,56860,56861,56863,56865,56867,56869],{"class":68,"line":11610},[66,56862,56552],{"class":102},[66,56864,53221],{"class":76},[66,56866,2679],{"class":102},[66,56868,53276],{"class":72},[66,56870,3135],{"class":76},[66,56872,56873,56875,56877,56879,56881],{"class":68,"line":11619},[66,56874,56566],{"class":102},[66,56876,53221],{"class":76},[66,56878,2679],{"class":102},[66,56880,53276],{"class":72},[66,56882,3135],{"class":76},[66,56884,56885,56887,56889,56892,56894,56896,56898,56900,56902,56904,56906,56909],{"class":68,"line":11624},[66,56886,56665],{"class":102},[66,56888,53221],{"class":76},[66,56890,56891],{"class":102},"rgba",[66,56893,348],{"class":76},[66,56895,2183],{"class":102},[66,56897,307],{"class":76},[66,56899,2183],{"class":102},[66,56901,307],{"class":76},[66,56903,2183],{"class":102},[66,56905,307],{"class":76},[66,56907,56908],{"class":102},".4",[66,56910,4543],{"class":76},[66,56912,56913,56916,56918,56920,56922],{"class":68,"line":11630},[66,56914,56915],{"class":102},"      border-radius",[66,56917,53221],{"class":76},[66,56919,790],{"class":102},[66,56921,53276],{"class":72},[66,56923,3135],{"class":76},[66,56925,56926],{"class":68,"line":11651},[66,56927,4013],{"class":76},[66,56929,56930],{"class":68,"line":11657},[66,56931,109],{"emptyLinePlaceholder":108},[66,56933,56934,56937],{"class":68,"line":11671},[66,56935,56936],{"class":3793},"    .activate",[66,56938,17375],{"class":76},[66,56940,56941,56943,56945,56948],{"class":68,"line":11677},[66,56942,56665],{"class":102},[66,56944,53221],{"class":76},[66,56946,56947],{"class":102},"#f7f7f7",[66,56949,3135],{"class":76},[66,56951,56952],{"class":68,"line":11704},[66,56953,4013],{"class":76},[66,56955,56956,56958,56960],{"class":68,"line":11713},[66,56957,54199],{"class":76},[66,56959,1903],{"class":53084},[66,56961,53091],{"class":76},[66,56963,56964,56966,56968],{"class":68,"line":11719},[66,56965,53569],{"class":76},[66,56967,53118],{"class":53084},[66,56969,53091],{"class":76},[66,56971,56972],{"class":68,"line":11727},[66,56973,109],{"emptyLinePlaceholder":108},[66,56975,56976,56978,56980],{"class":68,"line":11732},[66,56977,413],{"class":76},[66,56979,53584],{"class":53084},[66,56981,53091],{"class":76},[66,56983,56984,56986,56988,56990,56992,56994],{"class":68,"line":18407},[66,56985,53928],{"class":76},[66,56987,53395],{"class":53084},[66,56989,55268],{"class":3793},[66,56991,99],{"class":76},[66,56993,55273],{"class":356},[66,56995,53091],{"class":76},[66,56997,56998,57000,57002,57004,57006,57009],{"class":68,"line":18413},[66,56999,53125],{"class":76},[66,57001,53395],{"class":53084},[66,57003,55268],{"class":3793},[66,57005,99],{"class":76},[66,57007,57008],{"class":356},"\"slider-wrapper\"",[66,57010,53091],{"class":76},[66,57012,57013,57016,57018,57021,57023,57026,57029,57031,57033],{"class":68,"line":18436},[66,57014,57015],{"class":76},"      \u003C",[66,57017,3304],{"class":53084},[66,57019,57020],{"class":3793}," src",[66,57022,99],{"class":76},[66,57024,57025],{"class":356},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[66,57027,57028],{"class":3793}," alt",[66,57030,99],{"class":76},[66,57032,9463],{"class":356},[66,57034,53091],{"class":76},[66,57036,57037,57039,57041],{"class":68,"line":18442},[66,57038,53560],{"class":76},[66,57040,53395],{"class":53084},[66,57042,53091],{"class":76},[66,57044,57045,57047,57049,57051,57053,57056],{"class":68,"line":18465},[66,57046,53125],{"class":76},[66,57048,53395],{"class":53084},[66,57050,55268],{"class":3793},[66,57052,99],{"class":76},[66,57054,57055],{"class":356},"\"slider-footer\"",[66,57057,53091],{"class":76},[66,57059,57060,57062,57064,57067,57069],{"class":68,"line":18479},[66,57061,57015],{"class":76},[66,57063,19],{"class":53084},[66,57065,57066],{"class":76},">对人类来说会不会太超前了?\u003C\u002F",[66,57068,19],{"class":53084},[66,57070,53091],{"class":76},[66,57072,57073,57075,57077],{"class":68,"line":18499},[66,57074,57015],{"class":76},[66,57076,2982],{"class":53084},[66,57078,53091],{"class":76},[66,57080,57081,57084,57086,57088,57090,57093,57096,57098],{"class":68,"line":18505},[66,57082,57083],{"class":76},"        \u003C",[66,57085,34],{"class":53084},[66,57087,55268],{"class":3793},[66,57089,99],{"class":76},[66,57091,57092],{"class":356},"\"activate\"",[66,57094,57095],{"class":76},">\u003C\u002F",[66,57097,34],{"class":53084},[66,57099,53091],{"class":76},[66,57101,57102,57104,57106,57108,57110],{"class":68,"line":18516},[66,57103,57083],{"class":76},[66,57105,34],{"class":53084},[66,57107,57095],{"class":76},[66,57109,34],{"class":53084},[66,57111,53091],{"class":76},[66,57113,57114,57116,57118,57120,57122],{"class":68,"line":18539},[66,57115,57083],{"class":76},[66,57117,34],{"class":53084},[66,57119,57095],{"class":76},[66,57121,34],{"class":53084},[66,57123,53091],{"class":76},[66,57125,57126,57128,57130,57132,57134],{"class":68,"line":18561},[66,57127,57083],{"class":76},[66,57129,34],{"class":53084},[66,57131,57095],{"class":76},[66,57133,34],{"class":53084},[66,57135,53091],{"class":76},[66,57137,57138,57140,57142,57144,57146],{"class":68,"line":18566},[66,57139,57083],{"class":76},[66,57141,34],{"class":53084},[66,57143,57095],{"class":76},[66,57145,34],{"class":53084},[66,57147,53091],{"class":76},[66,57149,57150,57152,57154,57156,57158],{"class":68,"line":18572},[66,57151,57083],{"class":76},[66,57153,34],{"class":53084},[66,57155,57095],{"class":76},[66,57157,34],{"class":53084},[66,57159,53091],{"class":76},[66,57161,57162,57164,57166,57168,57170],{"class":68,"line":18586},[66,57163,57083],{"class":76},[66,57165,34],{"class":53084},[66,57167,57095],{"class":76},[66,57169,34],{"class":53084},[66,57171,53091],{"class":76},[66,57173,57174,57176,57178,57180,57182],{"class":68,"line":18599},[66,57175,57083],{"class":76},[66,57177,34],{"class":53084},[66,57179,57095],{"class":76},[66,57181,34],{"class":53084},[66,57183,53091],{"class":76},[66,57185,57186,57189,57191],{"class":68,"line":18604},[66,57187,57188],{"class":76},"      \u003C\u002F",[66,57190,2982],{"class":53084},[66,57192,53091],{"class":76},[66,57194,57195,57197,57199],{"class":68,"line":18618},[66,57196,53560],{"class":76},[66,57198,53395],{"class":53084},[66,57200,53091],{"class":76},[66,57202,57203,57205,57207],{"class":68,"line":18623},[66,57204,54199],{"class":76},[66,57206,53395],{"class":53084},[66,57208,53091],{"class":76},[66,57210,57211,57213,57215],{"class":68,"line":18629},[66,57212,53928],{"class":76},[66,57214,53597],{"class":53084},[66,57216,53091],{"class":76},[66,57218,57219,57221,57224,57226],{"class":68,"line":18634},[66,57220,13027],{"class":72},[66,57222,57223],{"class":102}," arrImage",[66,57225,15369],{"class":72},[66,57227,57228],{"class":76}," [\n",[66,57230,57231,57234,57237,57240,57243,57246,57249],{"class":68,"line":18648},[66,57232,57233],{"class":76},"      { url: ",[66,57235,57236],{"class":356},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[66,57238,57239],{"class":76},", title: ",[66,57241,57242],{"class":356},"'对人类来说会不会太超前了?'",[66,57244,57245],{"class":76},", color: ",[66,57247,57248],{"class":356},"'rgba(100,67,68)'",[66,57250,57251],{"class":76}," },\n",[66,57253,57254,57256,57259,57261,57264,57266,57269],{"class":68,"line":18653},[66,57255,57233],{"class":76},[66,57257,57258],{"class":356},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[66,57260,57239],{"class":76},[66,57262,57263],{"class":356},"'开启剑与雪的黑暗传说!'",[66,57265,57245],{"class":76},[66,57267,57268],{"class":356},"'rgba(43,35,26)'",[66,57270,57251],{"class":76},[66,57272,57273,57275,57278,57280,57283,57285,57288],{"class":68,"line":18658},[66,57274,57233],{"class":76},[66,57276,57277],{"class":356},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[66,57279,57239],{"class":76},[66,57281,57282],{"class":356},"'真正的jo厨出现了!'",[66,57284,57245],{"class":76},[66,57286,57287],{"class":356},"'rgba(36,31,33)'",[66,57289,57251],{"class":76},[66,57291,57292,57294,57297,57299,57302,57304,57307],{"class":68,"line":18672},[66,57293,57233],{"class":76},[66,57295,57296],{"class":356},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[66,57298,57239],{"class":76},[66,57300,57301],{"class":356},"'李玉刚:让世界通过b站看到东方大国文化'",[66,57303,57245],{"class":76},[66,57305,57306],{"class":356},"'rgba(139,98,66)'",[66,57308,57251],{"class":76},[66,57310,57311,57313,57316,57318,57321,57323,57326],{"class":68,"line":18684},[66,57312,57233],{"class":76},[66,57314,57315],{"class":356},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[66,57317,57239],{"class":76},[66,57319,57320],{"class":356},"'快来分享你的寒假日常吧'",[66,57322,57245],{"class":76},[66,57324,57325],{"class":356},"'rgba(67,90,92)'",[66,57327,57251],{"class":76},[66,57329,57330,57332,57335,57337,57340,57342,57345],{"class":68,"line":18689},[66,57331,57233],{"class":76},[66,57333,57334],{"class":356},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[66,57336,57239],{"class":76},[66,57338,57339],{"class":356},"'哔哩哔哩小年YEAR'",[66,57341,57245],{"class":76},[66,57343,57344],{"class":356},"'rgba(166,131,143)'",[66,57346,57251],{"class":76},[66,57348,57349,57351,57354,57356,57359,57361,57364],{"class":68,"line":18702},[66,57350,57233],{"class":76},[66,57352,57353],{"class":356},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[66,57355,57239],{"class":76},[66,57357,57358],{"class":356},"'一站式解决你的电脑配置问题'",[66,57360,57245],{"class":76},[66,57362,57363],{"class":356},"'rgba(53,29,25)'",[66,57365,57251],{"class":76},[66,57367,57368,57370,57373,57375,57378,57380,57383],{"class":68,"line":18707},[66,57369,57233],{"class":76},[66,57371,57372],{"class":356},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[66,57374,57239],{"class":76},[66,57376,57377],{"class":356},"'谁不想和小猫咪贴贴呢?'",[66,57379,57245],{"class":76},[66,57381,57382],{"class":356},"'rgba(99,72,114)'",[66,57384,57385],{"class":76}," }\n",[66,57387,57388],{"class":68,"line":18712},[66,57389,54891],{"class":76},[66,57391,57392,57394,57397,57399,57401,57403,57405,57408],{"class":68,"line":18717},[66,57393,13027],{"class":72},[66,57395,57396],{"class":102}," img",[66,57398,15369],{"class":72},[66,57400,56177],{"class":76},[66,57402,56180],{"class":3793},[66,57404,348],{"class":76},[66,57406,57407],{"class":356},"'.slider-wrapper img'",[66,57409,313],{"class":76},[66,57411,57412,57414,57416,57418,57420,57422,57424,57427],{"class":68,"line":18730},[66,57413,13027],{"class":72},[66,57415,8636],{"class":102},[66,57417,15369],{"class":72},[66,57419,56177],{"class":76},[66,57421,56180],{"class":3793},[66,57423,348],{"class":76},[66,57425,57426],{"class":356},"'.slider-footer p'",[66,57428,313],{"class":76},[66,57430,57431,57433,57436,57438,57440,57442,57444,57447],{"class":68,"line":18735},[66,57432,13027],{"class":72},[66,57434,57435],{"class":102}," color",[66,57437,15369],{"class":72},[66,57439,56177],{"class":76},[66,57441,56180],{"class":3793},[66,57443,348],{"class":76},[66,57445,57446],{"class":356},"'.slider-footer'",[66,57448,313],{"class":76},[66,57450,57451,57453,57456,57458,57460,57463,57465,57468],{"class":68,"line":34423},[66,57452,13027],{"class":72},[66,57454,57455],{"class":102}," lis",[66,57457,15369],{"class":72},[66,57459,56177],{"class":76},[66,57461,57462],{"class":3793},"querySelectorAll",[66,57464,348],{"class":76},[66,57466,57467],{"class":356},"'.slider-footer ul li'",[66,57469,313],{"class":76},[66,57471,57472,57474,57476,57478],{"class":68,"line":34429},[66,57473,54003],{"class":72},[66,57475,117],{"class":76},[66,57477,99],{"class":72},[66,57479,103],{"class":102},[66,57481,57482,57484,57487,57489,57491,57493,57495],{"class":68,"line":34435},[66,57483,54003],{"class":72},[66,57485,57486],{"class":76}," timer ",[66,57488,99],{"class":72},[66,57490,56225],{"class":3793},[66,57492,348],{"class":76},[66,57494,56230],{"class":72},[66,57496,56233],{"class":76},[66,57498,57499,57502,57504],{"class":68,"line":34441},[66,57500,57501],{"class":76},"      img.src ",[66,57503,99],{"class":72},[66,57505,57506],{"class":76}," arrImage[i].url\n",[66,57508,57509,57512,57514],{"class":68,"line":34447},[66,57510,57511],{"class":76},"      p.innerHTML ",[66,57513,99],{"class":72},[66,57515,57516],{"class":76}," arrImage[i].title\n",[66,57518,57519,57522,57524],{"class":68,"line":34458},[66,57520,57521],{"class":76},"      color.style.backgroundColor ",[66,57523,99],{"class":72},[66,57525,57526],{"class":76}," arrImage[i].color\n",[66,57528,57529],{"class":68,"line":34464},[66,57530,57531],{"class":758},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[66,57533,57534],{"class":68,"line":34484},[66,57535,57536],{"class":758},"      \u002F\u002F li.classList.add('activate')\n",[66,57538,57539],{"class":68,"line":34490},[66,57540,57541],{"class":758},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[66,57543,57544],{"class":68,"line":34501},[66,57545,57546],{"class":758},"      \u002F\u002F lis[i].classList.remove('activate')\n",[66,57548,57549,57552,57554,57556,57559,57562,57565,57567,57570],{"class":68,"line":34507},[66,57550,57551],{"class":76},"      document.",[66,57553,56180],{"class":3793},[66,57555,348],{"class":76},[66,57557,57558],{"class":356},"'.activate'",[66,57560,57561],{"class":76},")?.classList.",[66,57563,57564],{"class":3793},"toggle",[66,57566,348],{"class":76},[66,57568,57569],{"class":356},"'activate'",[66,57571,313],{"class":76},[66,57573,57574,57577,57579,57581,57583],{"class":68,"line":34513},[66,57575,57576],{"class":76},"      lis[i].classList.",[66,57578,7146],{"class":3793},[66,57580,348],{"class":76},[66,57582,57569],{"class":356},[66,57584,313],{"class":76},[66,57586,57587],{"class":68,"line":34519},[66,57588,109],{"emptyLinePlaceholder":108},[66,57590,57591,57594,57596,57598,57600,57602,57604,57606,57609],{"class":68,"line":34525},[66,57592,57593],{"class":76},"      i ",[66,57595,99],{"class":72},[66,57597,56264],{"class":76},[66,57599,1184],{"class":72},[66,57601,1187],{"class":102},[66,57603,15519],{"class":76},[66,57605,953],{"class":72},[66,57607,57608],{"class":76}," arrImage.",[66,57610,57611],{"class":102},"length\n",[66,57613,57614],{"class":68,"line":34531},[66,57615,109],{"emptyLinePlaceholder":108},[66,57617,57618,57620,57622],{"class":68,"line":34537},[66,57619,56316],{"class":76},[66,57621,8221],{"class":102},[66,57623,313],{"class":76},[66,57625,57626,57628,57630],{"class":68,"line":34543},[66,57627,54199],{"class":76},[66,57629,53597],{"class":53084},[66,57631,53091],{"class":76},[66,57633,57634,57636,57638],{"class":68,"line":34563},[66,57635,53569],{"class":76},[66,57637,53584],{"class":53084},[66,57639,53091],{"class":76},[66,57641,57642],{"class":68,"line":34569},[66,57643,109],{"emptyLinePlaceholder":108},[66,57645,57646,57648,57650],{"class":68,"line":34585},[66,57647,53569],{"class":76},[66,57649,52419],{"class":53084},[66,57651,53091],{"class":76},[19,57653,57654],{},[3304,57655],{"alt":62,"src":57656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,57658,57659],{},"?.就是短路保护,确保输出正常进行",[19,57661,57662],{},"不要忘记取余%,有时候可以用",[19,57664,57665],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[31,57667,57668],{"start":80},[34,57669,57670],{},"法2",[57,57672,57674],{"className":52417,"code":57673,"language":52419,"meta":62,"style":62},"\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",[23,57675,57676,57686,57700,57704,57712,57726,57746,57758,57766,57772,57782,57792,57796,57800,57806,57816,57820,57824,57830,57840,57852,57864,57878,57882,57886,57892,57902,57912,57922,57934,57946,57956,57960,57964,57972,57982,57994,58006,58018,58022,58026,58032,58042,58054,58066,58076,58086,58096,58108,58120,58124,58128,58136,58148,58160,58186,58198,58202,58206,58212,58222,58226,58234,58242,58246,58254,58268,58282,58302,58310,58324,58336,58344,58362,58374,58386,58398,58410,58422,58434,58446,58454,58462,58470,58478,58489,58505,58521,58537,58553,58569,58585,58601,58617,58621,58626,58644,58662,58672,58677,58682,58693,58699,58714,58723,58727,58732,58741,58746,58755,58760,58765,58770,58793,58823,58827,58835,58839,58847,58855,58859],{"__ignoreMap":62},[66,57677,57678,57680,57682,57684],{"class":68,"line":69},[66,57679,53081],{"class":76},[66,57681,53085],{"class":53084},[66,57683,53088],{"class":3793},[66,57685,53091],{"class":76},[66,57687,57688,57690,57692,57694,57696,57698],{"class":68,"line":80},[66,57689,413],{"class":76},[66,57691,52419],{"class":53084},[66,57693,53100],{"class":3793},[66,57695,99],{"class":76},[66,57697,53105],{"class":356},[66,57699,53091],{"class":76},[66,57701,57702],{"class":68,"line":112},[66,57703,109],{"emptyLinePlaceholder":108},[66,57705,57706,57708,57710],{"class":68,"line":129},[66,57707,413],{"class":76},[66,57709,53118],{"class":53084},[66,57711,53091],{"class":76},[66,57713,57714,57716,57718,57720,57722,57724],{"class":68,"line":138},[66,57715,53928],{"class":76},[66,57717,53128],{"class":53084},[66,57719,53131],{"class":3793},[66,57721,99],{"class":76},[66,57723,53136],{"class":356},[66,57725,53091],{"class":76},[66,57727,57728,57730,57732,57734,57736,57738,57740,57742,57744],{"class":68,"line":227},[66,57729,53928],{"class":76},[66,57731,53128],{"class":53084},[66,57733,16724],{"class":3793},[66,57735,99],{"class":76},[66,57737,53175],{"class":356},[66,57739,53155],{"class":3793},[66,57741,99],{"class":76},[66,57743,53182],{"class":356},[66,57745,53091],{"class":76},[66,57747,57748,57750,57752,57754,57756],{"class":68,"line":236},[66,57749,53928],{"class":76},[66,57751,53191],{"class":53084},[66,57753,53194],{"class":76},[66,57755,53191],{"class":53084},[66,57757,53091],{"class":76},[66,57759,57760,57762,57764],{"class":68,"line":241},[66,57761,53928],{"class":76},[66,57763,1903],{"class":53084},[66,57765,53091],{"class":76},[66,57767,57768,57770],{"class":68,"line":372},[66,57769,8214],{"class":53084},[66,57771,17375],{"class":76},[66,57773,57774,57776,57778,57780],{"class":68,"line":377},[66,57775,56476],{"class":102},[66,57777,53221],{"class":76},[66,57779,2183],{"class":102},[66,57781,3135],{"class":76},[66,57783,57784,57786,57788,57790],{"class":68,"line":392},[66,57785,56487],{"class":102},[66,57787,53221],{"class":76},[66,57789,2183],{"class":102},[66,57791,3135],{"class":76},[66,57793,57794],{"class":68,"line":405},[66,57795,4013],{"class":76},[66,57797,57798],{"class":68,"line":418},[66,57799,109],{"emptyLinePlaceholder":108},[66,57801,57802,57804],{"class":68,"line":430},[66,57803,56506],{"class":53084},[66,57805,17375],{"class":76},[66,57807,57808,57810,57812,57814],{"class":68,"line":438},[66,57809,56513],{"class":102},[66,57811,53221],{"class":76},[66,57813,56518],{"class":102},[66,57815,3135],{"class":76},[66,57817,57818],{"class":68,"line":465},[66,57819,4013],{"class":76},[66,57821,57822],{"class":68,"line":1805},[66,57823,109],{"emptyLinePlaceholder":108},[66,57825,57826,57828],{"class":68,"line":1817},[66,57827,56533],{"class":3793},[66,57829,17375],{"class":76},[66,57831,57832,57834,57836,57838],{"class":68,"line":1822},[66,57833,56540],{"class":102},[66,57835,53221],{"class":76},[66,57837,56545],{"class":102},[66,57839,3135],{"class":76},[66,57841,57842,57844,57846,57848,57850],{"class":68,"line":1829},[66,57843,56552],{"class":102},[66,57845,53221],{"class":76},[66,57847,56557],{"class":102},[66,57849,53276],{"class":72},[66,57851,3135],{"class":76},[66,57853,57854,57856,57858,57860,57862],{"class":68,"line":3529},[66,57855,56566],{"class":102},[66,57857,53221],{"class":76},[66,57859,3381],{"class":102},[66,57861,53276],{"class":72},[66,57863,3135],{"class":76},[66,57865,57866,57868,57870,57872,57874,57876],{"class":68,"line":3557},[66,57867,56487],{"class":102},[66,57869,53221],{"class":76},[66,57871,310],{"class":102},[66,57873,53276],{"class":72},[66,57875,53340],{"class":102},[66,57877,3135],{"class":76},[66,57879,57880],{"class":68,"line":3562},[66,57881,4013],{"class":76},[66,57883,57884],{"class":68,"line":3579},[66,57885,109],{"emptyLinePlaceholder":108},[66,57887,57888,57890],{"class":68,"line":3584},[66,57889,56601],{"class":3793},[66,57891,17375],{"class":76},[66,57893,57894,57896,57898,57900],{"class":68,"line":3589},[66,57895,56540],{"class":102},[66,57897,53221],{"class":76},[66,57899,56612],{"class":102},[66,57901,3135],{"class":76},[66,57903,57904,57906,57908,57910],{"class":68,"line":3594},[66,57905,56619],{"class":102},[66,57907,53221],{"class":76},[66,57909,2183],{"class":102},[66,57911,3135],{"class":76},[66,57913,57914,57916,57918,57920],{"class":68,"line":3608},[66,57915,56630],{"class":102},[66,57917,53221],{"class":76},[66,57919,2183],{"class":102},[66,57921,3135],{"class":76},[66,57923,57924,57926,57928,57930,57932],{"class":68,"line":3613},[66,57925,56552],{"class":102},[66,57927,53221],{"class":76},[66,57929,310],{"class":102},[66,57931,953],{"class":72},[66,57933,3135],{"class":76},[66,57935,57936,57938,57940,57942,57944],{"class":68,"line":4401},[66,57937,56566],{"class":102},[66,57939,53221],{"class":76},[66,57941,2554],{"class":102},[66,57943,953],{"class":72},[66,57945,3135],{"class":76},[66,57947,57948,57950,57952,57954],{"class":68,"line":4415},[66,57949,56665],{"class":102},[66,57951,53221],{"class":76},[66,57953,56670],{"class":102},[66,57955,3135],{"class":76},[66,57957,57958],{"class":68,"line":4423},[66,57959,4013],{"class":76},[66,57961,57962],{"class":68,"line":4428},[66,57963,109],{"emptyLinePlaceholder":108},[66,57965,57966,57968,57970],{"class":68,"line":4434},[66,57967,56601],{"class":3793},[66,57969,8636],{"class":53084},[66,57971,17375],{"class":76},[66,57973,57974,57976,57978,57980],{"class":68,"line":4440},[66,57975,56540],{"class":102},[66,57977,53221],{"class":76},[66,57979,56612],{"class":102},[66,57981,3135],{"class":76},[66,57983,57984,57986,57988,57990,57992],{"class":68,"line":4445},[66,57985,56703],{"class":102},[66,57987,53221],{"class":76},[66,57989,2879],{"class":102},[66,57991,53276],{"class":72},[66,57993,3135],{"class":76},[66,57995,57996,57998,58000,58002,58004],{"class":68,"line":9759},[66,57997,56619],{"class":102},[66,57999,53221],{"class":76},[66,58001,2679],{"class":102},[66,58003,53276],{"class":72},[66,58005,3135],{"class":76},[66,58007,58008,58010,58012,58014,58016],{"class":68,"line":9783},[66,58009,56728],{"class":102},[66,58011,53221],{"class":76},[66,58013,752],{"class":102},[66,58015,53276],{"class":72},[66,58017,3135],{"class":76},[66,58019,58020],{"class":68,"line":9788},[66,58021,4013],{"class":76},[66,58023,58024],{"class":68,"line":9794},[66,58025,109],{"emptyLinePlaceholder":108},[66,58027,58028,58030],{"class":68,"line":9821},[66,58029,56749],{"class":53084},[66,58031,17375],{"class":76},[66,58033,58034,58036,58038,58040],{"class":68,"line":9826},[66,58035,56540],{"class":102},[66,58037,53221],{"class":76},[66,58039,56612],{"class":102},[66,58041,3135],{"class":76},[66,58043,58044,58046,58048,58050,58052],{"class":68,"line":9832},[66,58045,56728],{"class":102},[66,58047,53221],{"class":76},[66,58049,2760],{"class":102},[66,58051,53276],{"class":72},[66,58053,3135],{"class":76},[66,58055,58056,58058,58060,58062,58064],{"class":68,"line":9844},[66,58057,56619],{"class":102},[66,58059,53221],{"class":76},[66,58061,2679],{"class":102},[66,58063,53276],{"class":72},[66,58065,3135],{"class":76},[66,58067,58068,58070,58072,58074],{"class":68,"line":9856},[66,58069,56790],{"class":102},[66,58071,53221],{"class":76},[66,58073,53261],{"class":102},[66,58075,3135],{"class":76},[66,58077,58078,58080,58082,58084],{"class":68,"line":9868},[66,58079,56801],{"class":102},[66,58081,53221],{"class":76},[66,58083,53452],{"class":102},[66,58085,3135],{"class":76},[66,58087,58088,58090,58092,58094],{"class":68,"line":11523},[66,58089,56540],{"class":102},[66,58091,53221],{"class":76},[66,58093,56612],{"class":102},[66,58095,3135],{"class":76},[66,58097,58098,58100,58102,58104,58106],{"class":68,"line":11548},[66,58099,56552],{"class":102},[66,58101,53221],{"class":76},[66,58103,5809],{"class":102},[66,58105,53276],{"class":72},[66,58107,3135],{"class":76},[66,58109,58110,58112,58114,58116,58118],{"class":68,"line":11571},[66,58111,56566],{"class":102},[66,58113,53221],{"class":76},[66,58115,2679],{"class":102},[66,58117,53276],{"class":72},[66,58119,3135],{"class":76},[66,58121,58122],{"class":68,"line":11595},[66,58123,4013],{"class":76},[66,58125,58126],{"class":68,"line":11600},[66,58127,109],{"emptyLinePlaceholder":108},[66,58129,58130,58132,58134],{"class":68,"line":11605},[66,58131,56749],{"class":53084},[66,58133,56856],{"class":53084},[66,58135,17375],{"class":76},[66,58137,58138,58140,58142,58144,58146],{"class":68,"line":11610},[66,58139,56552],{"class":102},[66,58141,53221],{"class":76},[66,58143,2679],{"class":102},[66,58145,53276],{"class":72},[66,58147,3135],{"class":76},[66,58149,58150,58152,58154,58156,58158],{"class":68,"line":11619},[66,58151,56566],{"class":102},[66,58153,53221],{"class":76},[66,58155,2679],{"class":102},[66,58157,53276],{"class":72},[66,58159,3135],{"class":76},[66,58161,58162,58164,58166,58168,58170,58172,58174,58176,58178,58180,58182,58184],{"class":68,"line":11624},[66,58163,56665],{"class":102},[66,58165,53221],{"class":76},[66,58167,56891],{"class":102},[66,58169,348],{"class":76},[66,58171,2183],{"class":102},[66,58173,307],{"class":76},[66,58175,2183],{"class":102},[66,58177,307],{"class":76},[66,58179,2183],{"class":102},[66,58181,307],{"class":76},[66,58183,56908],{"class":102},[66,58185,4543],{"class":76},[66,58187,58188,58190,58192,58194,58196],{"class":68,"line":11630},[66,58189,56915],{"class":102},[66,58191,53221],{"class":76},[66,58193,790],{"class":102},[66,58195,53276],{"class":72},[66,58197,3135],{"class":76},[66,58199,58200],{"class":68,"line":11651},[66,58201,4013],{"class":76},[66,58203,58204],{"class":68,"line":11657},[66,58205,109],{"emptyLinePlaceholder":108},[66,58207,58208,58210],{"class":68,"line":11671},[66,58209,56936],{"class":3793},[66,58211,17375],{"class":76},[66,58213,58214,58216,58218,58220],{"class":68,"line":11677},[66,58215,56665],{"class":102},[66,58217,53221],{"class":76},[66,58219,56947],{"class":102},[66,58221,3135],{"class":76},[66,58223,58224],{"class":68,"line":11704},[66,58225,4013],{"class":76},[66,58227,58228,58230,58232],{"class":68,"line":11713},[66,58229,54199],{"class":76},[66,58231,1903],{"class":53084},[66,58233,53091],{"class":76},[66,58235,58236,58238,58240],{"class":68,"line":11719},[66,58237,53569],{"class":76},[66,58239,53118],{"class":53084},[66,58241,53091],{"class":76},[66,58243,58244],{"class":68,"line":11727},[66,58245,109],{"emptyLinePlaceholder":108},[66,58247,58248,58250,58252],{"class":68,"line":11732},[66,58249,413],{"class":76},[66,58251,53584],{"class":53084},[66,58253,53091],{"class":76},[66,58255,58256,58258,58260,58262,58264,58266],{"class":68,"line":18407},[66,58257,53928],{"class":76},[66,58259,53395],{"class":53084},[66,58261,55268],{"class":3793},[66,58263,99],{"class":76},[66,58265,55273],{"class":356},[66,58267,53091],{"class":76},[66,58269,58270,58272,58274,58276,58278,58280],{"class":68,"line":18413},[66,58271,53125],{"class":76},[66,58273,53395],{"class":53084},[66,58275,55268],{"class":3793},[66,58277,99],{"class":76},[66,58279,57008],{"class":356},[66,58281,53091],{"class":76},[66,58283,58284,58286,58288,58290,58292,58294,58296,58298,58300],{"class":68,"line":18436},[66,58285,57015],{"class":76},[66,58287,3304],{"class":53084},[66,58289,57020],{"class":3793},[66,58291,99],{"class":76},[66,58293,57025],{"class":356},[66,58295,57028],{"class":3793},[66,58297,99],{"class":76},[66,58299,9463],{"class":356},[66,58301,53091],{"class":76},[66,58303,58304,58306,58308],{"class":68,"line":18442},[66,58305,53560],{"class":76},[66,58307,53395],{"class":53084},[66,58309,53091],{"class":76},[66,58311,58312,58314,58316,58318,58320,58322],{"class":68,"line":18465},[66,58313,53125],{"class":76},[66,58315,53395],{"class":53084},[66,58317,55268],{"class":3793},[66,58319,99],{"class":76},[66,58321,57055],{"class":356},[66,58323,53091],{"class":76},[66,58325,58326,58328,58330,58332,58334],{"class":68,"line":18479},[66,58327,57015],{"class":76},[66,58329,19],{"class":53084},[66,58331,57066],{"class":76},[66,58333,19],{"class":53084},[66,58335,53091],{"class":76},[66,58337,58338,58340,58342],{"class":68,"line":18499},[66,58339,57015],{"class":76},[66,58341,2982],{"class":53084},[66,58343,53091],{"class":76},[66,58345,58346,58348,58350,58352,58354,58356,58358,58360],{"class":68,"line":18505},[66,58347,57083],{"class":76},[66,58349,34],{"class":53084},[66,58351,55268],{"class":3793},[66,58353,99],{"class":76},[66,58355,57092],{"class":356},[66,58357,57095],{"class":76},[66,58359,34],{"class":53084},[66,58361,53091],{"class":76},[66,58363,58364,58366,58368,58370,58372],{"class":68,"line":18516},[66,58365,57083],{"class":76},[66,58367,34],{"class":53084},[66,58369,57095],{"class":76},[66,58371,34],{"class":53084},[66,58373,53091],{"class":76},[66,58375,58376,58378,58380,58382,58384],{"class":68,"line":18539},[66,58377,57083],{"class":76},[66,58379,34],{"class":53084},[66,58381,57095],{"class":76},[66,58383,34],{"class":53084},[66,58385,53091],{"class":76},[66,58387,58388,58390,58392,58394,58396],{"class":68,"line":18561},[66,58389,57083],{"class":76},[66,58391,34],{"class":53084},[66,58393,57095],{"class":76},[66,58395,34],{"class":53084},[66,58397,53091],{"class":76},[66,58399,58400,58402,58404,58406,58408],{"class":68,"line":18566},[66,58401,57083],{"class":76},[66,58403,34],{"class":53084},[66,58405,57095],{"class":76},[66,58407,34],{"class":53084},[66,58409,53091],{"class":76},[66,58411,58412,58414,58416,58418,58420],{"class":68,"line":18572},[66,58413,57083],{"class":76},[66,58415,34],{"class":53084},[66,58417,57095],{"class":76},[66,58419,34],{"class":53084},[66,58421,53091],{"class":76},[66,58423,58424,58426,58428,58430,58432],{"class":68,"line":18586},[66,58425,57083],{"class":76},[66,58427,34],{"class":53084},[66,58429,57095],{"class":76},[66,58431,34],{"class":53084},[66,58433,53091],{"class":76},[66,58435,58436,58438,58440,58442,58444],{"class":68,"line":18599},[66,58437,57083],{"class":76},[66,58439,34],{"class":53084},[66,58441,57095],{"class":76},[66,58443,34],{"class":53084},[66,58445,53091],{"class":76},[66,58447,58448,58450,58452],{"class":68,"line":18604},[66,58449,57188],{"class":76},[66,58451,2982],{"class":53084},[66,58453,53091],{"class":76},[66,58455,58456,58458,58460],{"class":68,"line":18618},[66,58457,53560],{"class":76},[66,58459,53395],{"class":53084},[66,58461,53091],{"class":76},[66,58463,58464,58466,58468],{"class":68,"line":18623},[66,58465,54199],{"class":76},[66,58467,53395],{"class":53084},[66,58469,53091],{"class":76},[66,58471,58472,58474,58476],{"class":68,"line":18629},[66,58473,53928],{"class":76},[66,58475,53597],{"class":53084},[66,58477,53091],{"class":76},[66,58479,58480,58482,58485,58487],{"class":68,"line":18634},[66,58481,13027],{"class":72},[66,58483,58484],{"class":102}," sliderData",[66,58486,15369],{"class":72},[66,58488,57228],{"class":76},[66,58490,58491,58493,58495,58497,58499,58501,58503],{"class":68,"line":18648},[66,58492,57233],{"class":76},[66,58494,57236],{"class":356},[66,58496,57239],{"class":76},[66,58498,57242],{"class":356},[66,58500,57245],{"class":76},[66,58502,57248],{"class":356},[66,58504,57251],{"class":76},[66,58506,58507,58509,58511,58513,58515,58517,58519],{"class":68,"line":18653},[66,58508,57233],{"class":76},[66,58510,57258],{"class":356},[66,58512,57239],{"class":76},[66,58514,57263],{"class":356},[66,58516,57245],{"class":76},[66,58518,57268],{"class":356},[66,58520,57251],{"class":76},[66,58522,58523,58525,58527,58529,58531,58533,58535],{"class":68,"line":18658},[66,58524,57233],{"class":76},[66,58526,57277],{"class":356},[66,58528,57239],{"class":76},[66,58530,57282],{"class":356},[66,58532,57245],{"class":76},[66,58534,57287],{"class":356},[66,58536,57251],{"class":76},[66,58538,58539,58541,58543,58545,58547,58549,58551],{"class":68,"line":18672},[66,58540,57233],{"class":76},[66,58542,57296],{"class":356},[66,58544,57239],{"class":76},[66,58546,57301],{"class":356},[66,58548,57245],{"class":76},[66,58550,57306],{"class":356},[66,58552,57251],{"class":76},[66,58554,58555,58557,58559,58561,58563,58565,58567],{"class":68,"line":18684},[66,58556,57233],{"class":76},[66,58558,57315],{"class":356},[66,58560,57239],{"class":76},[66,58562,57320],{"class":356},[66,58564,57245],{"class":76},[66,58566,57325],{"class":356},[66,58568,57251],{"class":76},[66,58570,58571,58573,58575,58577,58579,58581,58583],{"class":68,"line":18689},[66,58572,57233],{"class":76},[66,58574,57334],{"class":356},[66,58576,57239],{"class":76},[66,58578,57339],{"class":356},[66,58580,57245],{"class":76},[66,58582,57344],{"class":356},[66,58584,57251],{"class":76},[66,58586,58587,58589,58591,58593,58595,58597,58599],{"class":68,"line":18702},[66,58588,57233],{"class":76},[66,58590,57353],{"class":356},[66,58592,57239],{"class":76},[66,58594,57358],{"class":356},[66,58596,57245],{"class":76},[66,58598,57363],{"class":356},[66,58600,57251],{"class":76},[66,58602,58603,58605,58607,58609,58611,58613,58615],{"class":68,"line":18707},[66,58604,57233],{"class":76},[66,58606,57372],{"class":356},[66,58608,57239],{"class":76},[66,58610,57377],{"class":356},[66,58612,57245],{"class":76},[66,58614,57382],{"class":356},[66,58616,57385],{"class":76},[66,58618,58619],{"class":68,"line":18712},[66,58620,54891],{"class":76},[66,58622,58623],{"class":68,"line":18717},[66,58624,58625],{"class":758},"    \u002F\u002F 1.获取元素\n",[66,58627,58628,58630,58632,58634,58636,58638,58640,58642],{"class":68,"line":18730},[66,58629,13027],{"class":72},[66,58631,57396],{"class":102},[66,58633,15369],{"class":72},[66,58635,56177],{"class":76},[66,58637,56180],{"class":3793},[66,58639,348],{"class":76},[66,58641,57407],{"class":356},[66,58643,313],{"class":76},[66,58645,58646,58648,58650,58652,58654,58656,58658,58660],{"class":68,"line":18735},[66,58647,13027],{"class":72},[66,58649,8636],{"class":102},[66,58651,15369],{"class":72},[66,58653,56177],{"class":76},[66,58655,56180],{"class":3793},[66,58657,348],{"class":76},[66,58659,57426],{"class":356},[66,58661,313],{"class":76},[66,58663,58664,58666,58668,58670],{"class":68,"line":34423},[66,58665,54003],{"class":72},[66,58667,117],{"class":76},[66,58669,99],{"class":72},[66,58671,197],{"class":102},[66,58673,58674],{"class":68,"line":34429},[66,58675,58676],{"class":758},"    \u002F\u002F 2.开启定时器\n",[66,58678,58679],{"class":68,"line":34435},[66,58680,58681],{"class":758},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[66,58683,58684,58687,58689,58691],{"class":68,"line":34441},[66,58685,58686],{"class":3793},"    setInterval",[66,58688,348],{"class":76},[66,58690,56230],{"class":72},[66,58692,56233],{"class":76},[66,58694,58695,58697],{"class":68,"line":34447},[66,58696,56238],{"class":76},[66,58698,4526],{"class":72},[66,58700,58701,58703,58705,58707,58710,58712],{"class":68,"line":34458},[66,58702,56261],{"class":72},[66,58704,56264],{"class":76},[66,58706,3540],{"class":72},[66,58708,58709],{"class":76}," sliderData.",[66,58711,53752],{"class":102},[66,58713,14247],{"class":76},[66,58715,58716,58719,58721],{"class":68,"line":34464},[66,58717,58718],{"class":76},"        i ",[66,58720,99],{"class":72},[66,58722,197],{"class":102},[66,58724,58725],{"class":68,"line":34484},[66,58726,54180],{"class":76},[66,58728,58729],{"class":68,"line":34490},[66,58730,58731],{"class":758},"      \u002F\u002F 更换图片路径\n",[66,58733,58734,58736,58738],{"class":68,"line":34501},[66,58735,57501],{"class":76},[66,58737,99],{"class":72},[66,58739,58740],{"class":76}," sliderData[i].url\n",[66,58742,58743],{"class":68,"line":34507},[66,58744,58745],{"class":758},"      \u002F\u002F 把文字写到p里面\n",[66,58747,58748,58750,58752],{"class":68,"line":34513},[66,58749,57511],{"class":76},[66,58751,99],{"class":72},[66,58753,58754],{"class":76}," sliderData[i].title\n",[66,58756,58757],{"class":68,"line":34519},[66,58758,58759],{"class":758},"      \u002F\u002F 小圆点\n",[66,58761,58762],{"class":68,"line":34525},[66,58763,58764],{"class":758},"      \u002F\u002F 先删除以前的active\n",[66,58766,58767],{"class":68,"line":34531},[66,58768,58769],{"class":758},"      \u002F\u002F 只让当前li添加active\n",[66,58771,58772,58774,58776,58778,58781,58784,58787,58789,58791],{"class":68,"line":34537},[66,58773,57551],{"class":76},[66,58775,56180],{"class":3793},[66,58777,348],{"class":76},[66,58779,58780],{"class":356},"'.slider-footer .activate'",[66,58782,58783],{"class":76},").classList.",[66,58785,58786],{"class":3793},"remove",[66,58788,348],{"class":76},[66,58790,57569],{"class":356},[66,58792,313],{"class":76},[66,58794,58795,58797,58799,58801,58804,58806,58808,58810,58813,58815,58817,58819,58821],{"class":68,"line":34543},[66,58796,57551],{"class":76},[66,58798,56180],{"class":3793},[66,58800,348],{"class":76},[66,58802,58803],{"class":356},"`.slider-footer ul li:nth-child(${",[66,58805,257],{"class":76},[66,58807,47352],{"class":72},[66,58809,1187],{"class":102},[66,58811,58812],{"class":356},"})`",[66,58814,58783],{"class":76},[66,58816,7146],{"class":3793},[66,58818,348],{"class":76},[66,58820,57569],{"class":356},[66,58822,313],{"class":76},[66,58824,58825],{"class":68,"line":34563},[66,58826,109],{"emptyLinePlaceholder":108},[66,58828,58829,58831,58833],{"class":68,"line":34569},[66,58830,56316],{"class":76},[66,58832,8221],{"class":102},[66,58834,313],{"class":76},[66,58836,58837],{"class":68,"line":34585},[66,58838,109],{"emptyLinePlaceholder":108},[66,58840,58841,58843,58845],{"class":68,"line":34591},[66,58842,54199],{"class":76},[66,58844,53597],{"class":53084},[66,58846,53091],{"class":76},[66,58848,58849,58851,58853],{"class":68,"line":34605},[66,58850,53569],{"class":76},[66,58852,53584],{"class":53084},[66,58854,53091],{"class":76},[66,58856,58857],{"class":68,"line":34611},[66,58858,109],{"emptyLinePlaceholder":108},[66,58860,58861,58863,58865],{"class":68,"line":34626},[66,58862,53569],{"class":76},[66,58864,52419],{"class":53084},[66,58866,53091],{"class":76},[484,58868,58870],{"id":58869},"_317-重要知识点","3.1.7 重要知识点",[19,58872,58873,58874],{},"浏览器在渲染文本时， ",[2141,58875,58876],{},"没有空格或换行符就没有“断行点”",[19,58878,58879],{},[3304,58880],{"alt":62,"src":58881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,58883,58884],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,58886,58887],{},[3304,58888],{"alt":62,"src":58889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,58891,58892],{},[3304,58893],{"alt":62,"src":58894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,58896,58898],{"id":58897},"_32-dom事件基础","3.2 DOM事件基础",[484,58900,58902],{"id":58901},"_321-事件监听","3.2.1 事件监听",[19,58904,58905],{},[3304,58906],{"alt":62,"src":58907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,58909,58910],{},"事件监听有响应的发生",[19,58912,58913],{},[3304,58914],{"alt":62,"src":58915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,58917,58918],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,58920,58921],{},"对于有名函数,要执行的函数名后边不要加()",[484,58923,58925],{"id":58924},"_322-随机点名案例","3.2.2 随机点名案例",[57,58927,58929],{"className":52417,"code":58928,"language":52419,"meta":62,"style":62},"\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",[23,58930,58931,58941,58955,58959,58967,58981,59001,59013,59021,59027,59037,59047,59051,59055,59062,59073,59077,59081,59087,59099,59113,59123,59135,59148,59152,59156,59163,59167,59180,59192,59204,59208,59212,59216,59223,59233,59237,59241,59250,59262,59274,59289,59293,59301,59309,59313,59321,59334,59348,59361,59381,59389,59404,59424,59444,59452,59456,59464,59469,59505,59525,59530,59549,59554,59565,59570,59581,59586,59605,59620,59625,59651,59661,59670,59675,59691,59696,59701,59706,59721,59725,59729,59734,59753,59770,59778,59783,59798,59802,59806,59814,59822,59826],{"__ignoreMap":62},[66,58932,58933,58935,58937,58939],{"class":68,"line":69},[66,58934,53081],{"class":76},[66,58936,53085],{"class":53084},[66,58938,53088],{"class":3793},[66,58940,53091],{"class":76},[66,58942,58943,58945,58947,58949,58951,58953],{"class":68,"line":80},[66,58944,413],{"class":76},[66,58946,52419],{"class":53084},[66,58948,53100],{"class":3793},[66,58950,99],{"class":76},[66,58952,53105],{"class":356},[66,58954,53091],{"class":76},[66,58956,58957],{"class":68,"line":112},[66,58958,109],{"emptyLinePlaceholder":108},[66,58960,58961,58963,58965],{"class":68,"line":129},[66,58962,413],{"class":76},[66,58964,53118],{"class":53084},[66,58966,53091],{"class":76},[66,58968,58969,58971,58973,58975,58977,58979],{"class":68,"line":138},[66,58970,53928],{"class":76},[66,58972,53128],{"class":53084},[66,58974,53131],{"class":3793},[66,58976,99],{"class":76},[66,58978,53136],{"class":356},[66,58980,53091],{"class":76},[66,58982,58983,58985,58987,58989,58991,58993,58995,58997,58999],{"class":68,"line":227},[66,58984,53928],{"class":76},[66,58986,53128],{"class":53084},[66,58988,16724],{"class":3793},[66,58990,99],{"class":76},[66,58992,53175],{"class":356},[66,58994,53155],{"class":3793},[66,58996,99],{"class":76},[66,58998,53182],{"class":356},[66,59000,53091],{"class":76},[66,59002,59003,59005,59007,59009,59011],{"class":68,"line":236},[66,59004,53928],{"class":76},[66,59006,53191],{"class":53084},[66,59008,53194],{"class":76},[66,59010,53191],{"class":53084},[66,59012,53091],{"class":76},[66,59014,59015,59017,59019],{"class":68,"line":241},[66,59016,53928],{"class":76},[66,59018,1903],{"class":53084},[66,59020,53091],{"class":76},[66,59022,59023,59025],{"class":68,"line":372},[66,59024,8214],{"class":53084},[66,59026,17375],{"class":76},[66,59028,59029,59031,59033,59035],{"class":68,"line":377},[66,59030,56487],{"class":102},[66,59032,53221],{"class":76},[66,59034,2183],{"class":102},[66,59036,3135],{"class":76},[66,59038,59039,59041,59043,59045],{"class":68,"line":392},[66,59040,56476],{"class":102},[66,59042,53221],{"class":76},[66,59044,2183],{"class":102},[66,59046,3135],{"class":76},[66,59048,59049],{"class":68,"line":405},[66,59050,4013],{"class":76},[66,59052,59053],{"class":68,"line":418},[66,59054,109],{"emptyLinePlaceholder":108},[66,59056,59057,59060],{"class":68,"line":430},[66,59058,59059],{"class":53084},"    h2",[66,59061,17375],{"class":76},[66,59063,59064,59067,59069,59071],{"class":68,"line":438},[66,59065,59066],{"class":102},"      text-align",[66,59068,53221],{"class":76},[66,59070,53376],{"class":102},[66,59072,3135],{"class":76},[66,59074,59075],{"class":68,"line":465},[66,59076,4013],{"class":76},[66,59078,59079],{"class":68,"line":1805},[66,59080,109],{"emptyLinePlaceholder":108},[66,59082,59083,59085],{"class":68,"line":1817},[66,59084,56533],{"class":3793},[66,59086,17375],{"class":76},[66,59088,59089,59091,59093,59095,59097],{"class":68,"line":1822},[66,59090,56552],{"class":102},[66,59092,53221],{"class":76},[66,59094,3381],{"class":102},[66,59096,53276],{"class":72},[66,59098,3135],{"class":76},[66,59100,59101,59103,59105,59107,59109,59111],{"class":68,"line":1829},[66,59102,56487],{"class":102},[66,59104,53221],{"class":76},[66,59106,2635],{"class":102},[66,59108,53276],{"class":72},[66,59110,53340],{"class":102},[66,59112,3135],{"class":76},[66,59114,59115,59117,59119,59121],{"class":68,"line":3529},[66,59116,56790],{"class":102},[66,59118,53221],{"class":76},[66,59120,53261],{"class":102},[66,59122,3135],{"class":76},[66,59124,59125,59127,59129,59131,59133],{"class":68,"line":3557},[66,59126,56703],{"class":102},[66,59128,53221],{"class":76},[66,59130,2804],{"class":102},[66,59132,53276],{"class":72},[66,59134,3135],{"class":76},[66,59136,59137,59140,59142,59144,59146],{"class":68,"line":3562},[66,59138,59139],{"class":102},"      line-height",[66,59141,53221],{"class":76},[66,59143,2385],{"class":102},[66,59145,53276],{"class":72},[66,59147,3135],{"class":76},[66,59149,59150],{"class":68,"line":3579},[66,59151,4013],{"class":76},[66,59153,59154],{"class":68,"line":3584},[66,59155,109],{"emptyLinePlaceholder":108},[66,59157,59158,59161],{"class":68,"line":3589},[66,59159,59160],{"class":3793},"    .qs",[66,59162,17375],{"class":76},[66,59164,59165],{"class":68,"line":3594},[66,59166,109],{"emptyLinePlaceholder":108},[66,59168,59169,59171,59173,59176,59178],{"class":68,"line":3608},[66,59170,56552],{"class":102},[66,59172,53221],{"class":76},[66,59174,59175],{"class":102},"450",[66,59177,53276],{"class":72},[66,59179,3135],{"class":76},[66,59181,59182,59184,59186,59188,59190],{"class":68,"line":3613},[66,59183,56566],{"class":102},[66,59185,53221],{"class":76},[66,59187,2385],{"class":102},[66,59189,53276],{"class":72},[66,59191,3135],{"class":76},[66,59193,59194,59197,59199,59202],{"class":68,"line":4401},[66,59195,59196],{"class":102},"      color",[66,59198,53221],{"class":76},[66,59200,59201],{"class":102},"red",[66,59203,3135],{"class":76},[66,59205,59206],{"class":68,"line":4415},[66,59207,109],{"emptyLinePlaceholder":108},[66,59209,59210],{"class":68,"line":4423},[66,59211,4013],{"class":76},[66,59213,59214],{"class":68,"line":4428},[66,59215,109],{"emptyLinePlaceholder":108},[66,59217,59218,59221],{"class":68,"line":4434},[66,59219,59220],{"class":3793},"    .btns",[66,59222,17375],{"class":76},[66,59224,59225,59227,59229,59231],{"class":68,"line":4440},[66,59226,59066],{"class":102},[66,59228,53221],{"class":76},[66,59230,53376],{"class":102},[66,59232,3135],{"class":76},[66,59234,59235],{"class":68,"line":4445},[66,59236,4013],{"class":76},[66,59238,59239],{"class":68,"line":9759},[66,59240,109],{"emptyLinePlaceholder":108},[66,59242,59243,59245,59248],{"class":68,"line":9783},[66,59244,59220],{"class":3793},[66,59246,59247],{"class":53084}," button",[66,59249,17375],{"class":76},[66,59251,59252,59254,59256,59258,59260],{"class":68,"line":9788},[66,59253,56552],{"class":102},[66,59255,53221],{"class":76},[66,59257,2796],{"class":102},[66,59259,53276],{"class":72},[66,59261,3135],{"class":76},[66,59263,59264,59266,59268,59270,59272],{"class":68,"line":9794},[66,59265,56566],{"class":102},[66,59267,53221],{"class":76},[66,59269,2263],{"class":102},[66,59271,53276],{"class":72},[66,59273,3135],{"class":76},[66,59275,59276,59278,59280,59282,59285,59287],{"class":68,"line":9821},[66,59277,56487],{"class":102},[66,59279,53221],{"class":76},[66,59281,2183],{"class":102},[66,59283,59284],{"class":102}," 50",[66,59286,53276],{"class":72},[66,59288,3135],{"class":76},[66,59290,59291],{"class":68,"line":9826},[66,59292,4013],{"class":76},[66,59294,59295,59297,59299],{"class":68,"line":9832},[66,59296,54199],{"class":76},[66,59298,1903],{"class":53084},[66,59300,53091],{"class":76},[66,59302,59303,59305,59307],{"class":68,"line":9844},[66,59304,53569],{"class":76},[66,59306,53118],{"class":53084},[66,59308,53091],{"class":76},[66,59310,59311],{"class":68,"line":9856},[66,59312,109],{"emptyLinePlaceholder":108},[66,59314,59315,59317,59319],{"class":68,"line":9868},[66,59316,413],{"class":76},[66,59318,53584],{"class":53084},[66,59320,53091],{"class":76},[66,59322,59323,59325,59327,59330,59332],{"class":68,"line":11523},[66,59324,53928],{"class":76},[66,59326,14],{"class":53084},[66,59328,59329],{"class":76},">随机点名\u003C\u002F",[66,59331,14],{"class":53084},[66,59333,53091],{"class":76},[66,59335,59336,59338,59340,59342,59344,59346],{"class":68,"line":11548},[66,59337,53928],{"class":76},[66,59339,53395],{"class":53084},[66,59341,55268],{"class":3793},[66,59343,99],{"class":76},[66,59345,55273],{"class":356},[66,59347,53091],{"class":76},[66,59349,59350,59352,59354,59357,59359],{"class":68,"line":11571},[66,59351,53125],{"class":76},[66,59353,66],{"class":53084},[66,59355,59356],{"class":76},">名字是：\u003C\u002F",[66,59358,66],{"class":53084},[66,59360,53091],{"class":76},[66,59362,59363,59365,59367,59369,59371,59374,59377,59379],{"class":68,"line":11595},[66,59364,53125],{"class":76},[66,59366,53395],{"class":53084},[66,59368,55268],{"class":3793},[66,59370,99],{"class":76},[66,59372,59373],{"class":356},"\"qs\"",[66,59375,59376],{"class":76},">这里显示姓名\u003C\u002F",[66,59378,53395],{"class":53084},[66,59380,53091],{"class":76},[66,59382,59383,59385,59387],{"class":68,"line":11600},[66,59384,54199],{"class":76},[66,59386,53395],{"class":53084},[66,59388,53091],{"class":76},[66,59390,59391,59393,59395,59397,59399,59402],{"class":68,"line":11605},[66,59392,53928],{"class":76},[66,59394,53395],{"class":53084},[66,59396,55268],{"class":3793},[66,59398,99],{"class":76},[66,59400,59401],{"class":356},"\"btns\"",[66,59403,53091],{"class":76},[66,59405,59406,59408,59410,59412,59414,59417,59420,59422],{"class":68,"line":11610},[66,59407,53125],{"class":76},[66,59409,55668],{"class":53084},[66,59411,55268],{"class":3793},[66,59413,99],{"class":76},[66,59415,59416],{"class":356},"\"start\"",[66,59418,59419],{"class":76},">开始\u003C\u002F",[66,59421,55668],{"class":53084},[66,59423,53091],{"class":76},[66,59425,59426,59428,59430,59432,59434,59437,59440,59442],{"class":68,"line":11619},[66,59427,53125],{"class":76},[66,59429,55668],{"class":53084},[66,59431,55268],{"class":3793},[66,59433,99],{"class":76},[66,59435,59436],{"class":356},"\"end\"",[66,59438,59439],{"class":76},">结束\u003C\u002F",[66,59441,55668],{"class":53084},[66,59443,53091],{"class":76},[66,59445,59446,59448,59450],{"class":68,"line":11624},[66,59447,54199],{"class":76},[66,59449,53395],{"class":53084},[66,59451,53091],{"class":76},[66,59453,59454],{"class":68,"line":11630},[66,59455,109],{"emptyLinePlaceholder":108},[66,59457,59458,59460,59462],{"class":68,"line":11651},[66,59459,53928],{"class":76},[66,59461,53597],{"class":53084},[66,59463,53091],{"class":76},[66,59465,59466],{"class":68,"line":11657},[66,59467,59468],{"class":758},"    \u002F\u002F 数据数组\n",[66,59470,59471,59473,59476,59478,59480,59483,59485,59488,59490,59493,59495,59498,59500,59503],{"class":68,"line":11671},[66,59472,13027],{"class":72},[66,59474,59475],{"class":102}," arr",[66,59477,15369],{"class":72},[66,59479,688],{"class":76},[66,59481,59482],{"class":356},"'马超'",[66,59484,307],{"class":76},[66,59486,59487],{"class":356},"'黄忠'",[66,59489,307],{"class":76},[66,59491,59492],{"class":356},"'赵云'",[66,59494,307],{"class":76},[66,59496,59497],{"class":356},"'关羽'",[66,59499,307],{"class":76},[66,59501,59502],{"class":356},"'张飞'",[66,59504,704],{"class":76},[66,59506,59507,59509,59512,59514,59516,59518,59520,59523],{"class":68,"line":11677},[66,59508,13027],{"class":72},[66,59510,59511],{"class":102}," qs",[66,59513,15369],{"class":72},[66,59515,56177],{"class":76},[66,59517,56180],{"class":3793},[66,59519,348],{"class":76},[66,59521,59522],{"class":356},"'.qs'",[66,59524,313],{"class":76},[66,59526,59527],{"class":68,"line":11704},[66,59528,59529],{"class":758},"    \u002F\u002F 1.业务1.开始按钮模块\n",[66,59531,59532,59534,59536,59538,59540,59542,59544,59547],{"class":68,"line":11713},[66,59533,13027],{"class":72},[66,59535,6000],{"class":102},[66,59537,15369],{"class":72},[66,59539,56177],{"class":76},[66,59541,56180],{"class":3793},[66,59543,348],{"class":76},[66,59545,59546],{"class":356},"'.start'",[66,59548,313],{"class":76},[66,59550,59551],{"class":68,"line":11719},[66,59552,59553],{"class":758},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[66,59555,59556,59558,59561,59563],{"class":68,"line":11727},[66,59557,54003],{"class":72},[66,59559,59560],{"class":76}," timerId ",[66,59562,99],{"class":72},[66,59564,197],{"class":102},[66,59566,59567],{"class":68,"line":11732},[66,59568,59569],{"class":758},"    \u002F\u002F 随机号要全局变量\n",[66,59571,59572,59574,59577,59579],{"class":68,"line":18407},[66,59573,54003],{"class":72},[66,59575,59576],{"class":76}," random ",[66,59578,99],{"class":72},[66,59580,197],{"class":102},[66,59582,59583],{"class":68,"line":18413},[66,59584,59585],{"class":758},"    \u002F\u002F 1.1 添加点击事件\n",[66,59587,59588,59591,59594,59596,59599,59601,59603],{"class":68,"line":18436},[66,59589,59590],{"class":76},"    start.",[66,59592,59593],{"class":3793},"addEventListener",[66,59595,348],{"class":76},[66,59597,59598],{"class":356},"'click'",[66,59600,307],{"class":76},[66,59602,56230],{"class":72},[66,59604,56233],{"class":76},[66,59606,59607,59610,59612,59614,59616,59618],{"class":68,"line":18442},[66,59608,59609],{"class":76},"      timerId ",[66,59611,99],{"class":72},[66,59613,56225],{"class":3793},[66,59615,348],{"class":76},[66,59617,56230],{"class":72},[66,59619,56233],{"class":76},[66,59621,59622],{"class":68,"line":18465},[66,59623,59624],{"class":758},"        \u002F\u002F 随机数\n",[66,59626,59627,59630,59632,59635,59638,59641,59643,59645,59647,59649],{"class":68,"line":18479},[66,59628,59629],{"class":76},"        random ",[66,59631,99],{"class":72},[66,59633,59634],{"class":3793}," parseInt",[66,59636,59637],{"class":76},"(Math.",[66,59639,59640],{"class":3793},"random",[66,59642,14855],{"class":76},[66,59644,1208],{"class":72},[66,59646,53749],{"class":76},[66,59648,53752],{"class":102},[66,59650,313],{"class":76},[66,59652,59653,59656,59658],{"class":68,"line":18499},[66,59654,59655],{"class":76},"        qs.innerHTML ",[66,59657,99],{"class":72},[66,59659,59660],{"class":76}," arr[random]\n",[66,59662,59663,59666,59668],{"class":68,"line":18505},[66,59664,59665],{"class":76},"      }, ",[66,59667,2263],{"class":102},[66,59669,313],{"class":76},[66,59671,59672],{"class":68,"line":18516},[66,59673,59674],{"class":758},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[66,59676,59677,59679,59682,59684,59687,59689],{"class":68,"line":18539},[66,59678,56261],{"class":72},[66,59680,59681],{"class":76}," (arr.",[66,59683,53752],{"class":102},[66,59685,59686],{"class":72}," ===",[66,59688,1187],{"class":102},[66,59690,14247],{"class":76},[66,59692,59693],{"class":68,"line":18561},[66,59694,59695],{"class":758},"        \u002F\u002F start.disabled = true\n",[66,59697,59698],{"class":68,"line":18566},[66,59699,59700],{"class":758},"        \u002F\u002F end.disabled = true\n",[66,59702,59703],{"class":68,"line":18572},[66,59704,59705],{"class":758},"        \u002F\u002F 可以合起来写\n",[66,59707,59708,59711,59713,59716,59718],{"class":68,"line":18586},[66,59709,59710],{"class":76},"        start.disabled ",[66,59712,99],{"class":72},[66,59714,59715],{"class":76}," end.disabled ",[66,59717,99],{"class":72},[66,59719,59720],{"class":102}," true\n",[66,59722,59723],{"class":68,"line":18599},[66,59724,54180],{"class":76},[66,59726,59727],{"class":68,"line":18604},[66,59728,35249],{"class":76},[66,59730,59731],{"class":68,"line":18618},[66,59732,59733],{"class":758},"    \u002F\u002F 1.2 关闭按钮模块\n",[66,59735,59736,59738,59740,59742,59744,59746,59748,59751],{"class":68,"line":18623},[66,59737,13027],{"class":72},[66,59739,6016],{"class":102},[66,59741,15369],{"class":72},[66,59743,56177],{"class":76},[66,59745,56180],{"class":3793},[66,59747,348],{"class":76},[66,59749,59750],{"class":356},"'.end'",[66,59752,313],{"class":76},[66,59754,59755,59758,59760,59762,59764,59766,59768],{"class":68,"line":18629},[66,59756,59757],{"class":76},"    end.",[66,59759,59593],{"class":3793},[66,59761,348],{"class":76},[66,59763,59598],{"class":356},[66,59765,307],{"class":76},[66,59767,56230],{"class":72},[66,59769,56233],{"class":76},[66,59771,59772,59775],{"class":68,"line":18634},[66,59773,59774],{"class":3793},"      clearInterval",[66,59776,59777],{"class":76},"(timerId)\n",[66,59779,59780],{"class":68,"line":18648},[66,59781,59782],{"class":758},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[66,59784,59785,59788,59791,59794,59796],{"class":68,"line":18653},[66,59786,59787],{"class":76},"      arr.",[66,59789,59790],{"class":3793},"splice",[66,59792,59793],{"class":76},"(random, ",[66,59795,304],{"class":102},[66,59797,313],{"class":76},[66,59799,59800],{"class":68,"line":18658},[66,59801,35249],{"class":76},[66,59803,59804],{"class":68,"line":18672},[66,59805,109],{"emptyLinePlaceholder":108},[66,59807,59808,59810,59812],{"class":68,"line":18684},[66,59809,54199],{"class":76},[66,59811,53597],{"class":53084},[66,59813,53091],{"class":76},[66,59815,59816,59818,59820],{"class":68,"line":18689},[66,59817,53569],{"class":76},[66,59819,53584],{"class":53084},[66,59821,53091],{"class":76},[66,59823,59824],{"class":68,"line":18702},[66,59825,109],{"emptyLinePlaceholder":108},[66,59827,59828,59830,59832],{"class":68,"line":18707},[66,59829,53569],{"class":76},[66,59831,52419],{"class":53084},[66,59833,53091],{"class":76},[19,59835,59836],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[484,59838,59840],{"id":59839},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[57,59842,59844],{"className":52417,"code":59843,"language":52419,"meta":62,"style":62},"\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",[23,59845,59846,59856,59870,59874,59882,59896,59916,59928,59936,59940,59948,59960,59968,59987,60004,60020,60030,60034,60042,60050,60054],{"__ignoreMap":62},[66,59847,59848,59850,59852,59854],{"class":68,"line":69},[66,59849,53081],{"class":76},[66,59851,53085],{"class":53084},[66,59853,53088],{"class":3793},[66,59855,53091],{"class":76},[66,59857,59858,59860,59862,59864,59866,59868],{"class":68,"line":80},[66,59859,413],{"class":76},[66,59861,52419],{"class":53084},[66,59863,53100],{"class":3793},[66,59865,99],{"class":76},[66,59867,53105],{"class":356},[66,59869,53091],{"class":76},[66,59871,59872],{"class":68,"line":112},[66,59873,109],{"emptyLinePlaceholder":108},[66,59875,59876,59878,59880],{"class":68,"line":129},[66,59877,413],{"class":76},[66,59879,53118],{"class":53084},[66,59881,53091],{"class":76},[66,59883,59884,59886,59888,59890,59892,59894],{"class":68,"line":138},[66,59885,53928],{"class":76},[66,59887,53128],{"class":53084},[66,59889,53131],{"class":3793},[66,59891,99],{"class":76},[66,59893,53136],{"class":356},[66,59895,53091],{"class":76},[66,59897,59898,59900,59902,59904,59906,59908,59910,59912,59914],{"class":68,"line":227},[66,59899,53928],{"class":76},[66,59901,53128],{"class":53084},[66,59903,16724],{"class":3793},[66,59905,99],{"class":76},[66,59907,53175],{"class":356},[66,59909,53155],{"class":3793},[66,59911,99],{"class":76},[66,59913,53182],{"class":356},[66,59915,53091],{"class":76},[66,59917,59918,59920,59922,59924,59926],{"class":68,"line":236},[66,59919,53928],{"class":76},[66,59921,53191],{"class":53084},[66,59923,53194],{"class":76},[66,59925,53191],{"class":53084},[66,59927,53091],{"class":76},[66,59929,59930,59932,59934],{"class":68,"line":241},[66,59931,53569],{"class":76},[66,59933,53118],{"class":53084},[66,59935,53091],{"class":76},[66,59937,59938],{"class":68,"line":372},[66,59939,109],{"emptyLinePlaceholder":108},[66,59941,59942,59944,59946],{"class":68,"line":377},[66,59943,413],{"class":76},[66,59945,53584],{"class":53084},[66,59947,53091],{"class":76},[66,59949,59950,59952,59954,59956,59958],{"class":68,"line":392},[66,59951,53928],{"class":76},[66,59953,55668],{"class":53084},[66,59955,55674],{"class":76},[66,59957,55668],{"class":53084},[66,59959,53091],{"class":76},[66,59961,59962,59964,59966],{"class":68,"line":405},[66,59963,53928],{"class":76},[66,59965,53597],{"class":53084},[66,59967,53091],{"class":76},[66,59969,59970,59972,59974,59976,59978,59980,59982,59985],{"class":68,"line":418},[66,59971,13027],{"class":72},[66,59973,56172],{"class":102},[66,59975,15369],{"class":72},[66,59977,56177],{"class":76},[66,59979,56180],{"class":3793},[66,59981,348],{"class":76},[66,59983,59984],{"class":356},"'button'",[66,59986,313],{"class":76},[66,59988,59989,59992,59994,59996,59998,60000,60002],{"class":68,"line":430},[66,59990,59991],{"class":76},"    btn.",[66,59993,59593],{"class":3793},[66,59995,348],{"class":76},[66,59997,59598],{"class":356},[66,59999,307],{"class":76},[66,60001,56230],{"class":72},[66,60003,56233],{"class":76},[66,60005,60006,60009,60011,60013,60016,60018],{"class":68,"line":438},[66,60007,60008],{"class":72},"      const",[66,60010,4066],{"class":102},[66,60012,15369],{"class":72},[66,60014,60015],{"class":76}," Math.",[66,60017,59640],{"class":3793},[66,60019,1253],{"class":76},[66,60021,60022,60025,60028],{"class":68,"line":465},[66,60023,60024],{"class":76},"      console.",[66,60026,60027],{"class":3793},"log",[66,60029,2012],{"class":76},[66,60031,60032],{"class":68,"line":1805},[66,60033,35249],{"class":76},[66,60035,60036,60038,60040],{"class":68,"line":1817},[66,60037,54199],{"class":76},[66,60039,53597],{"class":53084},[66,60041,53091],{"class":76},[66,60043,60044,60046,60048],{"class":68,"line":1822},[66,60045,53569],{"class":76},[66,60047,53584],{"class":53084},[66,60049,53091],{"class":76},[66,60051,60052],{"class":68,"line":1829},[66,60053,109],{"emptyLinePlaceholder":108},[66,60055,60056,60058,60060],{"class":68,"line":3529},[66,60057,53569],{"class":76},[66,60059,52419],{"class":53084},[66,60061,53091],{"class":76},[19,60063,60064],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,60066,60067],{},"常量不可以重新赋值",[19,60069,60070],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[57,60072,60074],{"className":52417,"code":60073,"language":52419,"meta":62,"style":62},"\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",[23,60075,60076,60086,60100,60104,60112,60126,60146,60158,60166,60170,60178,60190,60198,60209,60227,60243,60257,60265,60269,60277,60285,60289],{"__ignoreMap":62},[66,60077,60078,60080,60082,60084],{"class":68,"line":69},[66,60079,53081],{"class":76},[66,60081,53085],{"class":53084},[66,60083,53088],{"class":3793},[66,60085,53091],{"class":76},[66,60087,60088,60090,60092,60094,60096,60098],{"class":68,"line":80},[66,60089,413],{"class":76},[66,60091,52419],{"class":53084},[66,60093,53100],{"class":3793},[66,60095,99],{"class":76},[66,60097,53105],{"class":356},[66,60099,53091],{"class":76},[66,60101,60102],{"class":68,"line":112},[66,60103,109],{"emptyLinePlaceholder":108},[66,60105,60106,60108,60110],{"class":68,"line":129},[66,60107,413],{"class":76},[66,60109,53118],{"class":53084},[66,60111,53091],{"class":76},[66,60113,60114,60116,60118,60120,60122,60124],{"class":68,"line":138},[66,60115,53928],{"class":76},[66,60117,53128],{"class":53084},[66,60119,53131],{"class":3793},[66,60121,99],{"class":76},[66,60123,53136],{"class":356},[66,60125,53091],{"class":76},[66,60127,60128,60130,60132,60134,60136,60138,60140,60142,60144],{"class":68,"line":227},[66,60129,53928],{"class":76},[66,60131,53128],{"class":53084},[66,60133,16724],{"class":3793},[66,60135,99],{"class":76},[66,60137,53175],{"class":356},[66,60139,53155],{"class":3793},[66,60141,99],{"class":76},[66,60143,53182],{"class":356},[66,60145,53091],{"class":76},[66,60147,60148,60150,60152,60154,60156],{"class":68,"line":236},[66,60149,53928],{"class":76},[66,60151,53191],{"class":53084},[66,60153,53194],{"class":76},[66,60155,53191],{"class":53084},[66,60157,53091],{"class":76},[66,60159,60160,60162,60164],{"class":68,"line":241},[66,60161,53569],{"class":76},[66,60163,53118],{"class":53084},[66,60165,53091],{"class":76},[66,60167,60168],{"class":68,"line":372},[66,60169,109],{"emptyLinePlaceholder":108},[66,60171,60172,60174,60176],{"class":68,"line":377},[66,60173,413],{"class":76},[66,60175,53584],{"class":53084},[66,60177,53091],{"class":76},[66,60179,60180,60182,60184,60186,60188],{"class":68,"line":392},[66,60181,53928],{"class":76},[66,60183,55668],{"class":53084},[66,60185,55674],{"class":76},[66,60187,55668],{"class":53084},[66,60189,53091],{"class":76},[66,60191,60192,60194,60196],{"class":68,"line":405},[66,60193,53928],{"class":76},[66,60195,53597],{"class":53084},[66,60197,53091],{"class":76},[66,60199,60200,60202,60204,60206],{"class":68,"line":418},[66,60201,13027],{"class":72},[66,60203,4066],{"class":102},[66,60205,15369],{"class":72},[66,60207,60208],{"class":102}," 10\n",[66,60210,60211,60213,60215,60217,60219,60221,60223,60225],{"class":68,"line":430},[66,60212,13027],{"class":72},[66,60214,56172],{"class":102},[66,60216,15369],{"class":72},[66,60218,56177],{"class":76},[66,60220,56180],{"class":3793},[66,60222,348],{"class":76},[66,60224,59984],{"class":356},[66,60226,313],{"class":76},[66,60228,60229,60231,60233,60235,60237,60239,60241],{"class":68,"line":438},[66,60230,59991],{"class":76},[66,60232,59593],{"class":3793},[66,60234,348],{"class":76},[66,60236,59598],{"class":356},[66,60238,307],{"class":76},[66,60240,56230],{"class":72},[66,60242,56233],{"class":76},[66,60244,60245,60247,60249,60251,60253,60255],{"class":68,"line":465},[66,60246,60008],{"class":72},[66,60248,4066],{"class":102},[66,60250,15369],{"class":72},[66,60252,60015],{"class":76},[66,60254,59640],{"class":3793},[66,60256,1253],{"class":76},[66,60258,60259,60261,60263],{"class":68,"line":1805},[66,60260,60024],{"class":76},[66,60262,60027],{"class":3793},[66,60264,2012],{"class":76},[66,60266,60267],{"class":68,"line":1817},[66,60268,35249],{"class":76},[66,60270,60271,60273,60275],{"class":68,"line":1822},[66,60272,54199],{"class":76},[66,60274,53597],{"class":53084},[66,60276,53091],{"class":76},[66,60278,60279,60281,60283],{"class":68,"line":1829},[66,60280,53569],{"class":76},[66,60282,53584],{"class":53084},[66,60284,53091],{"class":76},[66,60286,60287],{"class":68,"line":3529},[66,60288,109],{"emptyLinePlaceholder":108},[66,60290,60291,60293,60295],{"class":68,"line":3557},[66,60292,53569],{"class":76},[66,60294,52419],{"class":53084},[66,60296,53091],{"class":76},[19,60298,60299],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[57,60301,60303],{"className":52417,"code":60302,"language":52419,"meta":62,"style":62},"\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",[23,60304,60305,60315,60329,60333,60341,60355,60375,60387,60395,60399,60407,60419,60427,60437,60455,60471,60484,60492,60496,60504,60512,60516],{"__ignoreMap":62},[66,60306,60307,60309,60311,60313],{"class":68,"line":69},[66,60308,53081],{"class":76},[66,60310,53085],{"class":53084},[66,60312,53088],{"class":3793},[66,60314,53091],{"class":76},[66,60316,60317,60319,60321,60323,60325,60327],{"class":68,"line":80},[66,60318,413],{"class":76},[66,60320,52419],{"class":53084},[66,60322,53100],{"class":3793},[66,60324,99],{"class":76},[66,60326,53105],{"class":356},[66,60328,53091],{"class":76},[66,60330,60331],{"class":68,"line":112},[66,60332,109],{"emptyLinePlaceholder":108},[66,60334,60335,60337,60339],{"class":68,"line":129},[66,60336,413],{"class":76},[66,60338,53118],{"class":53084},[66,60340,53091],{"class":76},[66,60342,60343,60345,60347,60349,60351,60353],{"class":68,"line":138},[66,60344,53928],{"class":76},[66,60346,53128],{"class":53084},[66,60348,53131],{"class":3793},[66,60350,99],{"class":76},[66,60352,53136],{"class":356},[66,60354,53091],{"class":76},[66,60356,60357,60359,60361,60363,60365,60367,60369,60371,60373],{"class":68,"line":227},[66,60358,53928],{"class":76},[66,60360,53128],{"class":53084},[66,60362,16724],{"class":3793},[66,60364,99],{"class":76},[66,60366,53175],{"class":356},[66,60368,53155],{"class":3793},[66,60370,99],{"class":76},[66,60372,53182],{"class":356},[66,60374,53091],{"class":76},[66,60376,60377,60379,60381,60383,60385],{"class":68,"line":236},[66,60378,53928],{"class":76},[66,60380,53191],{"class":53084},[66,60382,53194],{"class":76},[66,60384,53191],{"class":53084},[66,60386,53091],{"class":76},[66,60388,60389,60391,60393],{"class":68,"line":241},[66,60390,53569],{"class":76},[66,60392,53118],{"class":53084},[66,60394,53091],{"class":76},[66,60396,60397],{"class":68,"line":372},[66,60398,109],{"emptyLinePlaceholder":108},[66,60400,60401,60403,60405],{"class":68,"line":377},[66,60402,413],{"class":76},[66,60404,53584],{"class":53084},[66,60406,53091],{"class":76},[66,60408,60409,60411,60413,60415,60417],{"class":68,"line":392},[66,60410,53928],{"class":76},[66,60412,55668],{"class":53084},[66,60414,55674],{"class":76},[66,60416,55668],{"class":53084},[66,60418,53091],{"class":76},[66,60420,60421,60423,60425],{"class":68,"line":405},[66,60422,53928],{"class":76},[66,60424,53597],{"class":53084},[66,60426,53091],{"class":76},[66,60428,60429,60431,60433,60435],{"class":68,"line":418},[66,60430,13027],{"class":72},[66,60432,4066],{"class":102},[66,60434,15369],{"class":72},[66,60436,60208],{"class":102},[66,60438,60439,60441,60443,60445,60447,60449,60451,60453],{"class":68,"line":430},[66,60440,13027],{"class":72},[66,60442,56172],{"class":102},[66,60444,15369],{"class":72},[66,60446,56177],{"class":76},[66,60448,56180],{"class":3793},[66,60450,348],{"class":76},[66,60452,59984],{"class":356},[66,60454,313],{"class":76},[66,60456,60457,60459,60461,60463,60465,60467,60469],{"class":68,"line":438},[66,60458,59991],{"class":76},[66,60460,59593],{"class":3793},[66,60462,348],{"class":76},[66,60464,59598],{"class":356},[66,60466,307],{"class":76},[66,60468,56230],{"class":72},[66,60470,56233],{"class":76},[66,60472,60473,60476,60478,60480,60482],{"class":68,"line":465},[66,60474,60475],{"class":76},"      num ",[66,60477,99],{"class":72},[66,60479,60015],{"class":76},[66,60481,59640],{"class":3793},[66,60483,1253],{"class":76},[66,60485,60486,60488,60490],{"class":68,"line":1805},[66,60487,60024],{"class":76},[66,60489,60027],{"class":3793},[66,60491,2012],{"class":76},[66,60493,60494],{"class":68,"line":1817},[66,60495,35249],{"class":76},[66,60497,60498,60500,60502],{"class":68,"line":1822},[66,60499,54199],{"class":76},[66,60501,53597],{"class":53084},[66,60503,53091],{"class":76},[66,60505,60506,60508,60510],{"class":68,"line":1829},[66,60507,53569],{"class":76},[66,60509,53584],{"class":53084},[66,60511,53091],{"class":76},[66,60513,60514],{"class":68,"line":3529},[66,60515,109],{"emptyLinePlaceholder":108},[66,60517,60518,60520,60522],{"class":68,"line":3557},[66,60519,53569],{"class":76},[66,60521,52419],{"class":53084},[66,60523,53091],{"class":76},[19,60525,60526],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[484,60528,60530],{"id":60529},"_324-事件监听版本","3.2.4 事件监听版本",[19,60532,60533],{},[3304,60534],{"alt":62,"src":60535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,60537,60538],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,60540,60541],{},"这种方式会覆盖前边的事件监听:",[57,60543,60545],{"className":52417,"code":60544,"language":52419,"meta":62,"style":62},"\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",[23,60546,60547,60557,60571,60575,60583,60597,60617,60629,60637,60641,60649,60661,60669,60687,60701,60712,60716,60728,60738,60742,60750,60758,60762],{"__ignoreMap":62},[66,60548,60549,60551,60553,60555],{"class":68,"line":69},[66,60550,53081],{"class":76},[66,60552,53085],{"class":53084},[66,60554,53088],{"class":3793},[66,60556,53091],{"class":76},[66,60558,60559,60561,60563,60565,60567,60569],{"class":68,"line":80},[66,60560,413],{"class":76},[66,60562,52419],{"class":53084},[66,60564,53100],{"class":3793},[66,60566,99],{"class":76},[66,60568,53105],{"class":356},[66,60570,53091],{"class":76},[66,60572,60573],{"class":68,"line":112},[66,60574,109],{"emptyLinePlaceholder":108},[66,60576,60577,60579,60581],{"class":68,"line":129},[66,60578,413],{"class":76},[66,60580,53118],{"class":53084},[66,60582,53091],{"class":76},[66,60584,60585,60587,60589,60591,60593,60595],{"class":68,"line":138},[66,60586,53928],{"class":76},[66,60588,53128],{"class":53084},[66,60590,53131],{"class":3793},[66,60592,99],{"class":76},[66,60594,53136],{"class":356},[66,60596,53091],{"class":76},[66,60598,60599,60601,60603,60605,60607,60609,60611,60613,60615],{"class":68,"line":227},[66,60600,53928],{"class":76},[66,60602,53128],{"class":53084},[66,60604,16724],{"class":3793},[66,60606,99],{"class":76},[66,60608,53175],{"class":356},[66,60610,53155],{"class":3793},[66,60612,99],{"class":76},[66,60614,53182],{"class":356},[66,60616,53091],{"class":76},[66,60618,60619,60621,60623,60625,60627],{"class":68,"line":236},[66,60620,53928],{"class":76},[66,60622,53191],{"class":53084},[66,60624,53194],{"class":76},[66,60626,53191],{"class":53084},[66,60628,53091],{"class":76},[66,60630,60631,60633,60635],{"class":68,"line":241},[66,60632,53569],{"class":76},[66,60634,53118],{"class":53084},[66,60636,53091],{"class":76},[66,60638,60639],{"class":68,"line":372},[66,60640,109],{"emptyLinePlaceholder":108},[66,60642,60643,60645,60647],{"class":68,"line":377},[66,60644,413],{"class":76},[66,60646,53584],{"class":53084},[66,60648,53091],{"class":76},[66,60650,60651,60653,60655,60657,60659],{"class":68,"line":392},[66,60652,53928],{"class":76},[66,60654,55668],{"class":53084},[66,60656,55674],{"class":76},[66,60658,55668],{"class":53084},[66,60660,53091],{"class":76},[66,60662,60663,60665,60667],{"class":68,"line":405},[66,60664,53928],{"class":76},[66,60666,53597],{"class":53084},[66,60668,53091],{"class":76},[66,60670,60671,60673,60675,60677,60679,60681,60683,60685],{"class":68,"line":418},[66,60672,13027],{"class":72},[66,60674,56172],{"class":102},[66,60676,15369],{"class":72},[66,60678,56177],{"class":76},[66,60680,56180],{"class":3793},[66,60682,348],{"class":76},[66,60684,59984],{"class":356},[66,60686,313],{"class":76},[66,60688,60689,60691,60694,60696,60699],{"class":68,"line":430},[66,60690,59991],{"class":76},[66,60692,60693],{"class":3793},"onclick",[66,60695,15369],{"class":72},[66,60697,60698],{"class":72}," function",[66,60700,56233],{"class":76},[66,60702,60703,60706,60708,60710],{"class":68,"line":438},[66,60704,60705],{"class":3793},"      alert",[66,60707,348],{"class":76},[66,60709,2452],{"class":102},[66,60711,313],{"class":76},[66,60713,60714],{"class":68,"line":465},[66,60715,4013],{"class":76},[66,60717,60718,60720,60722,60724,60726],{"class":68,"line":1805},[66,60719,59991],{"class":76},[66,60721,60693],{"class":3793},[66,60723,15369],{"class":72},[66,60725,60698],{"class":72},[66,60727,56233],{"class":76},[66,60729,60730,60732,60734,60736],{"class":68,"line":1817},[66,60731,60705],{"class":3793},[66,60733,348],{"class":76},[66,60735,2729],{"class":102},[66,60737,313],{"class":76},[66,60739,60740],{"class":68,"line":1822},[66,60741,4013],{"class":76},[66,60743,60744,60746,60748],{"class":68,"line":1829},[66,60745,54199],{"class":76},[66,60747,53597],{"class":53084},[66,60749,53091],{"class":76},[66,60751,60752,60754,60756],{"class":68,"line":3529},[66,60753,53569],{"class":76},[66,60755,53584],{"class":53084},[66,60757,53091],{"class":76},[66,60759,60760],{"class":68,"line":3557},[66,60761,109],{"emptyLinePlaceholder":108},[66,60763,60764,60766,60768],{"class":68,"line":3562},[66,60765,53569],{"class":76},[66,60767,52419],{"class":53084},[66,60769,53091],{"class":76},[19,60771,60772],{},"只要点击就输出结果为22,前边11被覆盖了",[57,60774,60776],{"className":52417,"code":60775,"language":52419,"meta":62,"style":62},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[23,60777,60778,60783,60788,60792,60797,60802],{"__ignoreMap":62},[66,60779,60780],{"class":68,"line":69},[66,60781,60782],{"class":76},"  btn.addEventListener('click', function () {\n",[66,60784,60785],{"class":68,"line":80},[66,60786,60787],{"class":76},"      alert(11)\n",[66,60789,60790],{"class":68,"line":112},[66,60791,35249],{"class":76},[66,60793,60794],{"class":68,"line":129},[66,60795,60796],{"class":76},"    btn.addEventListener('click', function () {\n",[66,60798,60799],{"class":68,"line":138},[66,60800,60801],{"class":76},"      alert(22)\n",[66,60803,60804],{"class":68,"line":227},[66,60805,35249],{"class":76},[19,60807,60808],{},"点击第一次输出11,第二次点击为22",[484,60810,60812],{"id":60811},"_325-事件类型","3.2.5 事件类型",[19,60814,60815],{},[3304,60816],{"alt":62,"src":60817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[23801,60819,60821],{"id":60820},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,60823,60824],{},"补充知识:",[19,60826,60827],{},"轮播图自动播放模块,可以使用",[19,60829,60830],{},"let timerId = setInterval(function () {",[19,60832,60833],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,60835,60836],{},"用js方法模拟进行点击事件,click必须加()",[19,60838,60839],{},"next.click()",[19,60841,60842],{},"}, 1000)",[19,60844,60845],{},[3304,60846],{"alt":62,"src":60847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[57,60849,60851],{"className":54849,"code":60850,"language":54851,"meta":62,"style":62},"\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",[23,60852,60853,60857,60867,60881,60885,60893,60908,60928,60948,60961,60969,60974,60979,60983,60987,60992,60997,61002,61007,61011,61015,61020,61025,61030,61034,61038,61043,61047,61052,61057,61061,61065,61070,61075,61080,61085,61090,61094,61098,61103,61108,61113,61118,61123,61127,61131,61136,61141,61146,61151,61156,61161,61166,61171,61176,61181,61185,61189,61194,61199,61203,61207,61212,61217,61221,61226,61231,61235,61239,61244,61248,61253,61258,61262,61267,61271,61275,61280,61285,61290,61295,61300,61305,61310,61314,61318,61322,61327,61332,61337,61342,61346,61354,61362,61366,61374,61389,61403,61424,61432,61446,61459,61474,61493,61505,61517,61529,61541,61553,61565,61577,61585,61600,61624,61648,61656,61664,61672,61680,61685,61690,61695,61700,61705,61710,61715,61720,61725,61730,61734,61739,61744,61749,61754,61759,61764,61769,61774,61779,61783,61788,61793,61798,61803,61808,61813,61818,61823,61828,61833,61838,61843,61847,61851,61856,61861,61866,61870,61875,61880,61885,61890,61895,61899,61904,61908,61912,61916,61920,61924,61928,61933,61938,61943,61948,61953,61958,61963,61968,61973,61977,61981,61986,61991,61996,62001,62006,62010,62015,62020,62025,62030,62035,62040,62044,62048,62053,62057,62062,62066,62071,62076,62081,62086,62091,62096,62100,62108,62116,62120],{"__ignoreMap":62},[66,60854,60855],{"class":68,"line":69},[66,60856,109],{"emptyLinePlaceholder":108},[66,60858,60859,60861,60863,60865],{"class":68,"line":80},[66,60860,53081],{"class":76},[66,60862,53085],{"class":72},[66,60864,53088],{"class":102},[66,60866,53091],{"class":76},[66,60868,60869,60871,60873,60875,60877,60879],{"class":68,"line":112},[66,60870,413],{"class":76},[66,60872,52419],{"class":53084},[66,60874,53100],{"class":3793},[66,60876,99],{"class":76},[66,60878,53105],{"class":356},[66,60880,53091],{"class":76},[66,60882,60883],{"class":68,"line":129},[66,60884,109],{"emptyLinePlaceholder":108},[66,60886,60887,60889,60891],{"class":68,"line":138},[66,60888,413],{"class":76},[66,60890,53118],{"class":53084},[66,60892,53091],{"class":76},[66,60894,60895,60897,60899,60901,60903,60905],{"class":68,"line":227},[66,60896,53928],{"class":76},[66,60898,53128],{"class":53084},[66,60900,53131],{"class":3793},[66,60902,99],{"class":76},[66,60904,53136],{"class":356},[66,60906,60907],{"class":76}," \u002F>\n",[66,60909,60910,60912,60914,60916,60918,60920,60922,60924,60926],{"class":68,"line":236},[66,60911,53928],{"class":76},[66,60913,53128],{"class":53084},[66,60915,53147],{"class":3793},[66,60917,99],{"class":76},[66,60919,53152],{"class":356},[66,60921,53155],{"class":3793},[66,60923,99],{"class":76},[66,60925,53160],{"class":356},[66,60927,60907],{"class":76},[66,60929,60930,60932,60934,60936,60938,60940,60942,60944,60946],{"class":68,"line":241},[66,60931,53928],{"class":76},[66,60933,53128],{"class":53084},[66,60935,16724],{"class":3793},[66,60937,99],{"class":76},[66,60939,53175],{"class":356},[66,60941,53155],{"class":3793},[66,60943,99],{"class":76},[66,60945,53182],{"class":356},[66,60947,60907],{"class":76},[66,60949,60950,60952,60954,60957,60959],{"class":68,"line":372},[66,60951,53928],{"class":76},[66,60953,53191],{"class":53084},[66,60955,60956],{"class":76},">轮播图点击切换\u003C\u002F",[66,60958,53191],{"class":53084},[66,60960,53091],{"class":76},[66,60962,60963,60965,60967],{"class":68,"line":377},[66,60964,53928],{"class":76},[66,60966,1903],{"class":53084},[66,60968,53091],{"class":76},[66,60970,60971],{"class":68,"line":392},[66,60972,60973],{"class":76},"    * {\n",[66,60975,60976],{"class":68,"line":405},[66,60977,60978],{"class":76},"      box-sizing: border-box;\n",[66,60980,60981],{"class":68,"line":418},[66,60982,4013],{"class":76},[66,60984,60985],{"class":68,"line":430},[66,60986,109],{"emptyLinePlaceholder":108},[66,60988,60989],{"class":68,"line":438},[66,60990,60991],{"class":76},"    .slider {\n",[66,60993,60994],{"class":68,"line":465},[66,60995,60996],{"class":76},"      width: 560px;\n",[66,60998,60999],{"class":68,"line":1805},[66,61000,61001],{"class":76},"      height: 400px;\n",[66,61003,61004],{"class":68,"line":1817},[66,61005,61006],{"class":76},"      overflow: hidden;\n",[66,61008,61009],{"class":68,"line":1822},[66,61010,4013],{"class":76},[66,61012,61013],{"class":68,"line":1829},[66,61014,109],{"emptyLinePlaceholder":108},[66,61016,61017],{"class":68,"line":3529},[66,61018,61019],{"class":76},"    .slider-wrapper {\n",[66,61021,61022],{"class":68,"line":3557},[66,61023,61024],{"class":76},"      width: 100%;\n",[66,61026,61027],{"class":68,"line":3562},[66,61028,61029],{"class":76},"      height: 320px;\n",[66,61031,61032],{"class":68,"line":3579},[66,61033,4013],{"class":76},[66,61035,61036],{"class":68,"line":3584},[66,61037,109],{"emptyLinePlaceholder":108},[66,61039,61040],{"class":68,"line":3589},[66,61041,61042],{"class":76},"    .slider-wrapper img {\n",[66,61044,61045],{"class":68,"line":3594},[66,61046,61024],{"class":76},[66,61048,61049],{"class":68,"line":3608},[66,61050,61051],{"class":76},"      height: 100%;\n",[66,61053,61054],{"class":68,"line":3613},[66,61055,61056],{"class":76},"      display: block;\n",[66,61058,61059],{"class":68,"line":4401},[66,61060,4013],{"class":76},[66,61062,61063],{"class":68,"line":4415},[66,61064,109],{"emptyLinePlaceholder":108},[66,61066,61067],{"class":68,"line":4423},[66,61068,61069],{"class":76},"    .slider-footer {\n",[66,61071,61072],{"class":68,"line":4428},[66,61073,61074],{"class":76},"      height: 80px;\n",[66,61076,61077],{"class":68,"line":4434},[66,61078,61079],{"class":76},"      background-color: rgb(100, 67, 68);\n",[66,61081,61082],{"class":68,"line":4440},[66,61083,61084],{"class":76},"      padding: 12px 12px 0 12px;\n",[66,61086,61087],{"class":68,"line":4445},[66,61088,61089],{"class":76},"      position: relative;\n",[66,61091,61092],{"class":68,"line":9759},[66,61093,4013],{"class":76},[66,61095,61096],{"class":68,"line":9783},[66,61097,109],{"emptyLinePlaceholder":108},[66,61099,61100],{"class":68,"line":9788},[66,61101,61102],{"class":76},"    .slider-footer .toggle {\n",[66,61104,61105],{"class":68,"line":9794},[66,61106,61107],{"class":76},"      position: absolute;\n",[66,61109,61110],{"class":68,"line":9821},[66,61111,61112],{"class":76},"      right: 0;\n",[66,61114,61115],{"class":68,"line":9826},[66,61116,61117],{"class":76},"      top: 12px;\n",[66,61119,61120],{"class":68,"line":9832},[66,61121,61122],{"class":76},"      display: flex;\n",[66,61124,61125],{"class":68,"line":9844},[66,61126,4013],{"class":76},[66,61128,61129],{"class":68,"line":9856},[66,61130,109],{"emptyLinePlaceholder":108},[66,61132,61133],{"class":68,"line":9868},[66,61134,61135],{"class":76},"    .slider-footer .toggle button {\n",[66,61137,61138],{"class":68,"line":11523},[66,61139,61140],{"class":76},"      margin-right: 12px;\n",[66,61142,61143],{"class":68,"line":11548},[66,61144,61145],{"class":76},"      width: 28px;\n",[66,61147,61148],{"class":68,"line":11571},[66,61149,61150],{"class":76},"      height: 28px;\n",[66,61152,61153],{"class":68,"line":11595},[66,61154,61155],{"class":76},"      appearance: none;\n",[66,61157,61158],{"class":68,"line":11600},[66,61159,61160],{"class":76},"      border: none;\n",[66,61162,61163],{"class":68,"line":11605},[66,61164,61165],{"class":76},"      background: rgba(255, 255, 255, 0.1);\n",[66,61167,61168],{"class":68,"line":11610},[66,61169,61170],{"class":76},"      color: #fff;\n",[66,61172,61173],{"class":68,"line":11619},[66,61174,61175],{"class":76},"      border-radius: 4px;\n",[66,61177,61178],{"class":68,"line":11624},[66,61179,61180],{"class":76},"      cursor: pointer;\n",[66,61182,61183],{"class":68,"line":11630},[66,61184,4013],{"class":76},[66,61186,61187],{"class":68,"line":11651},[66,61188,109],{"emptyLinePlaceholder":108},[66,61190,61191],{"class":68,"line":11657},[66,61192,61193],{"class":76},"    .slider-footer .toggle button:hover {\n",[66,61195,61196],{"class":68,"line":11671},[66,61197,61198],{"class":76},"      background: rgba(255, 255, 255, 0.2);\n",[66,61200,61201],{"class":68,"line":11677},[66,61202,4013],{"class":76},[66,61204,61205],{"class":68,"line":11704},[66,61206,109],{"emptyLinePlaceholder":108},[66,61208,61209],{"class":68,"line":11713},[66,61210,61211],{"class":76},"    .slider-footer p {\n",[66,61213,61214],{"class":68,"line":11719},[66,61215,61216],{"class":76},"      margin: 0;\n",[66,61218,61219],{"class":68,"line":11727},[66,61220,61170],{"class":76},[66,61222,61223],{"class":68,"line":11732},[66,61224,61225],{"class":76},"      font-size: 18px;\n",[66,61227,61228],{"class":68,"line":18407},[66,61229,61230],{"class":76},"      margin-bottom: 10px;\n",[66,61232,61233],{"class":68,"line":18413},[66,61234,4013],{"class":76},[66,61236,61237],{"class":68,"line":18436},[66,61238,109],{"emptyLinePlaceholder":108},[66,61240,61241],{"class":68,"line":18442},[66,61242,61243],{"class":76},"    .slider-indicator {\n",[66,61245,61246],{"class":68,"line":18465},[66,61247,61216],{"class":76},[66,61249,61250],{"class":68,"line":18479},[66,61251,61252],{"class":76},"      padding: 0;\n",[66,61254,61255],{"class":68,"line":18499},[66,61256,61257],{"class":76},"      list-style: none;\n",[66,61259,61260],{"class":68,"line":18505},[66,61261,61122],{"class":76},[66,61263,61264],{"class":68,"line":18516},[66,61265,61266],{"class":76},"      align-items: center;\n",[66,61268,61269],{"class":68,"line":18539},[66,61270,4013],{"class":76},[66,61272,61273],{"class":68,"line":18561},[66,61274,109],{"emptyLinePlaceholder":108},[66,61276,61277],{"class":68,"line":18566},[66,61278,61279],{"class":76},"    .slider-indicator li {\n",[66,61281,61282],{"class":68,"line":18572},[66,61283,61284],{"class":76},"      width: 8px;\n",[66,61286,61287],{"class":68,"line":18586},[66,61288,61289],{"class":76},"      height: 8px;\n",[66,61291,61292],{"class":68,"line":18599},[66,61293,61294],{"class":76},"      margin: 4px;\n",[66,61296,61297],{"class":68,"line":18604},[66,61298,61299],{"class":76},"      border-radius: 50%;\n",[66,61301,61302],{"class":68,"line":18618},[66,61303,61304],{"class":76},"      background: #fff;\n",[66,61306,61307],{"class":68,"line":18623},[66,61308,61309],{"class":76},"      opacity: 0.4;\n",[66,61311,61312],{"class":68,"line":18629},[66,61313,61180],{"class":76},[66,61315,61316],{"class":68,"line":18634},[66,61317,4013],{"class":76},[66,61319,61320],{"class":68,"line":18648},[66,61321,109],{"emptyLinePlaceholder":108},[66,61323,61324],{"class":68,"line":18653},[66,61325,61326],{"class":76},"    .slider-indicator li.active {\n",[66,61328,61329],{"class":68,"line":18658},[66,61330,61331],{"class":76},"      width: 12px;\n",[66,61333,61334],{"class":68,"line":18672},[66,61335,61336],{"class":76},"      height: 12px;\n",[66,61338,61339],{"class":68,"line":18684},[66,61340,61341],{"class":76},"      opacity: 1;\n",[66,61343,61344],{"class":68,"line":18689},[66,61345,4013],{"class":76},[66,61347,61348,61350,61352],{"class":68,"line":18702},[66,61349,54199],{"class":76},[66,61351,1903],{"class":53084},[66,61353,53091],{"class":76},[66,61355,61356,61358,61360],{"class":68,"line":18707},[66,61357,53569],{"class":76},[66,61359,53118],{"class":53084},[66,61361,53091],{"class":76},[66,61363,61364],{"class":68,"line":18712},[66,61365,109],{"emptyLinePlaceholder":108},[66,61367,61368,61370,61372],{"class":68,"line":18717},[66,61369,413],{"class":76},[66,61371,53584],{"class":53084},[66,61373,53091],{"class":76},[66,61375,61376,61378,61380,61382,61384,61387],{"class":68,"line":18730},[66,61377,53928],{"class":76},[66,61379,53395],{"class":53084},[66,61381,55268],{"class":3793},[66,61383,99],{"class":76},[66,61385,61386],{"class":356},"\"slider\"",[66,61388,53091],{"class":76},[66,61390,61391,61393,61395,61397,61399,61401],{"class":68,"line":18735},[66,61392,53125],{"class":76},[66,61394,53395],{"class":53084},[66,61396,55268],{"class":3793},[66,61398,99],{"class":76},[66,61400,57008],{"class":356},[66,61402,53091],{"class":76},[66,61404,61405,61407,61409,61411,61413,61416,61418,61420,61422],{"class":68,"line":34423},[66,61406,57015],{"class":76},[66,61408,3304],{"class":53084},[66,61410,57020],{"class":3793},[66,61412,99],{"class":76},[66,61414,61415],{"class":356},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[66,61417,57028],{"class":3793},[66,61419,99],{"class":76},[66,61421,9463],{"class":356},[66,61423,60907],{"class":76},[66,61425,61426,61428,61430],{"class":68,"line":34429},[66,61427,53560],{"class":76},[66,61429,53395],{"class":53084},[66,61431,53091],{"class":76},[66,61433,61434,61436,61438,61440,61442,61444],{"class":68,"line":34435},[66,61435,53125],{"class":76},[66,61437,53395],{"class":53084},[66,61439,55268],{"class":3793},[66,61441,99],{"class":76},[66,61443,57055],{"class":356},[66,61445,53091],{"class":76},[66,61447,61448,61450,61452,61455,61457],{"class":68,"line":34441},[66,61449,57015],{"class":76},[66,61451,19],{"class":53084},[66,61453,61454],{"class":76},">对人类来说会不会太超前了？\u003C\u002F",[66,61456,19],{"class":53084},[66,61458,53091],{"class":76},[66,61460,61461,61463,61465,61467,61469,61472],{"class":68,"line":34447},[66,61462,57015],{"class":76},[66,61464,2982],{"class":53084},[66,61466,55268],{"class":3793},[66,61468,99],{"class":76},[66,61470,61471],{"class":356},"\"slider-indicator\"",[66,61473,53091],{"class":76},[66,61475,61476,61478,61480,61482,61484,61487,61489,61491],{"class":68,"line":34458},[66,61477,57083],{"class":76},[66,61479,34],{"class":53084},[66,61481,55268],{"class":3793},[66,61483,99],{"class":76},[66,61485,61486],{"class":356},"\"active\"",[66,61488,57095],{"class":76},[66,61490,34],{"class":53084},[66,61492,53091],{"class":76},[66,61494,61495,61497,61499,61501,61503],{"class":68,"line":34464},[66,61496,57083],{"class":76},[66,61498,34],{"class":53084},[66,61500,57095],{"class":76},[66,61502,34],{"class":53084},[66,61504,53091],{"class":76},[66,61506,61507,61509,61511,61513,61515],{"class":68,"line":34484},[66,61508,57083],{"class":76},[66,61510,34],{"class":53084},[66,61512,57095],{"class":76},[66,61514,34],{"class":53084},[66,61516,53091],{"class":76},[66,61518,61519,61521,61523,61525,61527],{"class":68,"line":34490},[66,61520,57083],{"class":76},[66,61522,34],{"class":53084},[66,61524,57095],{"class":76},[66,61526,34],{"class":53084},[66,61528,53091],{"class":76},[66,61530,61531,61533,61535,61537,61539],{"class":68,"line":34501},[66,61532,57083],{"class":76},[66,61534,34],{"class":53084},[66,61536,57095],{"class":76},[66,61538,34],{"class":53084},[66,61540,53091],{"class":76},[66,61542,61543,61545,61547,61549,61551],{"class":68,"line":34507},[66,61544,57083],{"class":76},[66,61546,34],{"class":53084},[66,61548,57095],{"class":76},[66,61550,34],{"class":53084},[66,61552,53091],{"class":76},[66,61554,61555,61557,61559,61561,61563],{"class":68,"line":34513},[66,61556,57083],{"class":76},[66,61558,34],{"class":53084},[66,61560,57095],{"class":76},[66,61562,34],{"class":53084},[66,61564,53091],{"class":76},[66,61566,61567,61569,61571,61573,61575],{"class":68,"line":34519},[66,61568,57083],{"class":76},[66,61570,34],{"class":53084},[66,61572,57095],{"class":76},[66,61574,34],{"class":53084},[66,61576,53091],{"class":76},[66,61578,61579,61581,61583],{"class":68,"line":34525},[66,61580,57188],{"class":76},[66,61582,2982],{"class":53084},[66,61584,53091],{"class":76},[66,61586,61587,61589,61591,61593,61595,61598],{"class":68,"line":34531},[66,61588,57015],{"class":76},[66,61590,53395],{"class":53084},[66,61592,55268],{"class":3793},[66,61594,99],{"class":76},[66,61596,61597],{"class":356},"\"toggle\"",[66,61599,53091],{"class":76},[66,61601,61602,61604,61606,61608,61610,61613,61615,61618,61620,61622],{"class":68,"line":34537},[66,61603,57083],{"class":76},[66,61605,55668],{"class":53084},[66,61607,55268],{"class":3793},[66,61609,99],{"class":76},[66,61611,61612],{"class":356},"\"prev\"",[66,61614,386],{"class":76},[66,61616,61617],{"class":102},"&lt;",[66,61619,53569],{"class":76},[66,61621,55668],{"class":53084},[66,61623,53091],{"class":76},[66,61625,61626,61628,61630,61632,61634,61637,61639,61642,61644,61646],{"class":68,"line":34543},[66,61627,57083],{"class":76},[66,61629,55668],{"class":53084},[66,61631,55268],{"class":3793},[66,61633,99],{"class":76},[66,61635,61636],{"class":356},"\"next\"",[66,61638,386],{"class":76},[66,61640,61641],{"class":102},"&gt;",[66,61643,53569],{"class":76},[66,61645,55668],{"class":53084},[66,61647,53091],{"class":76},[66,61649,61650,61652,61654],{"class":68,"line":34563},[66,61651,57188],{"class":76},[66,61653,53395],{"class":53084},[66,61655,53091],{"class":76},[66,61657,61658,61660,61662],{"class":68,"line":34569},[66,61659,53560],{"class":76},[66,61661,53395],{"class":53084},[66,61663,53091],{"class":76},[66,61665,61666,61668,61670],{"class":68,"line":34585},[66,61667,54199],{"class":76},[66,61669,53395],{"class":53084},[66,61671,53091],{"class":76},[66,61673,61674,61676,61678],{"class":68,"line":34591},[66,61675,53928],{"class":76},[66,61677,53597],{"class":53084},[66,61679,53091],{"class":76},[66,61681,61682],{"class":68,"line":34605},[66,61683,61684],{"class":76},"    \u002F\u002F 1. 初始数据\n",[66,61686,61687],{"class":68,"line":34611},[66,61688,61689],{"class":76},"    const data = [\n",[66,61691,61692],{"class":68,"line":34626},[66,61693,61694],{"class":76},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[66,61696,61697],{"class":68,"line":34632},[66,61698,61699],{"class":76},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[66,61701,61702],{"class":68,"line":34641},[66,61703,61704],{"class":76},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[66,61706,61707],{"class":68,"line":34647},[66,61708,61709],{"class":76},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[66,61711,61712],{"class":68,"line":34656},[66,61713,61714],{"class":76},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[66,61716,61717],{"class":68,"line":34662},[66,61718,61719],{"class":76},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[66,61721,61722],{"class":68,"line":34668},[66,61723,61724],{"class":76},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[66,61726,61727],{"class":68,"line":34677},[66,61728,61729],{"class":76},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[66,61731,61732],{"class":68,"line":34683},[66,61733,54891],{"class":76},[66,61735,61736],{"class":68,"line":34694},[66,61737,61738],{"class":76},"    \u002F\u002F 获取元素\n",[66,61740,61741],{"class":68,"line":34700},[66,61742,61743],{"class":76},"    const img = document.querySelector('.slider-wrapper img')\n",[66,61745,61746],{"class":68,"line":34719},[66,61747,61748],{"class":76},"    const p = document.querySelector('.slider-footer p')\n",[66,61750,61751],{"class":68,"line":34725},[66,61752,61753],{"class":76},"    const footer = document.querySelector('.slider-footer')\n",[66,61755,61756],{"class":68,"line":34736},[66,61757,61758],{"class":76},"    \u002F\u002F 1. 右按钮业务\n",[66,61760,61761],{"class":68,"line":34742},[66,61762,61763],{"class":76},"    \u002F\u002F 1.1 获取右侧按钮 \n",[66,61765,61766],{"class":68,"line":34762},[66,61767,61768],{"class":76},"    const next = document.querySelector('.next')\n",[66,61770,61771],{"class":68,"line":34778},[66,61772,61773],{"class":76},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[66,61775,61776],{"class":68,"line":34784},[66,61777,61778],{"class":76},"    \u002F\u002F 1.2 注册点击事件\n",[66,61780,61781],{"class":68,"line":34798},[66,61782,109],{"emptyLinePlaceholder":108},[66,61784,61785],{"class":68,"line":34804},[66,61786,61787],{"class":76},"    next.addEventListener('click', function () {\n",[66,61789,61790],{"class":68,"line":34810},[66,61791,61792],{"class":76},"      \u002F\u002F console.log(11)\n",[66,61794,61795],{"class":68,"line":34821},[66,61796,61797],{"class":76},"      i++\n",[66,61799,61800],{"class":68,"line":34827},[66,61801,61802],{"class":76},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[66,61804,61805],{"class":68,"line":34833},[66,61806,61807],{"class":76},"      \u002F\u002F if (i >= 8) {\n",[66,61809,61810],{"class":68,"line":34843},[66,61811,61812],{"class":76},"      \u002F\u002F   i = 0\n",[66,61814,61815],{"class":68,"line":34849},[66,61816,61817],{"class":76},"      \u002F\u002F }\n",[66,61819,61820],{"class":68,"line":34860},[66,61821,61822],{"class":76},"      i = i >= data.length ? 0 : i\n",[66,61824,61825],{"class":68,"line":34866},[66,61826,61827],{"class":76},"      \u002F\u002F 1.3 得到对应的对象\n",[66,61829,61830],{"class":68,"line":34876},[66,61831,61832],{"class":76},"      \u002F\u002F console.log(data[i])\n",[66,61834,61835],{"class":68,"line":34881},[66,61836,61837],{"class":76},"      \u002F\u002F 调用函数\n",[66,61839,61840],{"class":68,"line":34887},[66,61841,61842],{"class":76},"      toggle()\n",[66,61844,61845],{"class":68,"line":34936},[66,61846,35249],{"class":76},[66,61848,61849],{"class":68,"line":34983},[66,61850,109],{"emptyLinePlaceholder":108},[66,61852,61853],{"class":68,"line":34988},[66,61854,61855],{"class":76},"    \u002F\u002F 2. 左侧按钮业务\n",[66,61857,61858],{"class":68,"line":34994},[66,61859,61860],{"class":76},"    \u002F\u002F 2.1 获取左侧按钮 \n",[66,61862,61863],{"class":68,"line":35013},[66,61864,61865],{"class":76},"    const prev = document.querySelector('.prev')\n",[66,61867,61868],{"class":68,"line":35019},[66,61869,61778],{"class":76},[66,61871,61872],{"class":68,"line":35038},[66,61873,61874],{"class":76},"    prev.addEventListener('click', function () {\n",[66,61876,61877],{"class":68,"line":35044},[66,61878,61879],{"class":76},"      i--\n",[66,61881,61882],{"class":68,"line":35050},[66,61883,61884],{"class":76},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[66,61886,61887],{"class":68,"line":35060},[66,61888,61889],{"class":76},"      \u002F\u002F if (i \u003C 0) {\n",[66,61891,61892],{"class":68,"line":35065},[66,61893,61894],{"class":76},"      \u002F\u002F   i = 7\n",[66,61896,61897],{"class":68,"line":35071},[66,61898,61817],{"class":76},[66,61900,61901],{"class":68,"line":35087},[66,61902,61903],{"class":76},"      i = i \u003C 0 ? data.length - 1 : i\n",[66,61905,61906],{"class":68,"line":35132},[66,61907,61827],{"class":76},[66,61909,61910],{"class":68,"line":35138},[66,61911,61832],{"class":76},[66,61913,61914],{"class":68,"line":35144},[66,61915,61837],{"class":76},[66,61917,61918],{"class":68,"line":35150},[66,61919,61842],{"class":76},[66,61921,61922],{"class":68,"line":35161},[66,61923,35249],{"class":76},[66,61925,61926],{"class":68,"line":35167},[66,61927,109],{"emptyLinePlaceholder":108},[66,61929,61930],{"class":68,"line":35173},[66,61931,61932],{"class":76},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[66,61934,61935],{"class":68,"line":35179},[66,61936,61937],{"class":76},"    function toggle() {\n",[66,61939,61940],{"class":68,"line":35197},[66,61941,61942],{"class":76},"      \u002F\u002F 1.4 渲染对应的数据\n",[66,61944,61945],{"class":68,"line":35210},[66,61946,61947],{"class":76},"      img.src = data[i].url\n",[66,61949,61950],{"class":68,"line":35219},[66,61951,61952],{"class":76},"      p.innerHTML = data[i].title\n",[66,61954,61955],{"class":68,"line":35228},[66,61956,61957],{"class":76},"      footer.style.backgroundColor = data[i].color\n",[66,61959,61960],{"class":68,"line":35237},[66,61961,61962],{"class":76},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[66,61964,61965],{"class":68,"line":35246},[66,61966,61967],{"class":76},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[66,61969,61970],{"class":68,"line":35252},[66,61971,61972],{"class":76},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[66,61974,61975],{"class":68,"line":35258},[66,61976,4013],{"class":76},[66,61978,61979],{"class":68,"line":35266},[66,61980,109],{"emptyLinePlaceholder":108},[66,61982,61983],{"class":68,"line":35271},[66,61984,61985],{"class":76},"    \u002F\u002F 3. 自动播放模块\n",[66,61987,61988],{"class":68,"line":35277},[66,61989,61990],{"class":76},"    let timerId = setInterval(function () {\n",[66,61992,61993],{"class":68,"line":35288},[66,61994,61995],{"class":76},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[66,61997,61998],{"class":68,"line":35294},[66,61999,62000],{"class":76},"      next.click()\n",[66,62002,62003],{"class":68,"line":35314},[66,62004,62005],{"class":76},"    }, 1000)\n",[66,62007,62008],{"class":68,"line":35320},[66,62009,109],{"emptyLinePlaceholder":108},[66,62011,62012],{"class":68,"line":35326},[66,62013,62014],{"class":76},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[66,62016,62017],{"class":68,"line":35332},[66,62018,62019],{"class":76},"    const slider = document.querySelector('.slider')\n",[66,62021,62022],{"class":68,"line":35349},[66,62023,62024],{"class":76},"    \u002F\u002F 注册事件\n",[66,62026,62027],{"class":68,"line":35355},[66,62028,62029],{"class":76},"    slider.addEventListener('mouseenter', function () {\n",[66,62031,62032],{"class":68,"line":35361},[66,62033,62034],{"class":76},"      \u002F\u002F 停止定时器\n",[66,62036,62037],{"class":68,"line":35367},[66,62038,62039],{"class":76},"      clearInterval(timerId)\n",[66,62041,62042],{"class":68,"line":35373},[66,62043,35249],{"class":76},[66,62045,62046],{"class":68,"line":35379},[66,62047,109],{"emptyLinePlaceholder":108},[66,62049,62050],{"class":68,"line":35406},[66,62051,62052],{"class":76},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[66,62054,62055],{"class":68,"line":35430},[66,62056,62024],{"class":76},[66,62058,62059],{"class":68,"line":35436},[66,62060,62061],{"class":76},"    slider.addEventListener('mouseleave', function () {\n",[66,62063,62064],{"class":68,"line":35442},[66,62065,62034],{"class":76},[66,62067,62068],{"class":68,"line":35448},[66,62069,62070],{"class":76},"      if (timerId) clearInterval(timerId)\n",[66,62072,62073],{"class":68,"line":35459},[66,62074,62075],{"class":76},"      \u002F\u002F 开启定时器\n",[66,62077,62078],{"class":68,"line":35470},[66,62079,62080],{"class":76},"      timerId = setInterval(function () {\n",[66,62082,62083],{"class":68,"line":35476},[66,62084,62085],{"class":76},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[66,62087,62088],{"class":68,"line":35493},[66,62089,62090],{"class":76},"        next.click()\n",[66,62092,62093],{"class":68,"line":35516},[66,62094,62095],{"class":76},"      }, 1000)\n",[66,62097,62098],{"class":68,"line":35539},[66,62099,35249],{"class":76},[66,62101,62102,62104,62106],{"class":68,"line":35545},[66,62103,54199],{"class":76},[66,62105,53597],{"class":53084},[66,62107,53091],{"class":76},[66,62109,62110,62112,62114],{"class":68,"line":35550},[66,62111,53569],{"class":76},[66,62113,53584],{"class":53084},[66,62115,53091],{"class":76},[66,62117,62118],{"class":68,"line":35559},[66,62119,109],{"emptyLinePlaceholder":108},[66,62121,62122,62124,62126],{"class":68,"line":35569},[66,62123,53569],{"class":76},[66,62125,52419],{"class":53084},[66,62127,53091],{"class":76},[23801,62129,62131],{"id":62130},"_3252-焦点事件","3.2.5.2 焦点事件",[19,62133,62134],{},"小米搜索框案例：",[57,62136,62138],{"className":52417,"code":62137,"language":52419,"meta":62,"style":62},"\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",[23,62139,62140,62150,62164,62168,62176,62190,62210,62230,62242,62250,62256,62266,62276,62288,62292,62296,62303,62307,62318,62322,62326,62333,62344,62357,62371,62375,62379,62387,62399,62411,62425,62438,62451,62469,62480,62484,62488,62497,62514,62518,62522,62529,62539,62549,62560,62573,62585,62601,62612,62624,62628,62632,62640,62651,62668,62680,62692,62703,62707,62711,62722,62733,62737,62745,62749,62757,62761,62769,62784,62807,62822,62853,62880,62907,62934,62961,62988,63015,63024,63032,63040,63045,63065,63085,63090,63095,63113,63118,63128,63133,63147,63152,63157,63174,63183,63195,63199,63207,63215,63219],{"__ignoreMap":62},[66,62141,62142,62144,62146,62148],{"class":68,"line":69},[66,62143,53081],{"class":76},[66,62145,53085],{"class":53084},[66,62147,53088],{"class":3793},[66,62149,53091],{"class":76},[66,62151,62152,62154,62156,62158,62160,62162],{"class":68,"line":80},[66,62153,413],{"class":76},[66,62155,52419],{"class":53084},[66,62157,53100],{"class":3793},[66,62159,99],{"class":76},[66,62161,53105],{"class":356},[66,62163,53091],{"class":76},[66,62165,62166],{"class":68,"line":112},[66,62167,109],{"emptyLinePlaceholder":108},[66,62169,62170,62172,62174],{"class":68,"line":129},[66,62171,413],{"class":76},[66,62173,53118],{"class":53084},[66,62175,53091],{"class":76},[66,62177,62178,62180,62182,62184,62186,62188],{"class":68,"line":138},[66,62179,53125],{"class":76},[66,62181,53128],{"class":53084},[66,62183,53131],{"class":3793},[66,62185,99],{"class":76},[66,62187,53136],{"class":356},[66,62189,53091],{"class":76},[66,62191,62192,62194,62196,62198,62200,62202,62204,62206,62208],{"class":68,"line":227},[66,62193,53125],{"class":76},[66,62195,53128],{"class":53084},[66,62197,53147],{"class":3793},[66,62199,99],{"class":76},[66,62201,53152],{"class":356},[66,62203,53155],{"class":3793},[66,62205,99],{"class":76},[66,62207,53160],{"class":356},[66,62209,53091],{"class":76},[66,62211,62212,62214,62216,62218,62220,62222,62224,62226,62228],{"class":68,"line":236},[66,62213,53125],{"class":76},[66,62215,53128],{"class":53084},[66,62217,16724],{"class":3793},[66,62219,99],{"class":76},[66,62221,53175],{"class":356},[66,62223,53155],{"class":3793},[66,62225,99],{"class":76},[66,62227,53182],{"class":356},[66,62229,53091],{"class":76},[66,62231,62232,62234,62236,62238,62240],{"class":68,"line":241},[66,62233,53125],{"class":76},[66,62235,53191],{"class":53084},[66,62237,53194],{"class":76},[66,62239,53191],{"class":53084},[66,62241,53091],{"class":76},[66,62243,62244,62246,62248],{"class":68,"line":372},[66,62245,53125],{"class":76},[66,62247,1903],{"class":53084},[66,62249,53091],{"class":76},[66,62251,62252,62254],{"class":68,"line":377},[66,62253,53211],{"class":53084},[66,62255,17375],{"class":76},[66,62257,62258,62260,62262,62264],{"class":68,"line":392},[66,62259,53218],{"class":102},[66,62261,53221],{"class":76},[66,62263,2183],{"class":102},[66,62265,3135],{"class":76},[66,62267,62268,62270,62272,62274],{"class":68,"line":405},[66,62269,53230],{"class":102},[66,62271,53221],{"class":76},[66,62273,2183],{"class":102},[66,62275,3135],{"class":76},[66,62277,62278,62281,62283,62286],{"class":68,"line":418},[66,62279,62280],{"class":102},"            box-sizing",[66,62282,53221],{"class":76},[66,62284,62285],{"class":102},"border-box",[66,62287,3135],{"class":76},[66,62289,62290],{"class":68,"line":430},[66,62291,4353],{"class":76},[66,62293,62294],{"class":68,"line":438},[66,62295,109],{"emptyLinePlaceholder":108},[66,62297,62298,62301],{"class":68,"line":465},[66,62299,62300],{"class":53084},"        ul",[66,62302,17375],{"class":76},[66,62304,62305],{"class":68,"line":1805},[66,62306,109],{"emptyLinePlaceholder":108},[66,62308,62309,62312,62314,62316],{"class":68,"line":1817},[66,62310,62311],{"class":102},"            list-style",[66,62313,53221],{"class":76},[66,62315,56518],{"class":102},[66,62317,3135],{"class":76},[66,62319,62320],{"class":68,"line":1822},[66,62321,4353],{"class":76},[66,62323,62324],{"class":68,"line":1829},[66,62325,109],{"emptyLinePlaceholder":108},[66,62327,62328,62331],{"class":68,"line":3529},[66,62329,62330],{"class":3793},"        .mi",[66,62332,17375],{"class":76},[66,62334,62335,62338,62340,62342],{"class":68,"line":3557},[66,62336,62337],{"class":102},"            position",[66,62339,53221],{"class":76},[66,62341,56545],{"class":102},[66,62343,3135],{"class":76},[66,62345,62346,62348,62350,62353,62355],{"class":68,"line":3562},[66,62347,53268],{"class":102},[66,62349,53221],{"class":76},[66,62351,62352],{"class":102},"223",[66,62354,53276],{"class":72},[66,62356,3135],{"class":76},[66,62358,62359,62361,62363,62365,62367,62369],{"class":68,"line":3579},[66,62360,53218],{"class":102},[66,62362,53221],{"class":76},[66,62364,310],{"class":102},[66,62366,53276],{"class":72},[66,62368,53340],{"class":102},[66,62370,3135],{"class":76},[66,62372,62373],{"class":68,"line":3584},[66,62374,4353],{"class":76},[66,62376,62377],{"class":68,"line":3589},[66,62378,109],{"emptyLinePlaceholder":108},[66,62380,62381,62383,62385],{"class":68,"line":3594},[66,62382,62330],{"class":3793},[66,62384,1532],{"class":53084},[66,62386,17375],{"class":76},[66,62388,62389,62391,62393,62395,62397],{"class":68,"line":3608},[66,62390,53268],{"class":102},[66,62392,53221],{"class":76},[66,62394,62352],{"class":102},[66,62396,53276],{"class":72},[66,62398,3135],{"class":76},[66,62400,62401,62403,62405,62407,62409],{"class":68,"line":3613},[66,62402,53283],{"class":102},[66,62404,53221],{"class":76},[66,62406,2586],{"class":102},[66,62408,53276],{"class":72},[66,62410,3135],{"class":76},[66,62412,62413,62415,62417,62419,62421,62423],{"class":68,"line":4401},[66,62414,53230],{"class":102},[66,62416,53221],{"class":76},[66,62418,2183],{"class":102},[66,62420,1335],{"class":102},[66,62422,53276],{"class":72},[66,62424,3135],{"class":76},[66,62426,62427,62430,62432,62434,62436],{"class":68,"line":4415},[66,62428,62429],{"class":102},"            font-size",[66,62431,53221],{"class":76},[66,62433,2528],{"class":102},[66,62435,53276],{"class":72},[66,62437,3135],{"class":76},[66,62439,62440,62443,62445,62447,62449],{"class":68,"line":4423},[66,62441,62442],{"class":102},"            line-height",[66,62444,53221],{"class":76},[66,62446,2586],{"class":102},[66,62448,53276],{"class":72},[66,62450,3135],{"class":76},[66,62452,62453,62456,62458,62460,62462,62464,62467],{"class":68,"line":4428},[66,62454,62455],{"class":102},"            border",[66,62457,53221],{"class":76},[66,62459,304],{"class":102},[66,62461,53276],{"class":72},[66,62463,53305],{"class":102},[66,62465,62466],{"class":102}," #e0e0e0",[66,62468,3135],{"class":76},[66,62470,62471,62474,62476,62478],{"class":68,"line":4434},[66,62472,62473],{"class":102},"            outline",[66,62475,53221],{"class":76},[66,62477,56518],{"class":102},[66,62479,3135],{"class":76},[66,62481,62482],{"class":68,"line":4440},[66,62483,4353],{"class":76},[66,62485,62486],{"class":68,"line":4445},[66,62487,109],{"emptyLinePlaceholder":108},[66,62489,62490,62492,62495],{"class":68,"line":9759},[66,62491,62330],{"class":3793},[66,62493,62494],{"class":3793}," .search",[66,62496,17375],{"class":76},[66,62498,62499,62501,62503,62505,62507,62509,62512],{"class":68,"line":9783},[66,62500,62455],{"class":102},[66,62502,53221],{"class":76},[66,62504,304],{"class":102},[66,62506,53276],{"class":72},[66,62508,53305],{"class":102},[66,62510,62511],{"class":102}," #ff6700",[66,62513,3135],{"class":76},[66,62515,62516],{"class":68,"line":9788},[66,62517,4353],{"class":76},[66,62519,62520],{"class":68,"line":9794},[66,62521,109],{"emptyLinePlaceholder":108},[66,62523,62524,62527],{"class":68,"line":9821},[66,62525,62526],{"class":3793},"        .result-list",[66,62528,17375],{"class":76},[66,62530,62531,62533,62535,62537],{"class":68,"line":9826},[66,62532,53256],{"class":102},[66,62534,53221],{"class":76},[66,62536,56518],{"class":102},[66,62538,3135],{"class":76},[66,62540,62541,62543,62545,62547],{"class":68,"line":9832},[66,62542,62337],{"class":102},[66,62544,53221],{"class":76},[66,62546,56612],{"class":102},[66,62548,3135],{"class":76},[66,62550,62551,62554,62556,62558],{"class":68,"line":9844},[66,62552,62553],{"class":102},"            left",[66,62555,53221],{"class":76},[66,62557,2183],{"class":102},[66,62559,3135],{"class":76},[66,62561,62562,62565,62567,62569,62571],{"class":68,"line":9856},[66,62563,62564],{"class":102},"            top",[66,62566,53221],{"class":76},[66,62568,2586],{"class":102},[66,62570,53276],{"class":72},[66,62572,3135],{"class":76},[66,62574,62575,62577,62579,62581,62583],{"class":68,"line":9868},[66,62576,53268],{"class":102},[66,62578,53221],{"class":76},[66,62580,62352],{"class":102},[66,62582,53276],{"class":72},[66,62584,3135],{"class":76},[66,62586,62587,62589,62591,62593,62595,62597,62599],{"class":68,"line":11523},[66,62588,62455],{"class":102},[66,62590,53221],{"class":76},[66,62592,304],{"class":102},[66,62594,53276],{"class":72},[66,62596,53305],{"class":102},[66,62598,62511],{"class":102},[66,62600,3135],{"class":76},[66,62602,62603,62606,62608,62610],{"class":68,"line":11548},[66,62604,62605],{"class":102},"            border-top",[66,62607,53221],{"class":76},[66,62609,2183],{"class":102},[66,62611,3135],{"class":76},[66,62613,62614,62617,62619,62622],{"class":68,"line":11571},[66,62615,62616],{"class":102},"            background",[66,62618,53221],{"class":76},[66,62620,62621],{"class":102},"#fff",[66,62623,3135],{"class":76},[66,62625,62626],{"class":68,"line":11595},[66,62627,4353],{"class":76},[66,62629,62630],{"class":68,"line":11600},[66,62631,109],{"emptyLinePlaceholder":108},[66,62633,62634,62636,62638],{"class":68,"line":11605},[66,62635,62526],{"class":3793},[66,62637,3240],{"class":53084},[66,62639,17375],{"class":76},[66,62641,62642,62644,62646,62649],{"class":68,"line":11610},[66,62643,53256],{"class":102},[66,62645,53221],{"class":76},[66,62647,62648],{"class":102},"block",[66,62650,3135],{"class":76},[66,62652,62653,62655,62657,62659,62661,62664,62666],{"class":68,"line":11619},[66,62654,53230],{"class":102},[66,62656,53221],{"class":76},[66,62658,519],{"class":102},[66,62660,53276],{"class":72},[66,62662,62663],{"class":102}," 15",[66,62665,53276],{"class":72},[66,62667,3135],{"class":76},[66,62669,62670,62672,62674,62676,62678],{"class":68,"line":11624},[66,62671,62429],{"class":102},[66,62673,53221],{"class":76},[66,62675,2477],{"class":102},[66,62677,53276],{"class":72},[66,62679,3135],{"class":76},[66,62681,62682,62685,62687,62690],{"class":68,"line":11630},[66,62683,62684],{"class":102},"            color",[66,62686,53221],{"class":76},[66,62688,62689],{"class":102},"#424242",[66,62691,3135],{"class":76},[66,62693,62694,62697,62699,62701],{"class":68,"line":11651},[66,62695,62696],{"class":102},"            text-decoration",[66,62698,53221],{"class":76},[66,62700,56518],{"class":102},[66,62702,3135],{"class":76},[66,62704,62705],{"class":68,"line":11657},[66,62706,4353],{"class":76},[66,62708,62709],{"class":68,"line":11671},[66,62710,109],{"emptyLinePlaceholder":108},[66,62712,62713,62715,62717,62720],{"class":68,"line":11677},[66,62714,62526],{"class":3793},[66,62716,3240],{"class":53084},[66,62718,62719],{"class":3793},":hover",[66,62721,17375],{"class":76},[66,62723,62724,62726,62728,62731],{"class":68,"line":11704},[66,62725,53424],{"class":102},[66,62727,53221],{"class":76},[66,62729,62730],{"class":102},"#eee",[66,62732,3135],{"class":76},[66,62734,62735],{"class":68,"line":11713},[66,62736,4353],{"class":76},[66,62738,62739,62741,62743],{"class":68,"line":11719},[66,62740,53560],{"class":76},[66,62742,1903],{"class":53084},[66,62744,53091],{"class":76},[66,62746,62747],{"class":68,"line":11727},[66,62748,109],{"emptyLinePlaceholder":108},[66,62750,62751,62753,62755],{"class":68,"line":11732},[66,62752,53569],{"class":76},[66,62754,53118],{"class":53084},[66,62756,53091],{"class":76},[66,62758,62759],{"class":68,"line":18407},[66,62760,109],{"emptyLinePlaceholder":108},[66,62762,62763,62765,62767],{"class":68,"line":18413},[66,62764,413],{"class":76},[66,62766,53584],{"class":53084},[66,62768,53091],{"class":76},[66,62770,62771,62773,62775,62777,62779,62782],{"class":68,"line":18436},[66,62772,53125],{"class":76},[66,62774,53395],{"class":53084},[66,62776,55268],{"class":3793},[66,62778,99],{"class":76},[66,62780,62781],{"class":356},"\"mi\"",[66,62783,53091],{"class":76},[66,62785,62786,62788,62790,62792,62794,62797,62800,62802,62805],{"class":68,"line":18442},[66,62787,57083],{"class":76},[66,62789,351],{"class":53084},[66,62791,55605],{"class":3793},[66,62793,99],{"class":76},[66,62795,62796],{"class":356},"\"search\"",[66,62798,62799],{"class":3793}," placeholder",[66,62801,99],{"class":76},[66,62803,62804],{"class":356},"\"小米笔记本\"",[66,62806,53091],{"class":76},[66,62808,62809,62811,62813,62815,62817,62820],{"class":68,"line":18465},[66,62810,57083],{"class":76},[66,62812,2982],{"class":53084},[66,62814,55268],{"class":3793},[66,62816,99],{"class":76},[66,62818,62819],{"class":356},"\"result-list\"",[66,62821,53091],{"class":76},[66,62823,62824,62827,62829,62832,62834,62837,62839,62842,62845,62847,62849,62851],{"class":68,"line":18479},[66,62825,62826],{"class":76},"            \u003C",[66,62828,34],{"class":53084},[66,62830,62831],{"class":76},">\u003C",[66,62833,2229],{"class":53084},[66,62835,62836],{"class":3793}," href",[66,62838,99],{"class":76},[66,62840,62841],{"class":356},"\"#\"",[66,62843,62844],{"class":76},">全部商品\u003C\u002F",[66,62846,2229],{"class":53084},[66,62848,57095],{"class":76},[66,62850,34],{"class":53084},[66,62852,53091],{"class":76},[66,62854,62855,62857,62859,62861,62863,62865,62867,62869,62872,62874,62876,62878],{"class":68,"line":18499},[66,62856,62826],{"class":76},[66,62858,34],{"class":53084},[66,62860,62831],{"class":76},[66,62862,2229],{"class":53084},[66,62864,62836],{"class":3793},[66,62866,99],{"class":76},[66,62868,62841],{"class":356},[66,62870,62871],{"class":76},">小米11\u003C\u002F",[66,62873,2229],{"class":53084},[66,62875,57095],{"class":76},[66,62877,34],{"class":53084},[66,62879,53091],{"class":76},[66,62881,62882,62884,62886,62888,62890,62892,62894,62896,62899,62901,62903,62905],{"class":68,"line":18505},[66,62883,62826],{"class":76},[66,62885,34],{"class":53084},[66,62887,62831],{"class":76},[66,62889,2229],{"class":53084},[66,62891,62836],{"class":3793},[66,62893,99],{"class":76},[66,62895,62841],{"class":356},[66,62897,62898],{"class":76},">小米10S\u003C\u002F",[66,62900,2229],{"class":53084},[66,62902,57095],{"class":76},[66,62904,34],{"class":53084},[66,62906,53091],{"class":76},[66,62908,62909,62911,62913,62915,62917,62919,62921,62923,62926,62928,62930,62932],{"class":68,"line":18516},[66,62910,62826],{"class":76},[66,62912,34],{"class":53084},[66,62914,62831],{"class":76},[66,62916,2229],{"class":53084},[66,62918,62836],{"class":3793},[66,62920,99],{"class":76},[66,62922,62841],{"class":356},[66,62924,62925],{"class":76},">小米笔记本\u003C\u002F",[66,62927,2229],{"class":53084},[66,62929,57095],{"class":76},[66,62931,34],{"class":53084},[66,62933,53091],{"class":76},[66,62935,62936,62938,62940,62942,62944,62946,62948,62950,62953,62955,62957,62959],{"class":68,"line":18539},[66,62937,62826],{"class":76},[66,62939,34],{"class":53084},[66,62941,62831],{"class":76},[66,62943,2229],{"class":53084},[66,62945,62836],{"class":3793},[66,62947,99],{"class":76},[66,62949,62841],{"class":356},[66,62951,62952],{"class":76},">小米手机\u003C\u002F",[66,62954,2229],{"class":53084},[66,62956,57095],{"class":76},[66,62958,34],{"class":53084},[66,62960,53091],{"class":76},[66,62962,62963,62965,62967,62969,62971,62973,62975,62977,62980,62982,62984,62986],{"class":68,"line":18561},[66,62964,62826],{"class":76},[66,62966,34],{"class":53084},[66,62968,62831],{"class":76},[66,62970,2229],{"class":53084},[66,62972,62836],{"class":3793},[66,62974,99],{"class":76},[66,62976,62841],{"class":356},[66,62978,62979],{"class":76},">黑鲨4\u003C\u002F",[66,62981,2229],{"class":53084},[66,62983,57095],{"class":76},[66,62985,34],{"class":53084},[66,62987,53091],{"class":76},[66,62989,62990,62992,62994,62996,62998,63000,63002,63004,63007,63009,63011,63013],{"class":68,"line":18566},[66,62991,62826],{"class":76},[66,62993,34],{"class":53084},[66,62995,62831],{"class":76},[66,62997,2229],{"class":53084},[66,62999,62836],{"class":3793},[66,63001,99],{"class":76},[66,63003,62841],{"class":356},[66,63005,63006],{"class":76},">空调\u003C\u002F",[66,63008,2229],{"class":53084},[66,63010,57095],{"class":76},[66,63012,34],{"class":53084},[66,63014,53091],{"class":76},[66,63016,63017,63020,63022],{"class":68,"line":18572},[66,63018,63019],{"class":76},"        \u003C\u002F",[66,63021,2982],{"class":53084},[66,63023,53091],{"class":76},[66,63025,63026,63028,63030],{"class":68,"line":18586},[66,63027,53560],{"class":76},[66,63029,53395],{"class":53084},[66,63031,53091],{"class":76},[66,63033,63034,63036,63038],{"class":68,"line":18599},[66,63035,53125],{"class":76},[66,63037,53597],{"class":53084},[66,63039,53091],{"class":76},[66,63041,63042],{"class":68,"line":18604},[66,63043,63044],{"class":758},"        \u002F\u002F 1. 获取元素\n",[66,63046,63047,63050,63052,63054,63056,63058,63060,63063],{"class":68,"line":18618},[66,63048,63049],{"class":72},"        const",[66,63051,1532],{"class":102},[66,63053,15369],{"class":72},[66,63055,56177],{"class":76},[66,63057,56180],{"class":3793},[66,63059,348],{"class":76},[66,63061,63062],{"class":356},"'[type=search]'",[66,63064,313],{"class":76},[66,63066,63067,63069,63072,63074,63076,63078,63080,63083],{"class":68,"line":18623},[66,63068,63049],{"class":72},[66,63070,63071],{"class":102}," ul",[66,63073,15369],{"class":72},[66,63075,56177],{"class":76},[66,63077,56180],{"class":3793},[66,63079,348],{"class":76},[66,63081,63082],{"class":356},"'.result-list'",[66,63084,313],{"class":76},[66,63086,63087],{"class":68,"line":18629},[66,63088,63089],{"class":758},"        \u002F\u002F console.log(input)\n",[66,63091,63092],{"class":68,"line":18634},[66,63093,63094],{"class":758},"        \u002F\u002F 2. 监听事件 获得焦点\n",[66,63096,63097,63100,63102,63104,63107,63109,63111],{"class":68,"line":18648},[66,63098,63099],{"class":76},"        input.",[66,63101,59593],{"class":3793},[66,63103,348],{"class":76},[66,63105,63106],{"class":356},"'focus'",[66,63108,307],{"class":76},[66,63110,56230],{"class":72},[66,63112,56233],{"class":76},[66,63114,63115],{"class":68,"line":18653},[66,63116,63117],{"class":758},"            \u002F\u002F ul显示\n",[66,63119,63120,63123,63125],{"class":68,"line":18658},[66,63121,63122],{"class":76},"            ul.style.display ",[66,63124,99],{"class":72},[66,63126,63127],{"class":356}," 'block'\n",[66,63129,63130],{"class":68,"line":18672},[66,63131,63132],{"class":758},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[66,63134,63135,63138,63140,63142,63145],{"class":68,"line":18684},[66,63136,63137],{"class":76},"            input.classList.",[66,63139,7146],{"class":3793},[66,63141,348],{"class":76},[66,63143,63144],{"class":356},"'search'",[66,63146,313],{"class":76},[66,63148,63149],{"class":68,"line":18689},[66,63150,63151],{"class":76},"        })\n",[66,63153,63154],{"class":68,"line":18702},[66,63155,63156],{"class":758},"        \u002F\u002F 3. 监听事件 失去焦点\n",[66,63158,63159,63161,63163,63165,63168,63170,63172],{"class":68,"line":18707},[66,63160,63099],{"class":76},[66,63162,59593],{"class":3793},[66,63164,348],{"class":76},[66,63166,63167],{"class":356},"'blur'",[66,63169,307],{"class":76},[66,63171,56230],{"class":72},[66,63173,56233],{"class":76},[66,63175,63176,63178,63180],{"class":68,"line":18712},[66,63177,63122],{"class":76},[66,63179,99],{"class":72},[66,63181,63182],{"class":356}," 'none'\n",[66,63184,63185,63187,63189,63191,63193],{"class":68,"line":18717},[66,63186,63137],{"class":76},[66,63188,58786],{"class":3793},[66,63190,348],{"class":76},[66,63192,63144],{"class":356},[66,63194,313],{"class":76},[66,63196,63197],{"class":68,"line":18730},[66,63198,63151],{"class":76},[66,63200,63201,63203,63205],{"class":68,"line":18735},[66,63202,53560],{"class":76},[66,63204,53597],{"class":53084},[66,63206,53091],{"class":76},[66,63208,63209,63211,63213],{"class":68,"line":34423},[66,63210,53569],{"class":76},[66,63212,53584],{"class":53084},[66,63214,53091],{"class":76},[66,63216,63217],{"class":68,"line":34429},[66,63218,109],{"emptyLinePlaceholder":108},[66,63220,63221,63223,63225],{"class":68,"line":34435},[66,63222,53569],{"class":76},[66,63224,52419],{"class":53084},[66,63226,53091],{"class":76},[23801,63228,63230],{"id":63229},"_3253-键盘事件","3.2.5.3 键盘事件",[19,63232,63233],{},"评论字数统计案例",[19,63235,63236],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,63238,63239],{},"牢记focus伪类选择器",[53128,63241],{"charSet":63242},"UTF-8",[53128,63244],{"name":63245,"content":63246},"viewport","width=device-width, initial-scale=1.0",[53191,63248,63249],{},"Document",[1903,63251,63252],{},"\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",[351,63254],{"type":555},[2982,63256,63257,63260],{},[34,63258,63259],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[34,63261,63262],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[57,63264,63266],{"className":52417,"code":63265,"language":52419,"meta":62,"style":62},"\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",[23,63267,63268,63278,63292,63296,63304,63318,63338,63358,63371,63379,63386,63399,63413,63423,63433,63437,63441,63448,63460,63472,63484,63496,63525,63538,63542,63546,63555,63566,63578,63589,63600,63612,63623,63635,63651,63663,63667,63671,63682,63693,63703,63715,63719,63723,63731,63742,63752,63763,63775,63788,63800,63812,63816,63820,63829,63841,63852,63865,63876,63890,63894,63898,63905,63917,63929,63939,63943,63947,63956,63968,63978,63982,63986,63997,64007,64026,64039,64043,64047,64057,64067,64071,64075,64086,64097,64109,64121,64125,64129,64140,64151,64165,64169,64173,64184,64194,64206,64210,64218,64226,64230,64238,64253,64272,64312,64325,64333,64347,64367,64375,64390,64413,64431,64446,64466,64486,64506,64514,64522,64530,64538,64558,64578,64583,64600,64609,64613,64618,64634,64642,64646,64651,64668,64673,64698,64702,64706,64711,64716,64724,64732,64736],{"__ignoreMap":62},[66,63269,63270,63272,63274,63276],{"class":68,"line":69},[66,63271,53081],{"class":76},[66,63273,53085],{"class":53084},[66,63275,53088],{"class":3793},[66,63277,53091],{"class":76},[66,63279,63280,63282,63284,63286,63288,63290],{"class":68,"line":80},[66,63281,413],{"class":76},[66,63283,52419],{"class":53084},[66,63285,53100],{"class":3793},[66,63287,99],{"class":76},[66,63289,53105],{"class":356},[66,63291,53091],{"class":76},[66,63293,63294],{"class":68,"line":112},[66,63295,109],{"emptyLinePlaceholder":108},[66,63297,63298,63300,63302],{"class":68,"line":129},[66,63299,413],{"class":76},[66,63301,53118],{"class":53084},[66,63303,53091],{"class":76},[66,63305,63306,63308,63310,63312,63314,63316],{"class":68,"line":138},[66,63307,53928],{"class":76},[66,63309,53128],{"class":53084},[66,63311,53131],{"class":3793},[66,63313,99],{"class":76},[66,63315,53136],{"class":356},[66,63317,53091],{"class":76},[66,63319,63320,63322,63324,63326,63328,63330,63332,63334,63336],{"class":68,"line":227},[66,63321,53928],{"class":76},[66,63323,53128],{"class":53084},[66,63325,53147],{"class":3793},[66,63327,99],{"class":76},[66,63329,53152],{"class":356},[66,63331,53155],{"class":3793},[66,63333,99],{"class":76},[66,63335,53160],{"class":356},[66,63337,53091],{"class":76},[66,63339,63340,63342,63344,63346,63348,63350,63352,63354,63356],{"class":68,"line":236},[66,63341,53928],{"class":76},[66,63343,53128],{"class":53084},[66,63345,16724],{"class":3793},[66,63347,99],{"class":76},[66,63349,53175],{"class":356},[66,63351,53155],{"class":3793},[66,63353,99],{"class":76},[66,63355,53182],{"class":356},[66,63357,53091],{"class":76},[66,63359,63360,63362,63364,63367,63369],{"class":68,"line":241},[66,63361,53928],{"class":76},[66,63363,53191],{"class":53084},[66,63365,63366],{"class":76},">评论回车发布\u003C\u002F",[66,63368,53191],{"class":53084},[66,63370,53091],{"class":76},[66,63372,63373,63375,63377],{"class":68,"line":372},[66,63374,53928],{"class":76},[66,63376,1903],{"class":53084},[66,63378,53091],{"class":76},[66,63380,63381,63384],{"class":68,"line":377},[66,63382,63383],{"class":3793},"    .wrapper",[66,63385,17375],{"class":76},[66,63387,63388,63391,63393,63395,63397],{"class":68,"line":392},[66,63389,63390],{"class":102},"      min-width",[66,63392,53221],{"class":76},[66,63394,5804],{"class":102},[66,63396,53276],{"class":72},[66,63398,3135],{"class":76},[66,63400,63401,63404,63406,63409,63411],{"class":68,"line":405},[66,63402,63403],{"class":102},"      max-width",[66,63405,53221],{"class":76},[66,63407,63408],{"class":102},"800",[66,63410,53276],{"class":72},[66,63412,3135],{"class":76},[66,63414,63415,63417,63419,63421],{"class":68,"line":418},[66,63416,56790],{"class":102},[66,63418,53221],{"class":76},[66,63420,53261],{"class":102},[66,63422,3135],{"class":76},[66,63424,63425,63427,63429,63431],{"class":68,"line":430},[66,63426,56801],{"class":102},[66,63428,53221],{"class":76},[66,63430,53364],{"class":102},[66,63432,3135],{"class":76},[66,63434,63435],{"class":68,"line":438},[66,63436,4013],{"class":76},[66,63438,63439],{"class":68,"line":465},[66,63440,109],{"emptyLinePlaceholder":108},[66,63442,63443,63446],{"class":68,"line":1805},[66,63444,63445],{"class":3793},"    .avatar",[66,63447,17375],{"class":76},[66,63449,63450,63452,63454,63456,63458],{"class":68,"line":1817},[66,63451,56552],{"class":102},[66,63453,53221],{"class":76},[66,63455,2586],{"class":102},[66,63457,53276],{"class":72},[66,63459,3135],{"class":76},[66,63461,63462,63464,63466,63468,63470],{"class":68,"line":1822},[66,63463,56566],{"class":102},[66,63465,53221],{"class":76},[66,63467,2586],{"class":102},[66,63469,53276],{"class":72},[66,63471,3135],{"class":76},[66,63473,63474,63476,63478,63480,63482],{"class":68,"line":1829},[66,63475,56915],{"class":102},[66,63477,53221],{"class":76},[66,63479,2635],{"class":102},[66,63481,953],{"class":72},[66,63483,3135],{"class":76},[66,63485,63486,63489,63491,63494],{"class":68,"line":3529},[66,63487,63488],{"class":102},"      overflow",[66,63490,53221],{"class":76},[66,63492,63493],{"class":102},"hidden",[66,63495,3135],{"class":76},[66,63497,63498,63501,63503,63506,63508,63511,63513,63516,63518,63520,63523],{"class":68,"line":3557},[66,63499,63500],{"class":102},"      background",[66,63502,53221],{"class":76},[66,63504,63505],{"class":102},"url",[66,63507,348],{"class":76},[66,63509,63510],{"class":1234},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[66,63512,15519],{"class":76},[66,63514,63515],{"class":102},"no-repeat",[66,63517,18947],{"class":102},[66,63519,26781],{"class":76},[66,63521,63522],{"class":102},"cover",[66,63524,3135],{"class":76},[66,63526,63527,63530,63532,63534,63536],{"class":68,"line":3562},[66,63528,63529],{"class":102},"      margin-right",[66,63531,53221],{"class":76},[66,63533,2679],{"class":102},[66,63535,53276],{"class":72},[66,63537,3135],{"class":76},[66,63539,63540],{"class":68,"line":3579},[66,63541,4013],{"class":76},[66,63543,63544],{"class":68,"line":3584},[66,63545,109],{"emptyLinePlaceholder":108},[66,63547,63548,63550,63553],{"class":68,"line":3589},[66,63549,63383],{"class":3793},[66,63551,63552],{"class":53084}," textarea",[66,63554,17375],{"class":76},[66,63556,63557,63560,63562,63564],{"class":68,"line":3594},[66,63558,63559],{"class":102},"      outline",[66,63561,53221],{"class":76},[66,63563,56518],{"class":102},[66,63565,3135],{"class":76},[66,63567,63568,63571,63573,63576],{"class":68,"line":3608},[66,63569,63570],{"class":102},"      border-color",[66,63572,53221],{"class":76},[66,63574,63575],{"class":102},"transparent",[66,63577,3135],{"class":76},[66,63579,63580,63583,63585,63587],{"class":68,"line":3613},[66,63581,63582],{"class":102},"      resize",[66,63584,53221],{"class":76},[66,63586,56518],{"class":102},[66,63588,3135],{"class":76},[66,63590,63591,63593,63595,63598],{"class":68,"line":4401},[66,63592,63500],{"class":102},[66,63594,53221],{"class":76},[66,63596,63597],{"class":102},"#f5f5f5",[66,63599,3135],{"class":76},[66,63601,63602,63604,63606,63608,63610],{"class":68,"line":4415},[66,63603,56915],{"class":102},[66,63605,53221],{"class":76},[66,63607,1076],{"class":102},[66,63609,53276],{"class":72},[66,63611,3135],{"class":76},[66,63613,63614,63617,63619,63621],{"class":68,"line":4423},[66,63615,63616],{"class":102},"      flex",[66,63618,53221],{"class":76},[66,63620,304],{"class":102},[66,63622,3135],{"class":76},[66,63624,63625,63627,63629,63631,63633],{"class":68,"line":4428},[66,63626,56476],{"class":102},[66,63628,53221],{"class":76},[66,63630,790],{"class":102},[66,63632,53276],{"class":72},[66,63634,3135],{"class":76},[66,63636,63637,63640,63642,63644,63647,63649],{"class":68,"line":4434},[66,63638,63639],{"class":102},"      transition",[66,63641,53221],{"class":76},[66,63643,29922],{"class":102},[66,63645,63646],{"class":102}," 0.5",[66,63648,2674],{"class":72},[66,63650,3135],{"class":76},[66,63652,63653,63655,63657,63659,63661],{"class":68,"line":4440},[66,63654,56566],{"class":102},[66,63656,53221],{"class":76},[66,63658,2927],{"class":102},[66,63660,53276],{"class":72},[66,63662,3135],{"class":76},[66,63664,63665],{"class":68,"line":4445},[66,63666,4013],{"class":76},[66,63668,63669],{"class":68,"line":9759},[66,63670,109],{"emptyLinePlaceholder":108},[66,63672,63673,63675,63677,63680],{"class":68,"line":9783},[66,63674,63383],{"class":3793},[66,63676,63552],{"class":53084},[66,63678,63679],{"class":3793},":focus",[66,63681,17375],{"class":76},[66,63683,63684,63686,63688,63691],{"class":68,"line":9788},[66,63685,63570],{"class":102},[66,63687,53221],{"class":76},[66,63689,63690],{"class":102},"#e4e4e4",[66,63692,3135],{"class":76},[66,63694,63695,63697,63699,63701],{"class":68,"line":9794},[66,63696,63500],{"class":102},[66,63698,53221],{"class":76},[66,63700,62621],{"class":102},[66,63702,3135],{"class":76},[66,63704,63705,63707,63709,63711,63713],{"class":68,"line":9821},[66,63706,56566],{"class":102},[66,63708,53221],{"class":76},[66,63710,2635],{"class":102},[66,63712,53276],{"class":72},[66,63714,3135],{"class":76},[66,63716,63717],{"class":68,"line":9826},[66,63718,4013],{"class":76},[66,63720,63721],{"class":68,"line":9832},[66,63722,109],{"emptyLinePlaceholder":108},[66,63724,63725,63727,63729],{"class":68,"line":9844},[66,63726,63383],{"class":3793},[66,63728,59247],{"class":53084},[66,63730,17375],{"class":76},[66,63732,63733,63735,63737,63740],{"class":68,"line":9856},[66,63734,63500],{"class":102},[66,63736,53221],{"class":76},[66,63738,63739],{"class":102},"#00aeec",[66,63741,3135],{"class":76},[66,63743,63744,63746,63748,63750],{"class":68,"line":9868},[66,63745,59196],{"class":102},[66,63747,53221],{"class":76},[66,63749,62621],{"class":102},[66,63751,3135],{"class":76},[66,63753,63754,63757,63759,63761],{"class":68,"line":11523},[66,63755,63756],{"class":102},"      border",[66,63758,53221],{"class":76},[66,63760,56518],{"class":102},[66,63762,3135],{"class":76},[66,63764,63765,63767,63769,63771,63773],{"class":68,"line":11548},[66,63766,56915],{"class":102},[66,63768,53221],{"class":76},[66,63770,1076],{"class":102},[66,63772,53276],{"class":72},[66,63774,3135],{"class":76},[66,63776,63777,63780,63782,63784,63786],{"class":68,"line":11571},[66,63778,63779],{"class":102},"      margin-left",[66,63781,53221],{"class":76},[66,63783,790],{"class":102},[66,63785,53276],{"class":72},[66,63787,3135],{"class":76},[66,63789,63790,63792,63794,63796,63798],{"class":68,"line":11595},[66,63791,56552],{"class":102},[66,63793,53221],{"class":76},[66,63795,2340],{"class":102},[66,63797,53276],{"class":72},[66,63799,3135],{"class":76},[66,63801,63802,63805,63807,63810],{"class":68,"line":11600},[66,63803,63804],{"class":102},"      cursor",[66,63806,53221],{"class":76},[66,63808,63809],{"class":102},"pointer",[66,63811,3135],{"class":76},[66,63813,63814],{"class":68,"line":11605},[66,63815,4013],{"class":76},[66,63817,63818],{"class":68,"line":11610},[66,63819,109],{"emptyLinePlaceholder":108},[66,63821,63822,63824,63827],{"class":68,"line":11619},[66,63823,63383],{"class":3793},[66,63825,63826],{"class":3793}," .total",[66,63828,17375],{"class":76},[66,63830,63831,63833,63835,63837,63839],{"class":68,"line":11624},[66,63832,63529],{"class":102},[66,63834,53221],{"class":76},[66,63836,2591],{"class":102},[66,63838,53276],{"class":72},[66,63840,3135],{"class":76},[66,63842,63843,63845,63847,63850],{"class":68,"line":11630},[66,63844,59196],{"class":102},[66,63846,53221],{"class":76},[66,63848,63849],{"class":102},"#999",[66,63851,3135],{"class":76},[66,63853,63854,63857,63859,63861,63863],{"class":68,"line":11651},[66,63855,63856],{"class":102},"      margin-top",[66,63858,53221],{"class":76},[66,63860,752],{"class":102},[66,63862,53276],{"class":72},[66,63864,3135],{"class":76},[66,63866,63867,63870,63872,63874],{"class":68,"line":11657},[66,63868,63869],{"class":102},"      opacity",[66,63871,53221],{"class":76},[66,63873,2183],{"class":102},[66,63875,3135],{"class":76},[66,63877,63878,63880,63882,63884,63886,63888],{"class":68,"line":11671},[66,63879,63639],{"class":102},[66,63881,53221],{"class":76},[66,63883,29922],{"class":102},[66,63885,63646],{"class":102},[66,63887,2674],{"class":72},[66,63889,3135],{"class":76},[66,63891,63892],{"class":68,"line":11677},[66,63893,4013],{"class":76},[66,63895,63896],{"class":68,"line":11704},[66,63897,109],{"emptyLinePlaceholder":108},[66,63899,63900,63903],{"class":68,"line":11713},[66,63901,63902],{"class":3793},"    .list",[66,63904,17375],{"class":76},[66,63906,63907,63909,63911,63913,63915],{"class":68,"line":11719},[66,63908,63390],{"class":102},[66,63910,53221],{"class":76},[66,63912,5804],{"class":102},[66,63914,53276],{"class":72},[66,63916,3135],{"class":76},[66,63918,63919,63921,63923,63925,63927],{"class":68,"line":11727},[66,63920,63403],{"class":102},[66,63922,53221],{"class":76},[66,63924,63408],{"class":102},[66,63926,53276],{"class":72},[66,63928,3135],{"class":76},[66,63930,63931,63933,63935,63937],{"class":68,"line":11732},[66,63932,56790],{"class":102},[66,63934,53221],{"class":76},[66,63936,53261],{"class":102},[66,63938,3135],{"class":76},[66,63940,63941],{"class":68,"line":18407},[66,63942,4013],{"class":76},[66,63944,63945],{"class":68,"line":18413},[66,63946,109],{"emptyLinePlaceholder":108},[66,63948,63949,63951,63954],{"class":68,"line":18436},[66,63950,63902],{"class":3793},[66,63952,63953],{"class":3793}," .item",[66,63955,17375],{"class":76},[66,63957,63958,63960,63962,63964,63966],{"class":68,"line":18442},[66,63959,56552],{"class":102},[66,63961,53221],{"class":76},[66,63963,310],{"class":102},[66,63965,953],{"class":72},[66,63967,3135],{"class":76},[66,63969,63970,63972,63974,63976],{"class":68,"line":18465},[66,63971,56790],{"class":102},[66,63973,53221],{"class":76},[66,63975,53261],{"class":102},[66,63977,3135],{"class":76},[66,63979,63980],{"class":68,"line":18479},[66,63981,4013],{"class":76},[66,63983,63984],{"class":68,"line":18499},[66,63985,109],{"emptyLinePlaceholder":108},[66,63987,63988,63990,63992,63995],{"class":68,"line":18505},[66,63989,63902],{"class":3793},[66,63991,63953],{"class":3793},[66,63993,63994],{"class":3793}," .info",[66,63996,17375],{"class":76},[66,63998,63999,64001,64003,64005],{"class":68,"line":18516},[66,64000,63616],{"class":102},[66,64002,53221],{"class":76},[66,64004,304],{"class":102},[66,64006,3135],{"class":76},[66,64008,64009,64012,64014,64016,64018,64021,64024],{"class":68,"line":18539},[66,64010,64011],{"class":102},"      border-bottom",[66,64013,53221],{"class":76},[66,64015,304],{"class":102},[66,64017,53276],{"class":72},[66,64019,64020],{"class":102}," dashed",[66,64022,64023],{"class":102}," #e4e4e4",[66,64025,3135],{"class":76},[66,64027,64028,64031,64033,64035,64037],{"class":68,"line":18561},[66,64029,64030],{"class":102},"      padding-bottom",[66,64032,53221],{"class":76},[66,64034,790],{"class":102},[66,64036,53276],{"class":72},[66,64038,3135],{"class":76},[66,64040,64041],{"class":68,"line":18566},[66,64042,4013],{"class":76},[66,64044,64045],{"class":68,"line":18572},[66,64046,109],{"emptyLinePlaceholder":108},[66,64048,64049,64051,64053,64055],{"class":68,"line":18586},[66,64050,63902],{"class":3793},[66,64052,63953],{"class":3793},[66,64054,8636],{"class":53084},[66,64056,17375],{"class":76},[66,64058,64059,64061,64063,64065],{"class":68,"line":18599},[66,64060,56487],{"class":102},[66,64062,53221],{"class":76},[66,64064,2183],{"class":102},[66,64066,3135],{"class":76},[66,64068,64069],{"class":68,"line":18604},[66,64070,4013],{"class":76},[66,64072,64073],{"class":68,"line":18618},[66,64074,109],{"emptyLinePlaceholder":108},[66,64076,64077,64079,64081,64084],{"class":68,"line":18623},[66,64078,63902],{"class":3793},[66,64080,63953],{"class":3793},[66,64082,64083],{"class":3793}," .name",[66,64085,17375],{"class":76},[66,64087,64088,64090,64092,64095],{"class":68,"line":18629},[66,64089,59196],{"class":102},[66,64091,53221],{"class":76},[66,64093,64094],{"class":102},"#FB7299",[66,64096,3135],{"class":76},[66,64098,64099,64101,64103,64105,64107],{"class":68,"line":18634},[66,64100,56703],{"class":102},[66,64102,53221],{"class":76},[66,64104,2528],{"class":102},[66,64106,53276],{"class":72},[66,64108,3135],{"class":76},[66,64110,64111,64114,64116,64119],{"class":68,"line":18648},[66,64112,64113],{"class":102},"      font-weight",[66,64115,53221],{"class":76},[66,64117,64118],{"class":102},"bold",[66,64120,3135],{"class":76},[66,64122,64123],{"class":68,"line":18653},[66,64124,4013],{"class":76},[66,64126,64127],{"class":68,"line":18658},[66,64128,109],{"emptyLinePlaceholder":108},[66,64130,64131,64133,64135,64138],{"class":68,"line":18672},[66,64132,63902],{"class":3793},[66,64134,63953],{"class":3793},[66,64136,64137],{"class":3793}," .text",[66,64139,17375],{"class":76},[66,64141,64142,64144,64146,64149],{"class":68,"line":18684},[66,64143,59196],{"class":102},[66,64145,53221],{"class":76},[66,64147,64148],{"class":102},"#333",[66,64150,3135],{"class":76},[66,64152,64153,64155,64157,64159,64161,64163],{"class":68,"line":18689},[66,64154,56476],{"class":102},[66,64156,53221],{"class":76},[66,64158,790],{"class":102},[66,64160,53276],{"class":72},[66,64162,962],{"class":102},[66,64164,3135],{"class":76},[66,64166,64167],{"class":68,"line":18702},[66,64168,4013],{"class":76},[66,64170,64171],{"class":68,"line":18707},[66,64172,109],{"emptyLinePlaceholder":108},[66,64174,64175,64177,64179,64182],{"class":68,"line":18712},[66,64176,63902],{"class":3793},[66,64178,63953],{"class":3793},[66,64180,64181],{"class":3793}," .time",[66,64183,17375],{"class":76},[66,64185,64186,64188,64190,64192],{"class":68,"line":18717},[66,64187,59196],{"class":102},[66,64189,53221],{"class":76},[66,64191,63849],{"class":102},[66,64193,3135],{"class":76},[66,64195,64196,64198,64200,64202,64204],{"class":68,"line":18730},[66,64197,56703],{"class":102},[66,64199,53221],{"class":76},[66,64201,2477],{"class":102},[66,64203,53276],{"class":72},[66,64205,3135],{"class":76},[66,64207,64208],{"class":68,"line":18735},[66,64209,4013],{"class":76},[66,64211,64212,64214,64216],{"class":68,"line":34423},[66,64213,54199],{"class":76},[66,64215,1903],{"class":53084},[66,64217,53091],{"class":76},[66,64219,64220,64222,64224],{"class":68,"line":34429},[66,64221,53569],{"class":76},[66,64223,53118],{"class":53084},[66,64225,53091],{"class":76},[66,64227,64228],{"class":68,"line":34435},[66,64229,109],{"emptyLinePlaceholder":108},[66,64231,64232,64234,64236],{"class":68,"line":34441},[66,64233,413],{"class":76},[66,64235,53584],{"class":53084},[66,64237,53091],{"class":76},[66,64239,64240,64242,64244,64246,64248,64251],{"class":68,"line":34447},[66,64241,53928],{"class":76},[66,64243,53395],{"class":53084},[66,64245,55268],{"class":3793},[66,64247,99],{"class":76},[66,64249,64250],{"class":356},"\"wrapper\"",[66,64252,53091],{"class":76},[66,64254,64255,64257,64259,64261,64263,64266,64268,64270],{"class":68,"line":34458},[66,64256,53125],{"class":76},[66,64258,257],{"class":53084},[66,64260,55268],{"class":3793},[66,64262,99],{"class":76},[66,64264,64265],{"class":356},"\"avatar\"",[66,64267,57095],{"class":76},[66,64269,257],{"class":53084},[66,64271,53091],{"class":76},[66,64273,64274,64276,64278,64280,64282,64285,64287,64289,64292,64294,64296,64298,64301,64303,64306,64308,64310],{"class":68,"line":34464},[66,64275,53125],{"class":76},[66,64277,56069],{"class":53084},[66,64279,16763],{"class":3793},[66,64281,99],{"class":76},[66,64283,64284],{"class":356},"\"tx\"",[66,64286,62799],{"class":3793},[66,64288,99],{"class":76},[66,64290,64291],{"class":356},"\"发一条友善的评论\"",[66,64293,56092],{"class":3793},[66,64295,99],{"class":76},[66,64297,5519],{"class":356},[66,64299,64300],{"class":3793}," maxlength",[66,64302,99],{"class":76},[66,64304,64305],{"class":356},"\"200\"",[66,64307,57095],{"class":76},[66,64309,56069],{"class":53084},[66,64311,53091],{"class":76},[66,64313,64314,64316,64318,64321,64323],{"class":68,"line":34484},[66,64315,53125],{"class":76},[66,64317,55668],{"class":53084},[66,64319,64320],{"class":76},">发布\u003C\u002F",[66,64322,55668],{"class":53084},[66,64324,53091],{"class":76},[66,64326,64327,64329,64331],{"class":68,"line":34490},[66,64328,54199],{"class":76},[66,64330,53395],{"class":53084},[66,64332,53091],{"class":76},[66,64334,64335,64337,64339,64341,64343,64345],{"class":68,"line":34501},[66,64336,53928],{"class":76},[66,64338,53395],{"class":53084},[66,64340,55268],{"class":3793},[66,64342,99],{"class":76},[66,64344,64250],{"class":356},[66,64346,53091],{"class":76},[66,64348,64349,64351,64353,64355,64357,64360,64363,64365],{"class":68,"line":34507},[66,64350,53125],{"class":76},[66,64352,66],{"class":53084},[66,64354,55268],{"class":3793},[66,64356,99],{"class":76},[66,64358,64359],{"class":356},"\"total\"",[66,64361,64362],{"class":76},">0\u002F200字\u003C\u002F",[66,64364,66],{"class":53084},[66,64366,53091],{"class":76},[66,64368,64369,64371,64373],{"class":68,"line":34513},[66,64370,54199],{"class":76},[66,64372,53395],{"class":53084},[66,64374,53091],{"class":76},[66,64376,64377,64379,64381,64383,64385,64388],{"class":68,"line":34519},[66,64378,53928],{"class":76},[66,64380,53395],{"class":53084},[66,64382,55268],{"class":3793},[66,64384,99],{"class":76},[66,64386,64387],{"class":356},"\"list\"",[66,64389,53091],{"class":76},[66,64391,64392,64394,64396,64398,64400,64403,64406,64408,64411],{"class":68,"line":34525},[66,64393,53125],{"class":76},[66,64395,53395],{"class":53084},[66,64397,55268],{"class":3793},[66,64399,99],{"class":76},[66,64401,64402],{"class":356},"\"item\"",[66,64404,64405],{"class":3793}," style",[66,64407,99],{"class":76},[66,64409,64410],{"class":356},"\"display: none;\"",[66,64412,53091],{"class":76},[66,64414,64415,64417,64419,64421,64423,64425,64427,64429],{"class":68,"line":34531},[66,64416,57015],{"class":76},[66,64418,257],{"class":53084},[66,64420,55268],{"class":3793},[66,64422,99],{"class":76},[66,64424,64265],{"class":356},[66,64426,57095],{"class":76},[66,64428,257],{"class":53084},[66,64430,53091],{"class":76},[66,64432,64433,64435,64437,64439,64441,64444],{"class":68,"line":34537},[66,64434,57015],{"class":76},[66,64436,53395],{"class":53084},[66,64438,55268],{"class":3793},[66,64440,99],{"class":76},[66,64442,64443],{"class":356},"\"info\"",[66,64445,53091],{"class":76},[66,64447,64448,64450,64452,64454,64456,64459,64462,64464],{"class":68,"line":34543},[66,64449,57083],{"class":76},[66,64451,19],{"class":53084},[66,64453,55268],{"class":3793},[66,64455,99],{"class":76},[66,64457,64458],{"class":356},"\"name\"",[66,64460,64461],{"class":76},">清风徐来\u003C\u002F",[66,64463,19],{"class":53084},[66,64465,53091],{"class":76},[66,64467,64468,64470,64472,64474,64476,64479,64482,64484],{"class":68,"line":34563},[66,64469,57083],{"class":76},[66,64471,19],{"class":53084},[66,64473,55268],{"class":3793},[66,64475,99],{"class":76},[66,64477,64478],{"class":356},"\"text\"",[66,64480,64481],{"class":76},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[66,64483,19],{"class":53084},[66,64485,53091],{"class":76},[66,64487,64488,64490,64492,64494,64496,64499,64502,64504],{"class":68,"line":34569},[66,64489,57083],{"class":76},[66,64491,19],{"class":53084},[66,64493,55268],{"class":3793},[66,64495,99],{"class":76},[66,64497,64498],{"class":356},"\"time\"",[66,64500,64501],{"class":76},">2022-10-10 20:29:21\u003C\u002F",[66,64503,19],{"class":53084},[66,64505,53091],{"class":76},[66,64507,64508,64510,64512],{"class":68,"line":34585},[66,64509,57188],{"class":76},[66,64511,53395],{"class":53084},[66,64513,53091],{"class":76},[66,64515,64516,64518,64520],{"class":68,"line":34591},[66,64517,53560],{"class":76},[66,64519,53395],{"class":53084},[66,64521,53091],{"class":76},[66,64523,64524,64526,64528],{"class":68,"line":34605},[66,64525,54199],{"class":76},[66,64527,53395],{"class":53084},[66,64529,53091],{"class":76},[66,64531,64532,64534,64536],{"class":68,"line":34611},[66,64533,53928],{"class":76},[66,64535,53597],{"class":53084},[66,64537,53091],{"class":76},[66,64539,64540,64542,64545,64547,64549,64551,64553,64556],{"class":68,"line":34626},[66,64541,13027],{"class":72},[66,64543,64544],{"class":102}," tx",[66,64546,15369],{"class":72},[66,64548,56177],{"class":76},[66,64550,56180],{"class":3793},[66,64552,348],{"class":76},[66,64554,64555],{"class":356},"'#tx'",[66,64557,313],{"class":76},[66,64559,64560,64562,64565,64567,64569,64571,64573,64576],{"class":68,"line":34632},[66,64561,13027],{"class":72},[66,64563,64564],{"class":102}," total",[66,64566,15369],{"class":72},[66,64568,56177],{"class":76},[66,64570,56180],{"class":3793},[66,64572,348],{"class":76},[66,64574,64575],{"class":356},"'.total'",[66,64577,313],{"class":76},[66,64579,64580],{"class":68,"line":34641},[66,64581,64582],{"class":758},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[66,64584,64585,64588,64590,64592,64594,64596,64598],{"class":68,"line":34647},[66,64586,64587],{"class":76},"    tx.",[66,64589,59593],{"class":3793},[66,64591,348],{"class":76},[66,64593,63106],{"class":356},[66,64595,307],{"class":76},[66,64597,56230],{"class":72},[66,64599,56233],{"class":76},[66,64601,64602,64605,64607],{"class":68,"line":34656},[66,64603,64604],{"class":76},"      total.style.opacity ",[66,64606,99],{"class":72},[66,64608,103],{"class":102},[66,64610,64611],{"class":68,"line":34662},[66,64612,35249],{"class":76},[66,64614,64615],{"class":68,"line":34668},[66,64616,64617],{"class":758},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[66,64619,64620,64622,64624,64626,64628,64630,64632],{"class":68,"line":34677},[66,64621,64587],{"class":76},[66,64623,59593],{"class":3793},[66,64625,348],{"class":76},[66,64627,63167],{"class":356},[66,64629,307],{"class":76},[66,64631,56230],{"class":72},[66,64633,56233],{"class":76},[66,64635,64636,64638,64640],{"class":68,"line":34683},[66,64637,64604],{"class":76},[66,64639,99],{"class":72},[66,64641,197],{"class":102},[66,64643,64644],{"class":68,"line":34694},[66,64645,35249],{"class":76},[66,64647,64648],{"class":68,"line":34700},[66,64649,64650],{"class":758},"    \u002F\u002F 3. 检测用户输入\n",[66,64652,64653,64655,64657,64659,64662,64664,64666],{"class":68,"line":34719},[66,64654,64587],{"class":76},[66,64656,59593],{"class":3793},[66,64658,348],{"class":76},[66,64660,64661],{"class":356},"'input'",[66,64663,307],{"class":76},[66,64665,56230],{"class":72},[66,64667,56233],{"class":76},[66,64669,64670],{"class":68,"line":34725},[66,64671,64672],{"class":758},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[66,64674,64675,64678,64680,64683,64686,64688,64691,64693,64695],{"class":68,"line":34736},[66,64676,64677],{"class":76},"      total.innerHTML ",[66,64679,99],{"class":72},[66,64681,64682],{"class":356}," `${",[66,64684,64685],{"class":76},"tx",[66,64687,2537],{"class":356},[66,64689,64690],{"class":76},"value",[66,64692,2537],{"class":356},[66,64694,53752],{"class":102},[66,64696,64697],{"class":356},"}\u002F200字`\n",[66,64699,64700],{"class":68,"line":34742},[66,64701,35249],{"class":76},[66,64703,64704],{"class":68,"line":34762},[66,64705,109],{"emptyLinePlaceholder":108},[66,64707,64708],{"class":68,"line":34778},[66,64709,64710],{"class":758},"    \u002F\u002F const str = 'andy'\n",[66,64712,64713],{"class":68,"line":34784},[66,64714,64715],{"class":758},"    \u002F\u002F console.log(str.length)\n",[66,64717,64718,64720,64722],{"class":68,"line":34798},[66,64719,54199],{"class":76},[66,64721,53597],{"class":53084},[66,64723,53091],{"class":76},[66,64725,64726,64728,64730],{"class":68,"line":34804},[66,64727,53569],{"class":76},[66,64729,53584],{"class":53084},[66,64731,53091],{"class":76},[66,64733,64734],{"class":68,"line":34810},[66,64735,109],{"emptyLinePlaceholder":108},[66,64737,64738,64740,64742],{"class":68,"line":34821},[66,64739,53569],{"class":76},[66,64741,52419],{"class":53084},[66,64743,53091],{"class":76},[23801,64745,64747],{"id":64746},"_3254-change事件","3.2.5.4 change事件",[19,64749,64750],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,64752,64753],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,64755,64756],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[57,64758,64760],{"className":52417,"code":64759,"language":52419,"meta":62,"style":62},"\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",[23,64761,64762,64772,64786,64790,64798,64812,64832,64844,64852,64856,64864,64878,64886,64904,64922,64934,64938,64946,64954,64958],{"__ignoreMap":62},[66,64763,64764,64766,64768,64770],{"class":68,"line":69},[66,64765,53081],{"class":76},[66,64767,53085],{"class":53084},[66,64769,53088],{"class":3793},[66,64771,53091],{"class":76},[66,64773,64774,64776,64778,64780,64782,64784],{"class":68,"line":80},[66,64775,413],{"class":76},[66,64777,52419],{"class":53084},[66,64779,53100],{"class":3793},[66,64781,99],{"class":76},[66,64783,53105],{"class":356},[66,64785,53091],{"class":76},[66,64787,64788],{"class":68,"line":112},[66,64789,109],{"emptyLinePlaceholder":108},[66,64791,64792,64794,64796],{"class":68,"line":129},[66,64793,413],{"class":76},[66,64795,53118],{"class":53084},[66,64797,53091],{"class":76},[66,64799,64800,64802,64804,64806,64808,64810],{"class":68,"line":138},[66,64801,53928],{"class":76},[66,64803,53128],{"class":53084},[66,64805,53131],{"class":3793},[66,64807,99],{"class":76},[66,64809,53136],{"class":356},[66,64811,53091],{"class":76},[66,64813,64814,64816,64818,64820,64822,64824,64826,64828,64830],{"class":68,"line":227},[66,64815,53928],{"class":76},[66,64817,53128],{"class":53084},[66,64819,16724],{"class":3793},[66,64821,99],{"class":76},[66,64823,53175],{"class":356},[66,64825,53155],{"class":3793},[66,64827,99],{"class":76},[66,64829,53182],{"class":356},[66,64831,53091],{"class":76},[66,64833,64834,64836,64838,64840,64842],{"class":68,"line":236},[66,64835,53928],{"class":76},[66,64837,53191],{"class":53084},[66,64839,53194],{"class":76},[66,64841,53191],{"class":53084},[66,64843,53091],{"class":76},[66,64845,64846,64848,64850],{"class":68,"line":241},[66,64847,53569],{"class":76},[66,64849,53118],{"class":53084},[66,64851,53091],{"class":76},[66,64853,64854],{"class":68,"line":372},[66,64855,109],{"emptyLinePlaceholder":108},[66,64857,64858,64860,64862],{"class":68,"line":377},[66,64859,413],{"class":76},[66,64861,53584],{"class":53084},[66,64863,53091],{"class":76},[66,64865,64866,64868,64870,64872,64874,64876],{"class":68,"line":392},[66,64867,53928],{"class":76},[66,64869,351],{"class":53084},[66,64871,55605],{"class":3793},[66,64873,99],{"class":76},[66,64875,64478],{"class":356},[66,64877,53091],{"class":76},[66,64879,64880,64882,64884],{"class":68,"line":405},[66,64881,53928],{"class":76},[66,64883,53597],{"class":53084},[66,64885,53091],{"class":76},[66,64887,64888,64890,64892,64894,64896,64898,64900,64902],{"class":68,"line":418},[66,64889,13027],{"class":72},[66,64891,1532],{"class":102},[66,64893,15369],{"class":72},[66,64895,56177],{"class":76},[66,64897,56180],{"class":3793},[66,64899,348],{"class":76},[66,64901,64661],{"class":356},[66,64903,313],{"class":76},[66,64905,64906,64909,64911,64913,64916,64918,64920],{"class":68,"line":430},[66,64907,64908],{"class":76},"    input.",[66,64910,59593],{"class":3793},[66,64912,348],{"class":76},[66,64914,64915],{"class":356},"'change'",[66,64917,307],{"class":76},[66,64919,56230],{"class":72},[66,64921,56233],{"class":76},[66,64923,64924,64926,64928,64930,64932],{"class":68,"line":438},[66,64925,60024],{"class":76},[66,64927,60027],{"class":3793},[66,64929,348],{"class":76},[66,64931,2572],{"class":102},[66,64933,313],{"class":76},[66,64935,64936],{"class":68,"line":465},[66,64937,35249],{"class":76},[66,64939,64940,64942,64944],{"class":68,"line":1805},[66,64941,54199],{"class":76},[66,64943,53597],{"class":53084},[66,64945,53091],{"class":76},[66,64947,64948,64950,64952],{"class":68,"line":1817},[66,64949,53569],{"class":76},[66,64951,53584],{"class":53084},[66,64953,53091],{"class":76},[66,64955,64956],{"class":68,"line":1822},[66,64957,109],{"emptyLinePlaceholder":108},[66,64959,64960,64962,64964],{"class":68,"line":1829},[66,64961,53569],{"class":76},[66,64963,52419],{"class":53084},[66,64965,53091],{"class":76},[19,64967,64968],{},"总结：内容发生改变才回去触发",[484,64970,64972],{"id":64971},"_326-事件对象","3.2.6 事件对象",[23801,64974,64976],{"id":64975},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,64978,64979],{},[3304,64980],{"alt":62,"src":64981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,64983,64984],{},[3304,64985],{"alt":62,"src":64986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,64988,64989],{},"点击一次，就输出了事件对象，它是个对象",[19,64991,64992],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,64994,64995],{},[3304,64996],{"alt":62,"src":64997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[23801,64999,65001],{"id":65000},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,65003,65004],{},[3304,65005],{"alt":62,"src":65006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,65008,65009],{},"实现按特殊字符才是实现打印输出效果：",[57,65011,65013],{"className":54849,"code":65012,"language":54851,"meta":62,"style":62},"\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",[23,65014,65015,65023,65028,65042,65050,65055,65060,65065,65070,65075,65080,65085,65090,65095,65099,65103,65111],{"__ignoreMap":62},[66,65016,65017,65019,65021],{"class":68,"line":69},[66,65018,413],{"class":76},[66,65020,53584],{"class":53084},[66,65022,53091],{"class":76},[66,65024,65025],{"class":68,"line":80},[66,65026,65027],{"class":758},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[66,65029,65030,65032,65034,65036,65038,65040],{"class":68,"line":112},[66,65031,53928],{"class":76},[66,65033,351],{"class":53084},[66,65035,55605],{"class":3793},[66,65037,99],{"class":76},[66,65039,64478],{"class":356},[66,65041,53091],{"class":76},[66,65043,65044,65046,65048],{"class":68,"line":129},[66,65045,53928],{"class":76},[66,65047,53597],{"class":53084},[66,65049,53091],{"class":76},[66,65051,65052],{"class":68,"line":138},[66,65053,65054],{"class":76},"    \u002F\u002F const btn = document.querySelector('button')\n",[66,65056,65057],{"class":68,"line":227},[66,65058,65059],{"class":76},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[66,65061,65062],{"class":68,"line":236},[66,65063,65064],{"class":76},"    \u002F\u002F   console.log(e);\n",[66,65066,65067],{"class":68,"line":241},[66,65068,65069],{"class":76},"    \u002F\u002F })\n",[66,65071,65072],{"class":68,"line":372},[66,65073,65074],{"class":76},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[66,65076,65077],{"class":68,"line":377},[66,65078,65079],{"class":76},"    const input = document.querySelector('input')\n",[66,65081,65082],{"class":68,"line":392},[66,65083,65084],{"class":76},"    input.addEventListener('keyup', function (e) {\n",[66,65086,65087],{"class":68,"line":405},[66,65088,65089],{"class":76},"      if (e.key === 'Enter') {\n",[66,65091,65092],{"class":68,"line":418},[66,65093,65094],{"class":76},"        console.log('我按下了回车键')\n",[66,65096,65097],{"class":68,"line":430},[66,65098,54180],{"class":76},[66,65100,65101],{"class":68,"line":438},[66,65102,35249],{"class":76},[66,65104,65105,65107,65109],{"class":68,"line":465},[66,65106,54199],{"class":76},[66,65108,53597],{"class":53084},[66,65110,53091],{"class":76},[66,65112,65113,65115,65117],{"class":68,"line":1805},[66,65114,53569],{"class":76},[66,65116,53584],{"class":53084},[66,65118,53091],{"class":76},[23801,65120,65122],{"id":65121},"_3263-trim方法","3.2.6.3 trim方法",[19,65124,65125],{},[3304,65126],{"alt":62,"src":65127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,65129,65130],{},[3304,65131],{"alt":62,"src":65132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,65134,65135],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,65137,65138],{},"str.trim()",[484,65140,65142],{"id":65141},"_327-环境对象","3.2.7 环境对象",[19,65144,65145],{},[3304,65146],{"alt":62,"src":65147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,65149,65150],{},[3304,65151],{"alt":62,"src":65152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,65154,65155],{},[3304,65156],{"alt":62,"src":65157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,65159,65160],{},"实际函数调用是window.fn()",[19,65162,65163],{},"普通函数里面this指向的是window",[2982,65165,65166,65169,65172],{},[34,65167,65168],{},"在普通函数下，this指向的是window",[34,65170,65171],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[34,65173,65174],{},"箭头函数没有this",[19,65176,65177],{},"粗略记法就是：谁调用，this就指向谁",[19,65179,65180],{},[3304,65181],{"alt":62,"src":65182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,65184,65185],{},[3304,65186],{"alt":62,"src":65187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,65189,65190],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,65192,65193],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[57,65195,65197],{"className":54849,"code":65196,"language":54851,"meta":62,"style":62},"\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",[23,65198,65199,65207,65219,65227,65232,65237,65242,65247,65251,65259],{"__ignoreMap":62},[66,65200,65201,65203,65205],{"class":68,"line":69},[66,65202,413],{"class":76},[66,65204,53584],{"class":53084},[66,65206,53091],{"class":76},[66,65208,65209,65211,65213,65215,65217],{"class":68,"line":80},[66,65210,53928],{"class":76},[66,65212,55668],{"class":53084},[66,65214,55674],{"class":76},[66,65216,55668],{"class":53084},[66,65218,53091],{"class":76},[66,65220,65221,65223,65225],{"class":68,"line":112},[66,65222,53928],{"class":76},[66,65224,53597],{"class":53084},[66,65226,53091],{"class":76},[66,65228,65229],{"class":68,"line":129},[66,65230,65231],{"class":76},"    const button = document.querySelector('button')\n",[66,65233,65234],{"class":68,"line":138},[66,65235,65236],{"class":76},"    button.addEventListener('click', function () {\n",[66,65238,65239],{"class":68,"line":227},[66,65240,65241],{"class":76},"      \u002F\u002F console.log(this);\n",[66,65243,65244],{"class":68,"line":236},[66,65245,65246],{"class":76},"      this.style.color = 'pink'\n",[66,65248,65249],{"class":68,"line":241},[66,65250,35249],{"class":76},[66,65252,65253,65255,65257],{"class":68,"line":372},[66,65254,54199],{"class":76},[66,65256,53597],{"class":53084},[66,65258,53091],{"class":76},[66,65260,65261,65263,65265],{"class":68,"line":377},[66,65262,53569],{"class":76},[66,65264,53584],{"class":53084},[66,65266,53091],{"class":76},[484,65268,65270],{"id":65269},"_328-回调函数","3.2.8 回调函数",[19,65272,65273],{},[3304,65274],{"alt":62,"src":65275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,65277,65278],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,65280,13138],{},[2982,65282,65283,65286,65289],{},[34,65284,65285],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[34,65287,65288],{},"回调函数本质还是函数，只不过把它当成参数使用",[34,65290,65291],{},"使用匿名函数做为回调函数比较常见",[484,65293,65295],{"id":65294},"_329-tab栏切换","3.2.9 tab栏切换",[19,65297,65298],{},[3304,65299],{"alt":62,"src":65300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[57,65302,65304],{"className":52417,"code":65303,"language":52419,"meta":62,"style":62},"\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",[23,65305,65306,65316,65330,65334,65342,65356,65376,65396,65409,65417,65423,65433,65443,65447,65451,65458,65471,65484,65496,65512,65516,65520,65527,65539,65551,65563,65573,65583,65587,65591,65600,65612,65623,65635,65639,65643,65651,65661,65671,65681,65685,65689,65699,65713,65725,65729,65733,65745,65756,65773,65783,65787,65791,65806,65817,65827,65831,65835,65842,65857,65861,65865,65873,65883,65887,65891,65900,65910,65914,65922,65930,65934,65942,65957,65972,65985,65993,66027,66054,66081,66108,66135,66143,66151,66166,66203,66238,66273,66308,66343,66351,66359,66367,66372,66377,66397,66402,66431,66436,66441,66459,66464,66469,66474,66496,66501,66517,66521,66526,66531,66552,66557,66586,66590,66595,66599,66607,66615,66619],{"__ignoreMap":62},[66,65307,65308,65310,65312,65314],{"class":68,"line":69},[66,65309,53081],{"class":76},[66,65311,53085],{"class":53084},[66,65313,53088],{"class":3793},[66,65315,53091],{"class":76},[66,65317,65318,65320,65322,65324,65326,65328],{"class":68,"line":80},[66,65319,413],{"class":76},[66,65321,52419],{"class":53084},[66,65323,53100],{"class":3793},[66,65325,99],{"class":76},[66,65327,53105],{"class":356},[66,65329,53091],{"class":76},[66,65331,65332],{"class":68,"line":112},[66,65333,109],{"emptyLinePlaceholder":108},[66,65335,65336,65338,65340],{"class":68,"line":129},[66,65337,413],{"class":76},[66,65339,53118],{"class":53084},[66,65341,53091],{"class":76},[66,65343,65344,65346,65348,65350,65352,65354],{"class":68,"line":138},[66,65345,53928],{"class":76},[66,65347,53128],{"class":53084},[66,65349,53131],{"class":3793},[66,65351,99],{"class":76},[66,65353,53136],{"class":356},[66,65355,60907],{"class":76},[66,65357,65358,65360,65362,65364,65366,65368,65370,65372,65374],{"class":68,"line":227},[66,65359,53928],{"class":76},[66,65361,53128],{"class":53084},[66,65363,53147],{"class":3793},[66,65365,99],{"class":76},[66,65367,53152],{"class":356},[66,65369,53155],{"class":3793},[66,65371,99],{"class":76},[66,65373,53160],{"class":356},[66,65375,60907],{"class":76},[66,65377,65378,65380,65382,65384,65386,65388,65390,65392,65394],{"class":68,"line":236},[66,65379,53928],{"class":76},[66,65381,53128],{"class":53084},[66,65383,16724],{"class":3793},[66,65385,99],{"class":76},[66,65387,53175],{"class":356},[66,65389,53155],{"class":3793},[66,65391,99],{"class":76},[66,65393,53182],{"class":356},[66,65395,60907],{"class":76},[66,65397,65398,65400,65402,65405,65407],{"class":68,"line":241},[66,65399,53928],{"class":76},[66,65401,53191],{"class":53084},[66,65403,65404],{"class":76},">tab栏切换\u003C\u002F",[66,65406,53191],{"class":53084},[66,65408,53091],{"class":76},[66,65410,65411,65413,65415],{"class":68,"line":372},[66,65412,53928],{"class":76},[66,65414,1903],{"class":53084},[66,65416,53091],{"class":76},[66,65418,65419,65421],{"class":68,"line":377},[66,65420,8214],{"class":53084},[66,65422,17375],{"class":76},[66,65424,65425,65427,65429,65431],{"class":68,"line":392},[66,65426,56487],{"class":102},[66,65428,53221],{"class":76},[66,65430,2183],{"class":102},[66,65432,3135],{"class":76},[66,65434,65435,65437,65439,65441],{"class":68,"line":405},[66,65436,56476],{"class":102},[66,65438,53221],{"class":76},[66,65440,2183],{"class":102},[66,65442,3135],{"class":76},[66,65444,65445],{"class":68,"line":418},[66,65446,4013],{"class":76},[66,65448,65449],{"class":68,"line":430},[66,65450,109],{"emptyLinePlaceholder":108},[66,65452,65453,65456],{"class":68,"line":438},[66,65454,65455],{"class":3793},"    .tab",[66,65457,17375],{"class":76},[66,65459,65460,65462,65464,65467,65469],{"class":68,"line":465},[66,65461,56552],{"class":102},[66,65463,53221],{"class":76},[66,65465,65466],{"class":102},"590",[66,65468,53276],{"class":72},[66,65470,3135],{"class":76},[66,65472,65473,65475,65477,65480,65482],{"class":68,"line":1805},[66,65474,56566],{"class":102},[66,65476,53221],{"class":76},[66,65478,65479],{"class":102},"340",[66,65481,53276],{"class":72},[66,65483,3135],{"class":76},[66,65485,65486,65488,65490,65492,65494],{"class":68,"line":1817},[66,65487,56487],{"class":102},[66,65489,53221],{"class":76},[66,65491,2679],{"class":102},[66,65493,53276],{"class":72},[66,65495,3135],{"class":76},[66,65497,65498,65500,65502,65504,65506,65508,65510],{"class":68,"line":1822},[66,65499,63756],{"class":102},[66,65501,53221],{"class":76},[66,65503,304],{"class":102},[66,65505,53276],{"class":72},[66,65507,53305],{"class":102},[66,65509,64023],{"class":102},[66,65511,3135],{"class":76},[66,65513,65514],{"class":68,"line":1829},[66,65515,4013],{"class":76},[66,65517,65518],{"class":68,"line":3529},[66,65519,109],{"emptyLinePlaceholder":108},[66,65521,65522,65525],{"class":68,"line":3557},[66,65523,65524],{"class":3793},"    .tab-nav",[66,65526,17375],{"class":76},[66,65528,65529,65531,65533,65535,65537],{"class":68,"line":3562},[66,65530,56552],{"class":102},[66,65532,53221],{"class":76},[66,65534,310],{"class":102},[66,65536,953],{"class":72},[66,65538,3135],{"class":76},[66,65540,65541,65543,65545,65547,65549],{"class":68,"line":3579},[66,65542,56566],{"class":102},[66,65544,53221],{"class":76},[66,65546,2885],{"class":102},[66,65548,53276],{"class":72},[66,65550,3135],{"class":76},[66,65552,65553,65555,65557,65559,65561],{"class":68,"line":3584},[66,65554,59139],{"class":102},[66,65556,53221],{"class":76},[66,65558,2885],{"class":102},[66,65560,53276],{"class":72},[66,65562,3135],{"class":76},[66,65564,65565,65567,65569,65571],{"class":68,"line":3589},[66,65566,56790],{"class":102},[66,65568,53221],{"class":76},[66,65570,53261],{"class":102},[66,65572,3135],{"class":76},[66,65574,65575,65577,65579,65581],{"class":68,"line":3594},[66,65576,56801],{"class":102},[66,65578,53221],{"class":76},[66,65580,53452],{"class":102},[66,65582,3135],{"class":76},[66,65584,65585],{"class":68,"line":3608},[66,65586,4013],{"class":76},[66,65588,65589],{"class":68,"line":3613},[66,65590,109],{"emptyLinePlaceholder":108},[66,65592,65593,65595,65598],{"class":68,"line":4401},[66,65594,65524],{"class":3793},[66,65596,65597],{"class":53084}," h3",[66,65599,17375],{"class":76},[66,65601,65602,65604,65606,65608,65610],{"class":68,"line":4415},[66,65603,56703],{"class":102},[66,65605,53221],{"class":76},[66,65607,2779],{"class":102},[66,65609,53276],{"class":72},[66,65611,3135],{"class":76},[66,65613,65614,65616,65618,65621],{"class":68,"line":4423},[66,65615,64113],{"class":102},[66,65617,53221],{"class":76},[66,65619,65620],{"class":102},"normal",[66,65622,3135],{"class":76},[66,65624,65625,65627,65629,65631,65633],{"class":68,"line":4428},[66,65626,63779],{"class":102},[66,65628,53221],{"class":76},[66,65630,2679],{"class":102},[66,65632,53276],{"class":72},[66,65634,3135],{"class":76},[66,65636,65637],{"class":68,"line":4434},[66,65638,4013],{"class":76},[66,65640,65641],{"class":68,"line":4440},[66,65642,109],{"emptyLinePlaceholder":108},[66,65644,65645,65647,65649],{"class":68,"line":4445},[66,65646,65524],{"class":3793},[66,65648,63071],{"class":53084},[66,65650,17375],{"class":76},[66,65652,65653,65655,65657,65659],{"class":68,"line":9759},[66,65654,56513],{"class":102},[66,65656,53221],{"class":76},[66,65658,56518],{"class":102},[66,65660,3135],{"class":76},[66,65662,65663,65665,65667,65669],{"class":68,"line":9783},[66,65664,56790],{"class":102},[66,65666,53221],{"class":76},[66,65668,53261],{"class":102},[66,65670,3135],{"class":76},[66,65672,65673,65675,65677,65679],{"class":68,"line":9788},[66,65674,56801],{"class":102},[66,65676,53221],{"class":76},[66,65678,53364],{"class":102},[66,65680,3135],{"class":76},[66,65682,65683],{"class":68,"line":9794},[66,65684,4013],{"class":76},[66,65686,65687],{"class":68,"line":9821},[66,65688,109],{"emptyLinePlaceholder":108},[66,65690,65691,65693,65695,65697],{"class":68,"line":9826},[66,65692,65524],{"class":3793},[66,65694,63071],{"class":53084},[66,65696,56856],{"class":53084},[66,65698,17375],{"class":76},[66,65700,65701,65703,65705,65707,65709,65711],{"class":68,"line":9832},[66,65702,56487],{"class":102},[66,65704,53221],{"class":76},[66,65706,2183],{"class":102},[66,65708,10761],{"class":102},[66,65710,53276],{"class":72},[66,65712,3135],{"class":76},[66,65714,65715,65717,65719,65721,65723],{"class":68,"line":9844},[66,65716,56703],{"class":102},[66,65718,53221],{"class":76},[66,65720,2528],{"class":102},[66,65722,53276],{"class":72},[66,65724,3135],{"class":76},[66,65726,65727],{"class":68,"line":9856},[66,65728,4013],{"class":76},[66,65730,65731],{"class":68,"line":9868},[66,65732,109],{"emptyLinePlaceholder":108},[66,65734,65735,65737,65739,65741,65743],{"class":68,"line":11523},[66,65736,65524],{"class":3793},[66,65738,63071],{"class":53084},[66,65740,56856],{"class":53084},[66,65742,3240],{"class":53084},[66,65744,17375],{"class":76},[66,65746,65747,65750,65752,65754],{"class":68,"line":11548},[66,65748,65749],{"class":102},"      text-decoration",[66,65751,53221],{"class":76},[66,65753,56518],{"class":102},[66,65755,3135],{"class":76},[66,65757,65758,65760,65762,65764,65766,65768,65771],{"class":68,"line":11571},[66,65759,64011],{"class":102},[66,65761,53221],{"class":76},[66,65763,795],{"class":102},[66,65765,53276],{"class":72},[66,65767,53305],{"class":102},[66,65769,65770],{"class":102}," transparent",[66,65772,3135],{"class":76},[66,65774,65775,65777,65779,65781],{"class":68,"line":11595},[66,65776,59196],{"class":102},[66,65778,53221],{"class":76},[66,65780,64148],{"class":102},[66,65782,3135],{"class":76},[66,65784,65785],{"class":68,"line":11600},[66,65786,4013],{"class":76},[66,65788,65789],{"class":68,"line":11605},[66,65790,109],{"emptyLinePlaceholder":108},[66,65792,65793,65795,65797,65799,65801,65804],{"class":68,"line":11610},[66,65794,65524],{"class":3793},[66,65796,63071],{"class":53084},[66,65798,56856],{"class":53084},[66,65800,3240],{"class":53084},[66,65802,65803],{"class":3793},".active",[66,65805,17375],{"class":76},[66,65807,65808,65810,65812,65815],{"class":68,"line":11619},[66,65809,63570],{"class":102},[66,65811,53221],{"class":76},[66,65813,65814],{"class":102},"#e1251b",[66,65816,3135],{"class":76},[66,65818,65819,65821,65823,65825],{"class":68,"line":11624},[66,65820,59196],{"class":102},[66,65822,53221],{"class":76},[66,65824,65814],{"class":102},[66,65826,3135],{"class":76},[66,65828,65829],{"class":68,"line":11630},[66,65830,4013],{"class":76},[66,65832,65833],{"class":68,"line":11651},[66,65834,109],{"emptyLinePlaceholder":108},[66,65836,65837,65840],{"class":68,"line":11657},[66,65838,65839],{"class":3793},"    .tab-content",[66,65841,17375],{"class":76},[66,65843,65844,65846,65848,65850,65853,65855],{"class":68,"line":11671},[66,65845,56476],{"class":102},[66,65847,53221],{"class":76},[66,65849,2183],{"class":102},[66,65851,65852],{"class":102}," 16",[66,65854,53276],{"class":72},[66,65856,3135],{"class":76},[66,65858,65859],{"class":68,"line":11677},[66,65860,4013],{"class":76},[66,65862,65863],{"class":68,"line":11704},[66,65864,109],{"emptyLinePlaceholder":108},[66,65866,65867,65869,65871],{"class":68,"line":11713},[66,65868,65839],{"class":3793},[66,65870,63953],{"class":3793},[66,65872,17375],{"class":76},[66,65874,65875,65877,65879,65881],{"class":68,"line":11719},[66,65876,56790],{"class":102},[66,65878,53221],{"class":76},[66,65880,56518],{"class":102},[66,65882,3135],{"class":76},[66,65884,65885],{"class":68,"line":11727},[66,65886,4013],{"class":76},[66,65888,65889],{"class":68,"line":11732},[66,65890,109],{"emptyLinePlaceholder":108},[66,65892,65893,65895,65898],{"class":68,"line":18407},[66,65894,65839],{"class":3793},[66,65896,65897],{"class":3793}," .item.active",[66,65899,17375],{"class":76},[66,65901,65902,65904,65906,65908],{"class":68,"line":18413},[66,65903,56790],{"class":102},[66,65905,53221],{"class":76},[66,65907,62648],{"class":102},[66,65909,3135],{"class":76},[66,65911,65912],{"class":68,"line":18436},[66,65913,4013],{"class":76},[66,65915,65916,65918,65920],{"class":68,"line":18442},[66,65917,54199],{"class":76},[66,65919,1903],{"class":53084},[66,65921,53091],{"class":76},[66,65923,65924,65926,65928],{"class":68,"line":18465},[66,65925,53569],{"class":76},[66,65927,53118],{"class":53084},[66,65929,53091],{"class":76},[66,65931,65932],{"class":68,"line":18479},[66,65933,109],{"emptyLinePlaceholder":108},[66,65935,65936,65938,65940],{"class":68,"line":18499},[66,65937,413],{"class":76},[66,65939,53584],{"class":53084},[66,65941,53091],{"class":76},[66,65943,65944,65946,65948,65950,65952,65955],{"class":68,"line":18505},[66,65945,53928],{"class":76},[66,65947,53395],{"class":53084},[66,65949,55268],{"class":3793},[66,65951,99],{"class":76},[66,65953,65954],{"class":356},"\"tab\"",[66,65956,53091],{"class":76},[66,65958,65959,65961,65963,65965,65967,65970],{"class":68,"line":18516},[66,65960,53125],{"class":76},[66,65962,53395],{"class":53084},[66,65964,55268],{"class":3793},[66,65966,99],{"class":76},[66,65968,65969],{"class":356},"\"tab-nav\"",[66,65971,53091],{"class":76},[66,65973,65974,65976,65978,65981,65983],{"class":68,"line":18539},[66,65975,57015],{"class":76},[66,65977,484],{"class":53084},[66,65979,65980],{"class":76},">每日特价\u003C\u002F",[66,65982,484],{"class":53084},[66,65984,53091],{"class":76},[66,65986,65987,65989,65991],{"class":68,"line":18561},[66,65988,57015],{"class":76},[66,65990,2982],{"class":53084},[66,65992,53091],{"class":76},[66,65994,65995,65997,65999,66001,66003,66005,66007,66009,66011,66013,66016,66019,66021,66023,66025],{"class":68,"line":18566},[66,65996,57083],{"class":76},[66,65998,34],{"class":53084},[66,66000,62831],{"class":76},[66,66002,2229],{"class":53084},[66,66004,55268],{"class":3793},[66,66006,99],{"class":76},[66,66008,61486],{"class":356},[66,66010,62836],{"class":3793},[66,66012,99],{"class":76},[66,66014,66015],{"class":356},"\"javascript:;\"",[66,66017,66018],{"class":76},">精选\u003C\u002F",[66,66020,2229],{"class":53084},[66,66022,57095],{"class":76},[66,66024,34],{"class":53084},[66,66026,53091],{"class":76},[66,66028,66029,66031,66033,66035,66037,66039,66041,66043,66046,66048,66050,66052],{"class":68,"line":18572},[66,66030,57083],{"class":76},[66,66032,34],{"class":53084},[66,66034,62831],{"class":76},[66,66036,2229],{"class":53084},[66,66038,62836],{"class":3793},[66,66040,99],{"class":76},[66,66042,66015],{"class":356},[66,66044,66045],{"class":76},">美食\u003C\u002F",[66,66047,2229],{"class":53084},[66,66049,57095],{"class":76},[66,66051,34],{"class":53084},[66,66053,53091],{"class":76},[66,66055,66056,66058,66060,66062,66064,66066,66068,66070,66073,66075,66077,66079],{"class":68,"line":18586},[66,66057,57083],{"class":76},[66,66059,34],{"class":53084},[66,66061,62831],{"class":76},[66,66063,2229],{"class":53084},[66,66065,62836],{"class":3793},[66,66067,99],{"class":76},[66,66069,66015],{"class":356},[66,66071,66072],{"class":76},">百货\u003C\u002F",[66,66074,2229],{"class":53084},[66,66076,57095],{"class":76},[66,66078,34],{"class":53084},[66,66080,53091],{"class":76},[66,66082,66083,66085,66087,66089,66091,66093,66095,66097,66100,66102,66104,66106],{"class":68,"line":18599},[66,66084,57083],{"class":76},[66,66086,34],{"class":53084},[66,66088,62831],{"class":76},[66,66090,2229],{"class":53084},[66,66092,62836],{"class":3793},[66,66094,99],{"class":76},[66,66096,66015],{"class":356},[66,66098,66099],{"class":76},">个护\u003C\u002F",[66,66101,2229],{"class":53084},[66,66103,57095],{"class":76},[66,66105,34],{"class":53084},[66,66107,53091],{"class":76},[66,66109,66110,66112,66114,66116,66118,66120,66122,66124,66127,66129,66131,66133],{"class":68,"line":18604},[66,66111,57083],{"class":76},[66,66113,34],{"class":53084},[66,66115,62831],{"class":76},[66,66117,2229],{"class":53084},[66,66119,62836],{"class":3793},[66,66121,99],{"class":76},[66,66123,66015],{"class":356},[66,66125,66126],{"class":76},">预告\u003C\u002F",[66,66128,2229],{"class":53084},[66,66130,57095],{"class":76},[66,66132,34],{"class":53084},[66,66134,53091],{"class":76},[66,66136,66137,66139,66141],{"class":68,"line":18618},[66,66138,57188],{"class":76},[66,66140,2982],{"class":53084},[66,66142,53091],{"class":76},[66,66144,66145,66147,66149],{"class":68,"line":18623},[66,66146,53560],{"class":76},[66,66148,53395],{"class":53084},[66,66150,53091],{"class":76},[66,66152,66153,66155,66157,66159,66161,66164],{"class":68,"line":18629},[66,66154,53125],{"class":76},[66,66156,53395],{"class":53084},[66,66158,55268],{"class":3793},[66,66160,99],{"class":76},[66,66162,66163],{"class":356},"\"tab-content\"",[66,66165,53091],{"class":76},[66,66167,66168,66170,66172,66174,66176,66179,66181,66183,66185,66187,66190,66192,66194,66196,66199,66201],{"class":68,"line":18634},[66,66169,57015],{"class":76},[66,66171,53395],{"class":53084},[66,66173,55268],{"class":3793},[66,66175,99],{"class":76},[66,66177,66178],{"class":356},"\"item active\"",[66,66180,62831],{"class":76},[66,66182,3304],{"class":53084},[66,66184,57020],{"class":3793},[66,66186,99],{"class":76},[66,66188,66189],{"class":356},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[66,66191,57028],{"class":3793},[66,66193,99],{"class":76},[66,66195,9463],{"class":356},[66,66197,66198],{"class":76}," \u002F>\u003C\u002F",[66,66200,53395],{"class":53084},[66,66202,53091],{"class":76},[66,66204,66205,66207,66209,66211,66213,66215,66217,66219,66221,66223,66226,66228,66230,66232,66234,66236],{"class":68,"line":18648},[66,66206,57015],{"class":76},[66,66208,53395],{"class":53084},[66,66210,55268],{"class":3793},[66,66212,99],{"class":76},[66,66214,64402],{"class":356},[66,66216,62831],{"class":76},[66,66218,3304],{"class":53084},[66,66220,57020],{"class":3793},[66,66222,99],{"class":76},[66,66224,66225],{"class":356},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[66,66227,57028],{"class":3793},[66,66229,99],{"class":76},[66,66231,9463],{"class":356},[66,66233,66198],{"class":76},[66,66235,53395],{"class":53084},[66,66237,53091],{"class":76},[66,66239,66240,66242,66244,66246,66248,66250,66252,66254,66256,66258,66261,66263,66265,66267,66269,66271],{"class":68,"line":18653},[66,66241,57015],{"class":76},[66,66243,53395],{"class":53084},[66,66245,55268],{"class":3793},[66,66247,99],{"class":76},[66,66249,64402],{"class":356},[66,66251,62831],{"class":76},[66,66253,3304],{"class":53084},[66,66255,57020],{"class":3793},[66,66257,99],{"class":76},[66,66259,66260],{"class":356},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[66,66262,57028],{"class":3793},[66,66264,99],{"class":76},[66,66266,9463],{"class":356},[66,66268,66198],{"class":76},[66,66270,53395],{"class":53084},[66,66272,53091],{"class":76},[66,66274,66275,66277,66279,66281,66283,66285,66287,66289,66291,66293,66296,66298,66300,66302,66304,66306],{"class":68,"line":18658},[66,66276,57015],{"class":76},[66,66278,53395],{"class":53084},[66,66280,55268],{"class":3793},[66,66282,99],{"class":76},[66,66284,64402],{"class":356},[66,66286,62831],{"class":76},[66,66288,3304],{"class":53084},[66,66290,57020],{"class":3793},[66,66292,99],{"class":76},[66,66294,66295],{"class":356},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[66,66297,57028],{"class":3793},[66,66299,99],{"class":76},[66,66301,9463],{"class":356},[66,66303,66198],{"class":76},[66,66305,53395],{"class":53084},[66,66307,53091],{"class":76},[66,66309,66310,66312,66314,66316,66318,66320,66322,66324,66326,66328,66331,66333,66335,66337,66339,66341],{"class":68,"line":18672},[66,66311,57015],{"class":76},[66,66313,53395],{"class":53084},[66,66315,55268],{"class":3793},[66,66317,99],{"class":76},[66,66319,64402],{"class":356},[66,66321,62831],{"class":76},[66,66323,3304],{"class":53084},[66,66325,57020],{"class":3793},[66,66327,99],{"class":76},[66,66329,66330],{"class":356},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[66,66332,57028],{"class":3793},[66,66334,99],{"class":76},[66,66336,9463],{"class":356},[66,66338,66198],{"class":76},[66,66340,53395],{"class":53084},[66,66342,53091],{"class":76},[66,66344,66345,66347,66349],{"class":68,"line":18684},[66,66346,53560],{"class":76},[66,66348,53395],{"class":53084},[66,66350,53091],{"class":76},[66,66352,66353,66355,66357],{"class":68,"line":18689},[66,66354,54199],{"class":76},[66,66356,53395],{"class":53084},[66,66358,53091],{"class":76},[66,66360,66361,66363,66365],{"class":68,"line":18702},[66,66362,53928],{"class":76},[66,66364,53597],{"class":53084},[66,66366,53091],{"class":76},[66,66368,66369],{"class":68,"line":18707},[66,66370,66371],{"class":758},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[66,66373,66374],{"class":68,"line":18712},[66,66375,66376],{"class":758},"    \u002F\u002F 1.1 获取 a 元素 \n",[66,66378,66379,66381,66384,66386,66388,66390,66392,66395],{"class":68,"line":18717},[66,66380,13027],{"class":72},[66,66382,66383],{"class":102}," as",[66,66385,15369],{"class":72},[66,66387,56177],{"class":76},[66,66389,57462],{"class":3793},[66,66391,348],{"class":76},[66,66393,66394],{"class":356},"'.tab-nav a'",[66,66396,313],{"class":76},[66,66398,66399],{"class":68,"line":18730},[66,66400,66401],{"class":758},"    \u002F\u002F console.log(as) \n",[66,66403,66404,66406,66408,66410,66412,66414,66416,66418,66420,66423,66425,66427,66429],{"class":68,"line":18735},[66,66405,1083],{"class":72},[66,66407,3492],{"class":76},[66,66409,53631],{"class":72},[66,66411,117],{"class":76},[66,66413,99],{"class":72},[66,66415,962],{"class":102},[66,66417,11254],{"class":76},[66,66419,413],{"class":72},[66,66421,66422],{"class":76}," as.",[66,66424,53752],{"class":102},[66,66426,5033],{"class":76},[66,66428,4118],{"class":72},[66,66430,14247],{"class":76},[66,66432,66433],{"class":68,"line":34423},[66,66434,66435],{"class":758},"      \u002F\u002F console.log(as[i])\n",[66,66437,66438],{"class":68,"line":34429},[66,66439,66440],{"class":758},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[66,66442,66443,66446,66448,66450,66453,66455,66457],{"class":68,"line":34435},[66,66444,66445],{"class":76},"      as[i].",[66,66447,59593],{"class":3793},[66,66449,348],{"class":76},[66,66451,66452],{"class":356},"'mouseenter'",[66,66454,307],{"class":76},[66,66456,56230],{"class":72},[66,66458,56233],{"class":76},[66,66460,66461],{"class":68,"line":34441},[66,66462,66463],{"class":758},"        \u002F\u002F console.log('鼠标经过')\n",[66,66465,66466],{"class":68,"line":34447},[66,66467,66468],{"class":758},"        \u002F\u002F 排他思想  \n",[66,66470,66471],{"class":68,"line":34458},[66,66472,66473],{"class":758},"        \u002F\u002F 干掉别人 移除类active\n",[66,66475,66476,66478,66480,66482,66485,66487,66489,66491,66494],{"class":68,"line":34464},[66,66477,53709],{"class":76},[66,66479,56180],{"class":3793},[66,66481,348],{"class":76},[66,66483,66484],{"class":356},"'.tab-nav .active'",[66,66486,58783],{"class":76},[66,66488,58786],{"class":3793},[66,66490,348],{"class":76},[66,66492,66493],{"class":356},"'active'",[66,66495,313],{"class":76},[66,66497,66498],{"class":68,"line":34484},[66,66499,66500],{"class":758},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[66,66502,66503,66506,66509,66511,66513,66515],{"class":68,"line":34490},[66,66504,66505],{"class":102},"        this",[66,66507,66508],{"class":76},".classList.",[66,66510,7146],{"class":3793},[66,66512,348],{"class":76},[66,66514,66493],{"class":356},[66,66516,313],{"class":76},[66,66518,66519],{"class":68,"line":34501},[66,66520,109],{"emptyLinePlaceholder":108},[66,66522,66523],{"class":68,"line":34507},[66,66524,66525],{"class":758},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[66,66527,66528],{"class":68,"line":34513},[66,66529,66530],{"class":758},"        \u002F\u002F 干掉别人\n",[66,66532,66533,66535,66537,66539,66542,66544,66546,66548,66550],{"class":68,"line":34519},[66,66534,53709],{"class":76},[66,66536,56180],{"class":3793},[66,66538,348],{"class":76},[66,66540,66541],{"class":356},"'.tab-content .active'",[66,66543,58783],{"class":76},[66,66545,58786],{"class":3793},[66,66547,348],{"class":76},[66,66549,66493],{"class":356},[66,66551,313],{"class":76},[66,66553,66554],{"class":68,"line":34525},[66,66555,66556],{"class":758},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[66,66558,66559,66561,66563,66565,66568,66570,66572,66574,66576,66578,66580,66582,66584],{"class":68,"line":34531},[66,66560,53709],{"class":76},[66,66562,56180],{"class":3793},[66,66564,348],{"class":76},[66,66566,66567],{"class":356},"`.tab-content .item:nth-child(${",[66,66569,257],{"class":76},[66,66571,47352],{"class":72},[66,66573,1187],{"class":102},[66,66575,58812],{"class":356},[66,66577,58783],{"class":76},[66,66579,7146],{"class":3793},[66,66581,348],{"class":76},[66,66583,66493],{"class":356},[66,66585,313],{"class":76},[66,66587,66588],{"class":68,"line":34537},[66,66589,109],{"emptyLinePlaceholder":108},[66,66591,66592],{"class":68,"line":34543},[66,66593,66594],{"class":76},"      })\n",[66,66596,66597],{"class":68,"line":34563},[66,66598,4013],{"class":76},[66,66600,66601,66603,66605],{"class":68,"line":34569},[66,66602,54199],{"class":76},[66,66604,53597],{"class":53084},[66,66606,53091],{"class":76},[66,66608,66609,66611,66613],{"class":68,"line":34585},[66,66610,53569],{"class":76},[66,66612,53584],{"class":53084},[66,66614,53091],{"class":76},[66,66616,66617],{"class":68,"line":34591},[66,66618,109],{"emptyLinePlaceholder":108},[66,66620,66621,66623,66625],{"class":68,"line":34605},[66,66622,53569],{"class":76},[66,66624,52419],{"class":53084},[66,66626,53091],{"class":76},[19,66628,66629],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,66631,66632],{},"在监听事件中，this指向的就是他的调用者",[19,66634,66635],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,66637,55502],{},[19,66639,66640],{},"(function () {",[19,66642,66643],{},"const list = document.querySelector('.xtx-elevator-list')",[19,66645,66646],{},"list.addEventListener('click', function (e) {",[19,66648,66649],{},"if (e.target.tagName === 'A') {",[19,66651,66652],{},"\u002F\u002F 排他思想",[19,66654,66655],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,66657,66658],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,66660,66661],{},"\u002F\u002F console.log(old);",[19,66663,66664],{},"\u002F\u002F 判断",[19,66666,66667],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,66669,66670],{},"if (old) old.classList.remove('active')",[19,66672,66673],{},"e.target.classList.add('active')",[19,66675,457],{},[19,66677,54246],{},[19,66679,66680],{},"})();",[484,66682,66684],{"id":66683},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[57,66686,66688],{"className":52417,"code":66687,"language":52419,"meta":62,"style":62},"\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",[23,66689,66690,66700,66704,66712,66716,66730,66744,66756,66764,66770,66780,66790,66794,66798,66805,66817,66828,66845,66858,66872,66882,66886,66890,66897,66908,66926,66936,66948,66952,66956,66963,66980,66991,67003,67007,67011,67018,67030,67034,67042,67050,67054,67062,67070,67078,67093,67137,67145,67158,67171,67184,67192,67200,67208,67236,67244,67256,67269,67282,67290,67298,67306,67332,67340,67353,67365,67378,67386,67394,67402,67428,67436,67449,67461,67474,67482,67490,67498,67503,67523,67528,67548,67553,67570,67575,67583,67588,67617,67630,67634,67638,67643,67647,67675,67680,67697,67702,67707,67712,67717,67743,67747,67751,67759,67767,67771],{"__ignoreMap":62},[66,66691,66692,66694,66696,66698],{"class":68,"line":69},[66,66693,53081],{"class":76},[66,66695,53085],{"class":53084},[66,66697,53088],{"class":3793},[66,66699,53091],{"class":76},[66,66701,66702],{"class":68,"line":80},[66,66703,109],{"emptyLinePlaceholder":108},[66,66705,66706,66708,66710],{"class":68,"line":112},[66,66707,413],{"class":76},[66,66709,52419],{"class":53084},[66,66711,53091],{"class":76},[66,66713,66714],{"class":68,"line":129},[66,66715,109],{"emptyLinePlaceholder":108},[66,66717,66718,66720,66722,66724,66726,66728],{"class":68,"line":138},[66,66719,413],{"class":76},[66,66721,53118],{"class":53084},[66,66723,53100],{"class":3793},[66,66725,99],{"class":76},[66,66727,53105],{"class":356},[66,66729,53091],{"class":76},[66,66731,66732,66734,66736,66738,66740,66742],{"class":68,"line":227},[66,66733,53928],{"class":76},[66,66735,53128],{"class":53084},[66,66737,53131],{"class":3793},[66,66739,99],{"class":76},[66,66741,53136],{"class":356},[66,66743,53091],{"class":76},[66,66745,66746,66748,66750,66752,66754],{"class":68,"line":236},[66,66747,53928],{"class":76},[66,66749,53191],{"class":53084},[66,66751,57095],{"class":76},[66,66753,53191],{"class":53084},[66,66755,53091],{"class":76},[66,66757,66758,66760,66762],{"class":68,"line":241},[66,66759,53928],{"class":76},[66,66761,1903],{"class":53084},[66,66763,53091],{"class":76},[66,66765,66766,66768],{"class":68,"line":372},[66,66767,8214],{"class":53084},[66,66769,17375],{"class":76},[66,66771,66772,66774,66776,66778],{"class":68,"line":377},[66,66773,56487],{"class":102},[66,66775,53221],{"class":76},[66,66777,2183],{"class":102},[66,66779,3135],{"class":76},[66,66781,66782,66784,66786,66788],{"class":68,"line":392},[66,66783,56476],{"class":102},[66,66785,53221],{"class":76},[66,66787,2183],{"class":102},[66,66789,3135],{"class":76},[66,66791,66792],{"class":68,"line":405},[66,66793,4013],{"class":76},[66,66795,66796],{"class":68,"line":418},[66,66797,109],{"emptyLinePlaceholder":108},[66,66799,66800,66803],{"class":68,"line":430},[66,66801,66802],{"class":53084},"    table",[66,66804,17375],{"class":76},[66,66806,66807,66810,66812,66815],{"class":68,"line":438},[66,66808,66809],{"class":102},"      border-collapse",[66,66811,53221],{"class":76},[66,66813,66814],{"class":102},"collapse",[66,66816,3135],{"class":76},[66,66818,66819,66822,66824,66826],{"class":68,"line":465},[66,66820,66821],{"class":102},"      border-spacing",[66,66823,53221],{"class":76},[66,66825,2183],{"class":102},[66,66827,3135],{"class":76},[66,66829,66830,66832,66834,66836,66838,66840,66843],{"class":68,"line":1805},[66,66831,63756],{"class":102},[66,66833,53221],{"class":76},[66,66835,304],{"class":102},[66,66837,53276],{"class":72},[66,66839,53305],{"class":102},[66,66841,66842],{"class":102}," #c0c0c0",[66,66844,3135],{"class":76},[66,66846,66847,66849,66851,66854,66856],{"class":68,"line":1817},[66,66848,56552],{"class":102},[66,66850,53221],{"class":76},[66,66852,66853],{"class":102},"500",[66,66855,53276],{"class":72},[66,66857,3135],{"class":76},[66,66859,66860,66862,66864,66866,66868,66870],{"class":68,"line":1822},[66,66861,56487],{"class":102},[66,66863,53221],{"class":76},[66,66865,310],{"class":102},[66,66867,53276],{"class":72},[66,66869,53340],{"class":102},[66,66871,3135],{"class":76},[66,66873,66874,66876,66878,66880],{"class":68,"line":1829},[66,66875,59066],{"class":102},[66,66877,53221],{"class":76},[66,66879,53376],{"class":102},[66,66881,3135],{"class":76},[66,66883,66884],{"class":68,"line":3529},[66,66885,4013],{"class":76},[66,66887,66888],{"class":68,"line":3557},[66,66889,109],{"emptyLinePlaceholder":108},[66,66891,66892,66895],{"class":68,"line":3562},[66,66893,66894],{"class":53084},"    th",[66,66896,17375],{"class":76},[66,66898,66899,66901,66903,66906],{"class":68,"line":3579},[66,66900,56665],{"class":102},[66,66902,53221],{"class":76},[66,66904,66905],{"class":102},"#09c",[66,66907,3135],{"class":76},[66,66909,66910,66913,66915,66917,66919,66921,66924],{"class":68,"line":3584},[66,66911,66912],{"class":102},"      font",[66,66914,53221],{"class":76},[66,66916,64118],{"class":102},[66,66918,65852],{"class":102},[66,66920,53276],{"class":72},[66,66922,66923],{"class":356}," \"微软雅黑\"",[66,66925,3135],{"class":76},[66,66927,66928,66930,66932,66934],{"class":68,"line":3589},[66,66929,59196],{"class":102},[66,66931,53221],{"class":76},[66,66933,62621],{"class":102},[66,66935,3135],{"class":76},[66,66937,66938,66940,66942,66944,66946],{"class":68,"line":3594},[66,66939,56566],{"class":102},[66,66941,53221],{"class":76},[66,66943,2779],{"class":102},[66,66945,53276],{"class":72},[66,66947,3135],{"class":76},[66,66949,66950],{"class":68,"line":3608},[66,66951,4013],{"class":76},[66,66953,66954],{"class":68,"line":3613},[66,66955,109],{"emptyLinePlaceholder":108},[66,66957,66958,66961],{"class":68,"line":4401},[66,66959,66960],{"class":53084},"    td",[66,66962,17375],{"class":76},[66,66964,66965,66967,66969,66971,66973,66975,66978],{"class":68,"line":4415},[66,66966,63756],{"class":102},[66,66968,53221],{"class":76},[66,66970,304],{"class":102},[66,66972,53276],{"class":72},[66,66974,53305],{"class":102},[66,66976,66977],{"class":102}," #d0d0d0",[66,66979,3135],{"class":76},[66,66981,66982,66984,66986,66989],{"class":68,"line":4423},[66,66983,59196],{"class":102},[66,66985,53221],{"class":76},[66,66987,66988],{"class":102},"#404060",[66,66990,3135],{"class":76},[66,66992,66993,66995,66997,66999,67001],{"class":68,"line":4428},[66,66994,56476],{"class":102},[66,66996,53221],{"class":76},[66,66998,790],{"class":102},[66,67000,53276],{"class":72},[66,67002,3135],{"class":76},[66,67004,67005],{"class":68,"line":4434},[66,67006,4013],{"class":76},[66,67008,67009],{"class":68,"line":4440},[66,67010,109],{"emptyLinePlaceholder":108},[66,67012,67013,67016],{"class":68,"line":4445},[66,67014,67015],{"class":3793},"    .allCheck",[66,67017,17375],{"class":76},[66,67019,67020,67022,67024,67026,67028],{"class":68,"line":9759},[66,67021,56552],{"class":102},[66,67023,53221],{"class":76},[66,67025,2591],{"class":102},[66,67027,53276],{"class":72},[66,67029,3135],{"class":76},[66,67031,67032],{"class":68,"line":9783},[66,67033,4013],{"class":76},[66,67035,67036,67038,67040],{"class":68,"line":9788},[66,67037,54199],{"class":76},[66,67039,1903],{"class":53084},[66,67041,53091],{"class":76},[66,67043,67044,67046,67048],{"class":68,"line":9794},[66,67045,53569],{"class":76},[66,67047,53118],{"class":53084},[66,67049,53091],{"class":76},[66,67051,67052],{"class":68,"line":9821},[66,67053,109],{"emptyLinePlaceholder":108},[66,67055,67056,67058,67060],{"class":68,"line":9826},[66,67057,413],{"class":76},[66,67059,53584],{"class":53084},[66,67061,53091],{"class":76},[66,67063,67064,67066,67068],{"class":68,"line":9832},[66,67065,53928],{"class":76},[66,67067,2129],{"class":53084},[66,67069,53091],{"class":76},[66,67071,67072,67074,67076],{"class":68,"line":9844},[66,67073,53125],{"class":76},[66,67075,2135],{"class":53084},[66,67077,53091],{"class":76},[66,67079,67080,67082,67084,67086,67088,67091],{"class":68,"line":9856},[66,67081,57015],{"class":76},[66,67083,2138],{"class":53084},[66,67085,55268],{"class":3793},[66,67087,99],{"class":76},[66,67089,67090],{"class":356},"\"allCheck\"",[66,67092,53091],{"class":76},[66,67094,67095,67097,67099,67101,67103,67105,67107,67109,67111,67113,67115,67118,67121,67123,67125,67127,67130,67133,67135],{"class":68,"line":9868},[66,67096,57083],{"class":76},[66,67098,351],{"class":53084},[66,67100,55605],{"class":3793},[66,67102,99],{"class":76},[66,67104,55610],{"class":356},[66,67106,16724],{"class":3793},[66,67108,99],{"class":76},[66,67110,9463],{"class":356},[66,67112,16763],{"class":3793},[66,67114,99],{"class":76},[66,67116,67117],{"class":356},"\"checkAll\"",[66,67119,67120],{"class":76},"> \u003C",[66,67122,66],{"class":53084},[66,67124,55268],{"class":3793},[66,67126,99],{"class":76},[66,67128,67129],{"class":356},"\"all\"",[66,67131,67132],{"class":76},">全选\u003C\u002F",[66,67134,66],{"class":53084},[66,67136,53091],{"class":76},[66,67138,67139,67141,67143],{"class":68,"line":11523},[66,67140,57188],{"class":76},[66,67142,2138],{"class":53084},[66,67144,53091],{"class":76},[66,67146,67147,67149,67151,67154,67156],{"class":68,"line":11548},[66,67148,57015],{"class":76},[66,67150,2138],{"class":53084},[66,67152,67153],{"class":76},">商品\u003C\u002F",[66,67155,2138],{"class":53084},[66,67157,53091],{"class":76},[66,67159,67160,67162,67164,67167,67169],{"class":68,"line":11571},[66,67161,57015],{"class":76},[66,67163,2138],{"class":53084},[66,67165,67166],{"class":76},">商家\u003C\u002F",[66,67168,2138],{"class":53084},[66,67170,53091],{"class":76},[66,67172,67173,67175,67177,67180,67182],{"class":68,"line":11595},[66,67174,57015],{"class":76},[66,67176,2138],{"class":53084},[66,67178,67179],{"class":76},">价格\u003C\u002F",[66,67181,2138],{"class":53084},[66,67183,53091],{"class":76},[66,67185,67186,67188,67190],{"class":68,"line":11600},[66,67187,53560],{"class":76},[66,67189,2135],{"class":53084},[66,67191,53091],{"class":76},[66,67193,67194,67196,67198],{"class":68,"line":11605},[66,67195,53125],{"class":76},[66,67197,2135],{"class":53084},[66,67199,53091],{"class":76},[66,67201,67202,67204,67206],{"class":68,"line":11610},[66,67203,57015],{"class":76},[66,67205,2181],{"class":53084},[66,67207,53091],{"class":76},[66,67209,67210,67212,67214,67216,67218,67220,67222,67224,67227,67229,67231,67234],{"class":68,"line":11619},[66,67211,57083],{"class":76},[66,67213,351],{"class":53084},[66,67215,55605],{"class":3793},[66,67217,99],{"class":76},[66,67219,55610],{"class":356},[66,67221,16724],{"class":3793},[66,67223,99],{"class":76},[66,67225,67226],{"class":356},"\"check\"",[66,67228,55268],{"class":3793},[66,67230,99],{"class":76},[66,67232,67233],{"class":356},"\"ck\"",[66,67235,53091],{"class":76},[66,67237,67238,67240,67242],{"class":68,"line":11624},[66,67239,57188],{"class":76},[66,67241,2181],{"class":53084},[66,67243,53091],{"class":76},[66,67245,67246,67248,67250,67252,67254],{"class":68,"line":11630},[66,67247,57015],{"class":76},[66,67249,2181],{"class":53084},[66,67251,62952],{"class":76},[66,67253,2181],{"class":53084},[66,67255,53091],{"class":76},[66,67257,67258,67260,67262,67265,67267],{"class":68,"line":11651},[66,67259,57015],{"class":76},[66,67261,2181],{"class":53084},[66,67263,67264],{"class":76},">小米\u003C\u002F",[66,67266,2181],{"class":53084},[66,67268,53091],{"class":76},[66,67270,67271,67273,67275,67278,67280],{"class":68,"line":11657},[66,67272,57015],{"class":76},[66,67274,2181],{"class":53084},[66,67276,67277],{"class":76},">￥1999\u003C\u002F",[66,67279,2181],{"class":53084},[66,67281,53091],{"class":76},[66,67283,67284,67286,67288],{"class":68,"line":11671},[66,67285,53560],{"class":76},[66,67287,2135],{"class":53084},[66,67289,53091],{"class":76},[66,67291,67292,67294,67296],{"class":68,"line":11677},[66,67293,53125],{"class":76},[66,67295,2135],{"class":53084},[66,67297,53091],{"class":76},[66,67299,67300,67302,67304],{"class":68,"line":11704},[66,67301,57015],{"class":76},[66,67303,2181],{"class":53084},[66,67305,53091],{"class":76},[66,67307,67308,67310,67312,67314,67316,67318,67320,67322,67324,67326,67328,67330],{"class":68,"line":11713},[66,67309,57083],{"class":76},[66,67311,351],{"class":53084},[66,67313,55605],{"class":3793},[66,67315,99],{"class":76},[66,67317,55610],{"class":356},[66,67319,16724],{"class":3793},[66,67321,99],{"class":76},[66,67323,67226],{"class":356},[66,67325,55268],{"class":3793},[66,67327,99],{"class":76},[66,67329,67233],{"class":356},[66,67331,53091],{"class":76},[66,67333,67334,67336,67338],{"class":68,"line":11719},[66,67335,57188],{"class":76},[66,67337,2181],{"class":53084},[66,67339,53091],{"class":76},[66,67341,67342,67344,67346,67349,67351],{"class":68,"line":11727},[66,67343,57015],{"class":76},[66,67345,2181],{"class":53084},[66,67347,67348],{"class":76},">小米净水器\u003C\u002F",[66,67350,2181],{"class":53084},[66,67352,53091],{"class":76},[66,67354,67355,67357,67359,67361,67363],{"class":68,"line":11732},[66,67356,57015],{"class":76},[66,67358,2181],{"class":53084},[66,67360,67264],{"class":76},[66,67362,2181],{"class":53084},[66,67364,53091],{"class":76},[66,67366,67367,67369,67371,67374,67376],{"class":68,"line":18407},[66,67368,57015],{"class":76},[66,67370,2181],{"class":53084},[66,67372,67373],{"class":76},">￥4999\u003C\u002F",[66,67375,2181],{"class":53084},[66,67377,53091],{"class":76},[66,67379,67380,67382,67384],{"class":68,"line":18413},[66,67381,53560],{"class":76},[66,67383,2135],{"class":53084},[66,67385,53091],{"class":76},[66,67387,67388,67390,67392],{"class":68,"line":18436},[66,67389,53125],{"class":76},[66,67391,2135],{"class":53084},[66,67393,53091],{"class":76},[66,67395,67396,67398,67400],{"class":68,"line":18442},[66,67397,57015],{"class":76},[66,67399,2181],{"class":53084},[66,67401,53091],{"class":76},[66,67403,67404,67406,67408,67410,67412,67414,67416,67418,67420,67422,67424,67426],{"class":68,"line":18465},[66,67405,57083],{"class":76},[66,67407,351],{"class":53084},[66,67409,55605],{"class":3793},[66,67411,99],{"class":76},[66,67413,55610],{"class":356},[66,67415,16724],{"class":3793},[66,67417,99],{"class":76},[66,67419,67226],{"class":356},[66,67421,55268],{"class":3793},[66,67423,99],{"class":76},[66,67425,67233],{"class":356},[66,67427,53091],{"class":76},[66,67429,67430,67432,67434],{"class":68,"line":18479},[66,67431,57188],{"class":76},[66,67433,2181],{"class":53084},[66,67435,53091],{"class":76},[66,67437,67438,67440,67442,67445,67447],{"class":68,"line":18499},[66,67439,57015],{"class":76},[66,67441,2181],{"class":53084},[66,67443,67444],{"class":76},">小米电视\u003C\u002F",[66,67446,2181],{"class":53084},[66,67448,53091],{"class":76},[66,67450,67451,67453,67455,67457,67459],{"class":68,"line":18505},[66,67452,57015],{"class":76},[66,67454,2181],{"class":53084},[66,67456,67264],{"class":76},[66,67458,2181],{"class":53084},[66,67460,53091],{"class":76},[66,67462,67463,67465,67467,67470,67472],{"class":68,"line":18516},[66,67464,57015],{"class":76},[66,67466,2181],{"class":53084},[66,67468,67469],{"class":76},">￥5999\u003C\u002F",[66,67471,2181],{"class":53084},[66,67473,53091],{"class":76},[66,67475,67476,67478,67480],{"class":68,"line":18539},[66,67477,53560],{"class":76},[66,67479,2135],{"class":53084},[66,67481,53091],{"class":76},[66,67483,67484,67486,67488],{"class":68,"line":18561},[66,67485,54199],{"class":76},[66,67487,2129],{"class":53084},[66,67489,53091],{"class":76},[66,67491,67492,67494,67496],{"class":68,"line":18566},[66,67493,53928],{"class":76},[66,67495,53597],{"class":53084},[66,67497,53091],{"class":76},[66,67499,67500],{"class":68,"line":18572},[66,67501,67502],{"class":758},"    \u002F\u002F 1. 获取大复选框\n",[66,67504,67505,67507,67510,67512,67514,67516,67518,67521],{"class":68,"line":18586},[66,67506,13027],{"class":72},[66,67508,67509],{"class":102}," checkAll",[66,67511,15369],{"class":72},[66,67513,56177],{"class":76},[66,67515,56180],{"class":3793},[66,67517,348],{"class":76},[66,67519,67520],{"class":356},"'#checkAll'",[66,67522,313],{"class":76},[66,67524,67525],{"class":68,"line":18599},[66,67526,67527],{"class":758},"    \u002F\u002F 2. 获取所有的小复选框\n",[66,67529,67530,67532,67535,67537,67539,67541,67543,67546],{"class":68,"line":18604},[66,67531,13027],{"class":72},[66,67533,67534],{"class":102}," cks",[66,67536,15369],{"class":72},[66,67538,56177],{"class":76},[66,67540,57462],{"class":3793},[66,67542,348],{"class":76},[66,67544,67545],{"class":356},"'.ck'",[66,67547,313],{"class":76},[66,67549,67550],{"class":68,"line":18618},[66,67551,67552],{"class":758},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[66,67554,67555,67558,67560,67562,67564,67566,67568],{"class":68,"line":18623},[66,67556,67557],{"class":76},"    checkAll.",[66,67559,59593],{"class":3793},[66,67561,348],{"class":76},[66,67563,59598],{"class":356},[66,67565,307],{"class":76},[66,67567,56230],{"class":72},[66,67569,56233],{"class":76},[66,67571,67572],{"class":68,"line":18629},[66,67573,67574],{"class":758},"      \u002F\u002F 得到当前大复选框的选中状态\n",[66,67576,67577,67580],{"class":68,"line":18634},[66,67578,67579],{"class":758},"      \u002F\u002F console.log(checkAll.checked)",[66,67581,67582],{"class":758},"  \u002F\u002F 得到 是 true 或者是 false\n",[66,67584,67585],{"class":68,"line":18648},[66,67586,67587],{"class":758},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[66,67589,67590,67592,67594,67596,67598,67600,67602,67604,67606,67609,67611,67613,67615],{"class":68,"line":18653},[66,67591,54066],{"class":72},[66,67593,3492],{"class":76},[66,67595,53631],{"class":72},[66,67597,117],{"class":76},[66,67599,99],{"class":72},[66,67601,962],{"class":102},[66,67603,11254],{"class":76},[66,67605,413],{"class":72},[66,67607,67608],{"class":76}," cks.",[66,67610,53752],{"class":102},[66,67612,5033],{"class":76},[66,67614,4118],{"class":72},[66,67616,14247],{"class":76},[66,67618,67619,67622,67624,67627],{"class":68,"line":18658},[66,67620,67621],{"class":76},"        cks[i].checked ",[66,67623,99],{"class":72},[66,67625,67626],{"class":102}," this",[66,67628,67629],{"class":76},".checked\n",[66,67631,67632],{"class":68,"line":18672},[66,67633,54180],{"class":76},[66,67635,67636],{"class":68,"line":18684},[66,67637,35249],{"class":76},[66,67639,67640],{"class":68,"line":18689},[66,67641,67642],{"class":758},"    \u002F\u002F 5. 小复选框控制大复选框\n",[66,67644,67645],{"class":68,"line":18702},[66,67646,109],{"emptyLinePlaceholder":108},[66,67648,67649,67651,67653,67655,67657,67659,67661,67663,67665,67667,67669,67671,67673],{"class":68,"line":18707},[66,67650,1083],{"class":72},[66,67652,3492],{"class":76},[66,67654,53631],{"class":72},[66,67656,117],{"class":76},[66,67658,99],{"class":72},[66,67660,962],{"class":102},[66,67662,11254],{"class":76},[66,67664,413],{"class":72},[66,67666,67608],{"class":76},[66,67668,53752],{"class":102},[66,67670,5033],{"class":76},[66,67672,4118],{"class":72},[66,67674,14247],{"class":76},[66,67676,67677],{"class":68,"line":18712},[66,67678,67679],{"class":758},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[66,67681,67682,67685,67687,67689,67691,67693,67695],{"class":68,"line":18717},[66,67683,67684],{"class":76},"      cks[i].",[66,67686,59593],{"class":3793},[66,67688,348],{"class":76},[66,67690,59598],{"class":356},[66,67692,307],{"class":76},[66,67694,56230],{"class":72},[66,67696,56233],{"class":76},[66,67698,67699],{"class":68,"line":18730},[66,67700,67701],{"class":758},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[66,67703,67704],{"class":68,"line":18735},[66,67705,67706],{"class":758},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[66,67708,67709],{"class":68,"line":34423},[66,67710,67711],{"class":758},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[66,67713,67714],{"class":68,"line":34429},[66,67715,67716],{"class":758},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[66,67718,67719,67722,67724,67726,67728,67730,67733,67735,67737,67739,67741],{"class":68,"line":34435},[66,67720,67721],{"class":76},"        checkAll.checked ",[66,67723,99],{"class":72},[66,67725,56177],{"class":76},[66,67727,57462],{"class":3793},[66,67729,348],{"class":76},[66,67731,67732],{"class":356},"'.ck:checked'",[66,67734,32620],{"class":76},[66,67736,53752],{"class":102},[66,67738,59686],{"class":72},[66,67740,67608],{"class":76},[66,67742,57611],{"class":102},[66,67744,67745],{"class":68,"line":34441},[66,67746,66594],{"class":76},[66,67748,67749],{"class":68,"line":34447},[66,67750,4013],{"class":76},[66,67752,67753,67755,67757],{"class":68,"line":34458},[66,67754,54199],{"class":76},[66,67756,53597],{"class":53084},[66,67758,53091],{"class":76},[66,67760,67761,67763,67765],{"class":68,"line":34464},[66,67762,53569],{"class":76},[66,67764,53584],{"class":53084},[66,67766,53091],{"class":76},[66,67768,67769],{"class":68,"line":34484},[66,67770,109],{"emptyLinePlaceholder":108},[66,67772,67773,67775,67777],{"class":68,"line":34490},[66,67774,53569],{"class":76},[66,67776,52419],{"class":53084},[66,67778,53091],{"class":76},[19,67780,67781],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,67783,67784],{},"用好之间比较得到的布尔值！！！",[19,67786,67787,67788,67791,67792,3492,67795,2563,67797,67800],{},"在 JS 里访问的时候，",[23,67789,67790],{},"checkbox.checked"," 是一个 ",[2141,67793,67794],{},"布尔值",[23,67796,3204],{},[23,67798,67799],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,67802,67803,67804,67807,67808],{},"HTML 的 ",[23,67805,67806],{},"checked=\"checked\""," 只是 ",[2141,67809,67810,67811,67814],{},"初始值；JS 的 ",[23,67812,67813],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,67816,67817],{},"：checked是一个伪类选择器",[19,67819,67820],{},[3304,67821],{"alt":62,"src":67822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,67824,67825,67828],{},[67826,67827],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,67830,67831],{},[3304,67832],{"alt":62,"src":67833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,67835,67837],{"id":67836},"_33-dom事件进阶","3.3 DOM事件进阶",[484,67839,67841],{"id":67840},"_331-事件流","3.3.1 事件流",[19,67843,67844],{},[3304,67845],{"alt":62,"src":67846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[23801,67848,67850],{"id":67849},"_3311-事件捕获","3.3.1.1 事件捕获",[19,67852,67853],{},[3304,67854],{"alt":62,"src":67855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[57,67857,67859],{"className":52417,"code":67858,"language":52419,"meta":62,"style":62},"\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",[23,67860,67861,67871,67885,67889,67897,67911,67931,67943,67951,67958,67970,67982,67992,67996,68000,68007,68019,68031,68041,68045,68053,68061,68065,68073,68088,68107,68115,68123,68143,68163,68179,68190,68198,68215,68226,68234,68251,68262,68270,68278,68286,68290],{"__ignoreMap":62},[66,67862,67863,67865,67867,67869],{"class":68,"line":69},[66,67864,53081],{"class":76},[66,67866,53085],{"class":53084},[66,67868,53088],{"class":3793},[66,67870,53091],{"class":76},[66,67872,67873,67875,67877,67879,67881,67883],{"class":68,"line":80},[66,67874,413],{"class":76},[66,67876,52419],{"class":53084},[66,67878,53100],{"class":3793},[66,67880,99],{"class":76},[66,67882,53105],{"class":356},[66,67884,53091],{"class":76},[66,67886,67887],{"class":68,"line":112},[66,67888,109],{"emptyLinePlaceholder":108},[66,67890,67891,67893,67895],{"class":68,"line":129},[66,67892,413],{"class":76},[66,67894,53118],{"class":53084},[66,67896,53091],{"class":76},[66,67898,67899,67901,67903,67905,67907,67909],{"class":68,"line":138},[66,67900,53928],{"class":76},[66,67902,53128],{"class":53084},[66,67904,53131],{"class":3793},[66,67906,99],{"class":76},[66,67908,53136],{"class":356},[66,67910,53091],{"class":76},[66,67912,67913,67915,67917,67919,67921,67923,67925,67927,67929],{"class":68,"line":227},[66,67914,53928],{"class":76},[66,67916,53128],{"class":53084},[66,67918,16724],{"class":3793},[66,67920,99],{"class":76},[66,67922,53175],{"class":356},[66,67924,53155],{"class":3793},[66,67926,99],{"class":76},[66,67928,53182],{"class":356},[66,67930,53091],{"class":76},[66,67932,67933,67935,67937,67939,67941],{"class":68,"line":236},[66,67934,53928],{"class":76},[66,67936,53191],{"class":53084},[66,67938,53194],{"class":76},[66,67940,53191],{"class":53084},[66,67942,53091],{"class":76},[66,67944,67945,67947,67949],{"class":68,"line":241},[66,67946,53928],{"class":76},[66,67948,1903],{"class":53084},[66,67950,53091],{"class":76},[66,67952,67953,67956],{"class":68,"line":372},[66,67954,67955],{"class":3793},"    .father",[66,67957,17375],{"class":76},[66,67959,67960,67962,67964,67966,67968],{"class":68,"line":377},[66,67961,56552],{"class":102},[66,67963,53221],{"class":76},[66,67965,66853],{"class":102},[66,67967,53276],{"class":72},[66,67969,3135],{"class":76},[66,67971,67972,67974,67976,67978,67980],{"class":68,"line":392},[66,67973,56566],{"class":102},[66,67975,53221],{"class":76},[66,67977,66853],{"class":102},[66,67979,53276],{"class":72},[66,67981,3135],{"class":76},[66,67983,67984,67986,67988,67990],{"class":68,"line":405},[66,67985,56665],{"class":102},[66,67987,53221],{"class":76},[66,67989,53429],{"class":102},[66,67991,3135],{"class":76},[66,67993,67994],{"class":68,"line":418},[66,67995,4013],{"class":76},[66,67997,67998],{"class":68,"line":430},[66,67999,109],{"emptyLinePlaceholder":108},[66,68001,68002,68005],{"class":68,"line":438},[66,68003,68004],{"class":3793},"    .son",[66,68006,17375],{"class":76},[66,68008,68009,68011,68013,68015,68017],{"class":68,"line":465},[66,68010,56552],{"class":102},[66,68012,53221],{"class":76},[66,68014,3552],{"class":102},[66,68016,53276],{"class":72},[66,68018,3135],{"class":76},[66,68020,68021,68023,68025,68027,68029],{"class":68,"line":1805},[66,68022,56566],{"class":102},[66,68024,53221],{"class":76},[66,68026,3552],{"class":102},[66,68028,53276],{"class":72},[66,68030,3135],{"class":76},[66,68032,68033,68035,68037,68039],{"class":68,"line":1817},[66,68034,56665],{"class":102},[66,68036,53221],{"class":76},[66,68038,56670],{"class":102},[66,68040,3135],{"class":76},[66,68042,68043],{"class":68,"line":1822},[66,68044,4013],{"class":76},[66,68046,68047,68049,68051],{"class":68,"line":1829},[66,68048,54199],{"class":76},[66,68050,1903],{"class":53084},[66,68052,53091],{"class":76},[66,68054,68055,68057,68059],{"class":68,"line":3529},[66,68056,53569],{"class":76},[66,68058,53118],{"class":53084},[66,68060,53091],{"class":76},[66,68062,68063],{"class":68,"line":3557},[66,68064,109],{"emptyLinePlaceholder":108},[66,68066,68067,68069,68071],{"class":68,"line":3562},[66,68068,413],{"class":76},[66,68070,53584],{"class":53084},[66,68072,53091],{"class":76},[66,68074,68075,68077,68079,68081,68083,68086],{"class":68,"line":3579},[66,68076,53928],{"class":76},[66,68078,53395],{"class":53084},[66,68080,55268],{"class":3793},[66,68082,99],{"class":76},[66,68084,68085],{"class":356},"\"father\"",[66,68087,53091],{"class":76},[66,68089,68090,68092,68094,68096,68098,68101,68103,68105],{"class":68,"line":3584},[66,68091,53125],{"class":76},[66,68093,53395],{"class":53084},[66,68095,55268],{"class":3793},[66,68097,99],{"class":76},[66,68099,68100],{"class":356},"\"son\"",[66,68102,57095],{"class":76},[66,68104,53395],{"class":53084},[66,68106,53091],{"class":76},[66,68108,68109,68111,68113],{"class":68,"line":3589},[66,68110,54199],{"class":76},[66,68112,53395],{"class":53084},[66,68114,53091],{"class":76},[66,68116,68117,68119,68121],{"class":68,"line":3594},[66,68118,53928],{"class":76},[66,68120,53597],{"class":53084},[66,68122,53091],{"class":76},[66,68124,68125,68127,68130,68132,68134,68136,68138,68141],{"class":68,"line":3608},[66,68126,13027],{"class":72},[66,68128,68129],{"class":102}," fa",[66,68131,15369],{"class":72},[66,68133,56177],{"class":76},[66,68135,56180],{"class":3793},[66,68137,348],{"class":76},[66,68139,68140],{"class":356},"'.father'",[66,68142,313],{"class":76},[66,68144,68145,68147,68150,68152,68154,68156,68158,68161],{"class":68,"line":3613},[66,68146,13027],{"class":72},[66,68148,68149],{"class":102}," son",[66,68151,15369],{"class":72},[66,68153,56177],{"class":76},[66,68155,56180],{"class":3793},[66,68157,348],{"class":76},[66,68159,68160],{"class":356},"'.son'",[66,68162,313],{"class":76},[66,68164,68165,68167,68169,68171,68173,68175,68177],{"class":68,"line":4401},[66,68166,54189],{"class":76},[66,68168,59593],{"class":3793},[66,68170,348],{"class":76},[66,68172,59598],{"class":356},[66,68174,307],{"class":76},[66,68176,56230],{"class":72},[66,68178,56233],{"class":76},[66,68180,68181,68183,68185,68188],{"class":68,"line":4415},[66,68182,60705],{"class":3793},[66,68184,348],{"class":76},[66,68186,68187],{"class":356},"'woshiu1'",[66,68189,313],{"class":76},[66,68191,68192,68194,68196],{"class":68,"line":4423},[66,68193,56316],{"class":76},[66,68195,3204],{"class":102},[66,68197,313],{"class":76},[66,68199,68200,68203,68205,68207,68209,68211,68213],{"class":68,"line":4428},[66,68201,68202],{"class":76},"    fa.",[66,68204,59593],{"class":3793},[66,68206,348],{"class":76},[66,68208,59598],{"class":356},[66,68210,307],{"class":76},[66,68212,56230],{"class":72},[66,68214,56233],{"class":76},[66,68216,68217,68219,68221,68224],{"class":68,"line":4434},[66,68218,60705],{"class":3793},[66,68220,348],{"class":76},[66,68222,68223],{"class":356},"'1'",[66,68225,313],{"class":76},[66,68227,68228,68230,68232],{"class":68,"line":4440},[66,68229,56316],{"class":76},[66,68231,3204],{"class":102},[66,68233,313],{"class":76},[66,68235,68236,68239,68241,68243,68245,68247,68249],{"class":68,"line":4445},[66,68237,68238],{"class":76},"    son.",[66,68240,59593],{"class":3793},[66,68242,348],{"class":76},[66,68244,59598],{"class":356},[66,68246,307],{"class":76},[66,68248,56230],{"class":72},[66,68250,56233],{"class":76},[66,68252,68253,68255,68257,68260],{"class":68,"line":9759},[66,68254,60705],{"class":3793},[66,68256,348],{"class":76},[66,68258,68259],{"class":356},"'2'",[66,68261,313],{"class":76},[66,68263,68264,68266,68268],{"class":68,"line":9783},[66,68265,56316],{"class":76},[66,68267,3204],{"class":102},[66,68269,313],{"class":76},[66,68271,68272,68274,68276],{"class":68,"line":9788},[66,68273,54199],{"class":76},[66,68275,53597],{"class":53084},[66,68277,53091],{"class":76},[66,68279,68280,68282,68284],{"class":68,"line":9794},[66,68281,53569],{"class":76},[66,68283,53584],{"class":53084},[66,68285,53091],{"class":76},[66,68287,68288],{"class":68,"line":9821},[66,68289,109],{"emptyLinePlaceholder":108},[66,68291,68292,68294,68296],{"class":68,"line":9826},[66,68293,53569],{"class":76},[66,68295,52419],{"class":53084},[66,68297,53091],{"class":76},[19,68299,68300],{},[3304,68301],{"alt":62,"src":68302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,68304,68305],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[23801,68307,68309],{"id":68308},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,68311,68312],{},[3304,68313],{"alt":62,"src":68314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,68316,68317],{},"反着来",[19,68319,68320],{},"注意是同名事件，比如都是‘click’",[23801,68322,68324],{"id":68323},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,68326,68327],{},[3304,68328],{"alt":62,"src":68329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[23801,68331,68333],{"id":68332},"_3314-解绑事件","3.3.1.4 解绑事件",[19,68335,68336],{},[3304,68337],{"alt":62,"src":68338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,68340,68341],{},[3304,68342],{"alt":62,"src":68343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[23801,68345,68347],{"id":68346},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[31,68349,68350],{},[34,68351,68352],{},"事件类型的区别",[19,68354,68355],{},[3304,68356],{"alt":62,"src":68357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,68359,68360],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[31,68362,68363],{"start":80},[34,68364,68365],{},"注册事件的区别",[19,68367,68368],{},[3304,68369],{"alt":62,"src":68370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[23801,68372,68374],{"id":68373},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,68376,68377],{},[3304,68378],{"alt":62,"src":68379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,68381,68382],{},[3304,68383],{"alt":62,"src":68384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[57,68386,68388],{"className":54849,"code":68387,"language":54851,"meta":62,"style":62},"\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",[23,68389,68390,68398,68415,68438,68446,68451,68456,68461,68465,68473,68481],{"__ignoreMap":62},[66,68391,68392,68394,68396],{"class":68,"line":69},[66,68393,413],{"class":76},[66,68395,53584],{"class":53084},[66,68397,53091],{"class":76},[66,68399,68400,68402,68405,68408,68410,68413],{"class":68,"line":80},[66,68401,53928],{"class":76},[66,68403,68404],{"class":53084},"form",[66,68406,68407],{"class":3793}," action",[66,68409,99],{"class":76},[66,68411,68412],{"class":356},"\"http:\u002F\u002Fwww.itcast.cn\"",[66,68414,53091],{"class":76},[66,68416,68417,68419,68421,68423,68425,68428,68431,68433,68436],{"class":68,"line":112},[66,68418,53125],{"class":76},[66,68420,351],{"class":53084},[66,68422,55605],{"class":3793},[66,68424,99],{"class":76},[66,68426,68427],{"class":356},"\"submit\"",[66,68429,68430],{"class":3793}," value",[66,68432,99],{"class":76},[66,68434,68435],{"class":356},"\"免费注册\"",[66,68437,53091],{"class":76},[66,68439,68440,68442,68444],{"class":68,"line":129},[66,68441,53125],{"class":76},[66,68443,53597],{"class":53084},[66,68445,53091],{"class":76},[66,68447,68448],{"class":68,"line":138},[66,68449,68450],{"class":76},"      const form = document.querySelector('form')\n",[66,68452,68453],{"class":68,"line":227},[66,68454,68455],{"class":76},"      form.addEventListener('submit', function (e) {\n",[66,68457,68458],{"class":68,"line":236},[66,68459,68460],{"class":76},"        e.preventDefault()\n",[66,68462,68463],{"class":68,"line":241},[66,68464,66594],{"class":76},[66,68466,68467,68469,68471],{"class":68,"line":372},[66,68468,53560],{"class":76},[66,68470,53597],{"class":53084},[66,68472,53091],{"class":76},[66,68474,68475,68477,68479],{"class":68,"line":377},[66,68476,54199],{"class":76},[66,68478,68404],{"class":53084},[66,68480,53091],{"class":76},[66,68482,68483,68485,68487],{"class":68,"line":392},[66,68484,53569],{"class":76},[66,68486,53584],{"class":53084},[66,68488,53091],{"class":76},[19,68490,68491],{},"点击不在跳转！！！",[484,68493,68495],{"id":68494},"_332-事件委托","3.3.2 事件委托",[19,68497,68498],{},[3304,68499],{"alt":62,"src":68500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[57,68502,68504],{"className":52417,"code":68503,"language":52419,"meta":62,"style":62},"\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",[23,68505,68506,68516,68530,68534,68542,68556,68576,68588,68596,68600,68608,68616,68628,68640,68652,68664,68676,68689,68697,68705,68710,68729,68750,68755,68760,68765,68770,68779,68783,68793,68797,68802,68807,68821,68831,68835,68839,68847,68855,68859],{"__ignoreMap":62},[66,68507,68508,68510,68512,68514],{"class":68,"line":69},[66,68509,53081],{"class":76},[66,68511,53085],{"class":53084},[66,68513,53088],{"class":3793},[66,68515,53091],{"class":76},[66,68517,68518,68520,68522,68524,68526,68528],{"class":68,"line":80},[66,68519,413],{"class":76},[66,68521,52419],{"class":53084},[66,68523,53100],{"class":3793},[66,68525,99],{"class":76},[66,68527,53105],{"class":356},[66,68529,53091],{"class":76},[66,68531,68532],{"class":68,"line":112},[66,68533,109],{"emptyLinePlaceholder":108},[66,68535,68536,68538,68540],{"class":68,"line":129},[66,68537,413],{"class":76},[66,68539,53118],{"class":53084},[66,68541,53091],{"class":76},[66,68543,68544,68546,68548,68550,68552,68554],{"class":68,"line":138},[66,68545,53928],{"class":76},[66,68547,53128],{"class":53084},[66,68549,53131],{"class":3793},[66,68551,99],{"class":76},[66,68553,53136],{"class":356},[66,68555,53091],{"class":76},[66,68557,68558,68560,68562,68564,68566,68568,68570,68572,68574],{"class":68,"line":227},[66,68559,53928],{"class":76},[66,68561,53128],{"class":53084},[66,68563,16724],{"class":3793},[66,68565,99],{"class":76},[66,68567,53175],{"class":356},[66,68569,53155],{"class":3793},[66,68571,99],{"class":76},[66,68573,53182],{"class":356},[66,68575,53091],{"class":76},[66,68577,68578,68580,68582,68584,68586],{"class":68,"line":236},[66,68579,53928],{"class":76},[66,68581,53191],{"class":53084},[66,68583,53194],{"class":76},[66,68585,53191],{"class":53084},[66,68587,53091],{"class":76},[66,68589,68590,68592,68594],{"class":68,"line":241},[66,68591,53569],{"class":76},[66,68593,53118],{"class":53084},[66,68595,53091],{"class":76},[66,68597,68598],{"class":68,"line":372},[66,68599,109],{"emptyLinePlaceholder":108},[66,68601,68602,68604,68606],{"class":68,"line":377},[66,68603,413],{"class":76},[66,68605,53584],{"class":53084},[66,68607,53091],{"class":76},[66,68609,68610,68612,68614],{"class":68,"line":392},[66,68611,53928],{"class":76},[66,68613,2982],{"class":53084},[66,68615,53091],{"class":76},[66,68617,68618,68620,68622,68624,68626],{"class":68,"line":405},[66,68619,53125],{"class":76},[66,68621,34],{"class":53084},[66,68623,55747],{"class":76},[66,68625,34],{"class":53084},[66,68627,53091],{"class":76},[66,68629,68630,68632,68634,68636,68638],{"class":68,"line":418},[66,68631,53125],{"class":76},[66,68633,34],{"class":53084},[66,68635,55766],{"class":76},[66,68637,34],{"class":53084},[66,68639,53091],{"class":76},[66,68641,68642,68644,68646,68648,68650],{"class":68,"line":430},[66,68643,53125],{"class":76},[66,68645,34],{"class":53084},[66,68647,55785],{"class":76},[66,68649,34],{"class":53084},[66,68651,53091],{"class":76},[66,68653,68654,68656,68658,68660,68662],{"class":68,"line":438},[66,68655,53125],{"class":76},[66,68657,34],{"class":53084},[66,68659,55804],{"class":76},[66,68661,34],{"class":53084},[66,68663,53091],{"class":76},[66,68665,68666,68668,68670,68672,68674],{"class":68,"line":465},[66,68667,53125],{"class":76},[66,68669,34],{"class":53084},[66,68671,55823],{"class":76},[66,68673,34],{"class":53084},[66,68675,53091],{"class":76},[66,68677,68678,68680,68682,68685,68687],{"class":68,"line":1805},[66,68679,53125],{"class":76},[66,68681,19],{"class":53084},[66,68683,68684],{"class":76},">我不需要变色\u003C\u002F",[66,68686,19],{"class":53084},[66,68688,53091],{"class":76},[66,68690,68691,68693,68695],{"class":68,"line":1817},[66,68692,54199],{"class":76},[66,68694,2982],{"class":53084},[66,68696,53091],{"class":76},[66,68698,68699,68701,68703],{"class":68,"line":1822},[66,68700,53928],{"class":76},[66,68702,53597],{"class":53084},[66,68704,53091],{"class":76},[66,68706,68707],{"class":68,"line":1829},[66,68708,68709],{"class":758},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[66,68711,68712,68714,68716,68718,68720,68722,68724,68727],{"class":68,"line":3529},[66,68713,13027],{"class":72},[66,68715,63071],{"class":102},[66,68717,15369],{"class":72},[66,68719,56177],{"class":76},[66,68721,56180],{"class":3793},[66,68723,348],{"class":76},[66,68725,68726],{"class":356},"'ul'",[66,68728,313],{"class":76},[66,68730,68731,68734,68736,68738,68740,68742,68744,68746,68748],{"class":68,"line":3557},[66,68732,68733],{"class":76},"    ul.",[66,68735,59593],{"class":3793},[66,68737,348],{"class":76},[66,68739,59598],{"class":356},[66,68741,307],{"class":76},[66,68743,56230],{"class":72},[66,68745,3492],{"class":76},[66,68747,2068],{"class":1234},[66,68749,14247],{"class":76},[66,68751,68752],{"class":68,"line":3562},[66,68753,68754],{"class":758},"      \u002F\u002F alert(1)\n",[66,68756,68757],{"class":68,"line":3579},[66,68758,68759],{"class":758},"      \u002F\u002F e.target就是我们点击的对象\n",[66,68761,68762],{"class":68,"line":3584},[66,68763,68764],{"class":758},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[66,68766,68767],{"class":68,"line":3589},[66,68768,68769],{"class":758},"      \u002F\u002F e.target.style.color = 'red'\n",[66,68771,68772,68774,68776],{"class":68,"line":3594},[66,68773,60024],{"class":76},[66,68775,60027],{"class":3793},[66,68777,68778],{"class":76},"(e)\n",[66,68780,68781],{"class":68,"line":3608},[66,68782,109],{"emptyLinePlaceholder":108},[66,68784,68785,68787,68790],{"class":68,"line":3613},[66,68786,60024],{"class":76},[66,68788,68789],{"class":3793},"dir",[66,68791,68792],{"class":76},"(e.target)\n",[66,68794,68795],{"class":68,"line":4401},[66,68796,109],{"emptyLinePlaceholder":108},[66,68798,68799],{"class":68,"line":4415},[66,68800,68801],{"class":758},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[66,68803,68804],{"class":68,"line":4423},[66,68805,68806],{"class":758},"      \u002F\u002F 通过tagName来进行判断\n",[66,68808,68809,68811,68814,68816,68819],{"class":68,"line":4428},[66,68810,56261],{"class":72},[66,68812,68813],{"class":76}," (e.target.tagName ",[66,68815,56267],{"class":72},[66,68817,68818],{"class":356}," 'LI'",[66,68820,14247],{"class":76},[66,68822,68823,68826,68828],{"class":68,"line":4434},[66,68824,68825],{"class":76},"        e.target.style.color ",[66,68827,99],{"class":72},[66,68829,68830],{"class":356}," 'red'\n",[66,68832,68833],{"class":68,"line":4440},[66,68834,54180],{"class":76},[66,68836,68837],{"class":68,"line":4445},[66,68838,35249],{"class":76},[66,68840,68841,68843,68845],{"class":68,"line":9759},[66,68842,54199],{"class":76},[66,68844,53597],{"class":53084},[66,68846,53091],{"class":76},[66,68848,68849,68851,68853],{"class":68,"line":9783},[66,68850,53569],{"class":76},[66,68852,53584],{"class":53084},[66,68854,53091],{"class":76},[66,68856,68857],{"class":68,"line":9788},[66,68858,109],{"emptyLinePlaceholder":108},[66,68860,68861,68863,68865],{"class":68,"line":9794},[66,68862,53569],{"class":76},[66,68864,52419],{"class":53084},[66,68866,53091],{"class":76},[19,68868,68869],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,68871,68872],{},"if(e.target.ragName==='P') {}",[19,68874,68875],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,68877,68878],{},"通过事件委托的方式实现tab栏切换改造：",[19,68880,68881],{},"一定要记住自定义属性！！！！！！",[19,68883,68884],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,68886,68887],{},"id是自定义的属性名",[19,68889,68890],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[57,68892,68894],{"className":52417,"code":68893,"language":52419,"meta":62,"style":62},"\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",[23,68895,68896,68906,68920,68924,68932,68946,68966,68986,68998,69006,69012,69022,69032,69036,69040,69046,69058,69070,69082,69098,69102,69106,69112,69124,69136,69148,69158,69168,69172,69176,69184,69196,69206,69218,69222,69226,69234,69244,69254,69264,69268,69272,69282,69296,69308,69312,69316,69328,69338,69354,69364,69368,69372,69386,69396,69406,69410,69414,69420,69434,69438,69442,69450,69460,69464,69468,69477,69487,69491,69499,69507,69511,69519,69533,69547,69559,69567,69606,69638,69670,69702,69734,69742,69750,69764,69798,69832,69866,69900,69934,69942,69950,69958,69963,69968,69987,69992,70012,70020,70025,70038,70059,70072,70076,70081,70086,70099,70119,70147,70151,70155,70159,70167,70175,70179],{"__ignoreMap":62},[66,68897,68898,68900,68902,68904],{"class":68,"line":69},[66,68899,53081],{"class":76},[66,68901,53085],{"class":53084},[66,68903,53088],{"class":3793},[66,68905,53091],{"class":76},[66,68907,68908,68910,68912,68914,68916,68918],{"class":68,"line":80},[66,68909,413],{"class":76},[66,68911,52419],{"class":53084},[66,68913,53100],{"class":3793},[66,68915,99],{"class":76},[66,68917,53105],{"class":356},[66,68919,53091],{"class":76},[66,68921,68922],{"class":68,"line":112},[66,68923,109],{"emptyLinePlaceholder":108},[66,68925,68926,68928,68930],{"class":68,"line":129},[66,68927,413],{"class":76},[66,68929,53118],{"class":53084},[66,68931,53091],{"class":76},[66,68933,68934,68936,68938,68940,68942,68944],{"class":68,"line":138},[66,68935,53928],{"class":76},[66,68937,53128],{"class":53084},[66,68939,53131],{"class":3793},[66,68941,99],{"class":76},[66,68943,53136],{"class":356},[66,68945,60907],{"class":76},[66,68947,68948,68950,68952,68954,68956,68958,68960,68962,68964],{"class":68,"line":227},[66,68949,53928],{"class":76},[66,68951,53128],{"class":53084},[66,68953,53147],{"class":3793},[66,68955,99],{"class":76},[66,68957,53152],{"class":356},[66,68959,53155],{"class":3793},[66,68961,99],{"class":76},[66,68963,53160],{"class":356},[66,68965,60907],{"class":76},[66,68967,68968,68970,68972,68974,68976,68978,68980,68982,68984],{"class":68,"line":236},[66,68969,53928],{"class":76},[66,68971,53128],{"class":53084},[66,68973,16724],{"class":3793},[66,68975,99],{"class":76},[66,68977,53175],{"class":356},[66,68979,53155],{"class":3793},[66,68981,99],{"class":76},[66,68983,53182],{"class":356},[66,68985,60907],{"class":76},[66,68987,68988,68990,68992,68994,68996],{"class":68,"line":241},[66,68989,53928],{"class":76},[66,68991,53191],{"class":53084},[66,68993,65404],{"class":76},[66,68995,53191],{"class":53084},[66,68997,53091],{"class":76},[66,68999,69000,69002,69004],{"class":68,"line":372},[66,69001,53928],{"class":76},[66,69003,1903],{"class":53084},[66,69005,53091],{"class":76},[66,69007,69008,69010],{"class":68,"line":377},[66,69009,8214],{"class":53084},[66,69011,17375],{"class":76},[66,69013,69014,69016,69018,69020],{"class":68,"line":392},[66,69015,56487],{"class":102},[66,69017,53221],{"class":76},[66,69019,2183],{"class":102},[66,69021,3135],{"class":76},[66,69023,69024,69026,69028,69030],{"class":68,"line":405},[66,69025,56476],{"class":102},[66,69027,53221],{"class":76},[66,69029,2183],{"class":102},[66,69031,3135],{"class":76},[66,69033,69034],{"class":68,"line":418},[66,69035,4013],{"class":76},[66,69037,69038],{"class":68,"line":430},[66,69039,109],{"emptyLinePlaceholder":108},[66,69041,69042,69044],{"class":68,"line":438},[66,69043,65455],{"class":3793},[66,69045,17375],{"class":76},[66,69047,69048,69050,69052,69054,69056],{"class":68,"line":465},[66,69049,56552],{"class":102},[66,69051,53221],{"class":76},[66,69053,65466],{"class":102},[66,69055,53276],{"class":72},[66,69057,3135],{"class":76},[66,69059,69060,69062,69064,69066,69068],{"class":68,"line":1805},[66,69061,56566],{"class":102},[66,69063,53221],{"class":76},[66,69065,65479],{"class":102},[66,69067,53276],{"class":72},[66,69069,3135],{"class":76},[66,69071,69072,69074,69076,69078,69080],{"class":68,"line":1817},[66,69073,56487],{"class":102},[66,69075,53221],{"class":76},[66,69077,2679],{"class":102},[66,69079,53276],{"class":72},[66,69081,3135],{"class":76},[66,69083,69084,69086,69088,69090,69092,69094,69096],{"class":68,"line":1822},[66,69085,63756],{"class":102},[66,69087,53221],{"class":76},[66,69089,304],{"class":102},[66,69091,53276],{"class":72},[66,69093,53305],{"class":102},[66,69095,64023],{"class":102},[66,69097,3135],{"class":76},[66,69099,69100],{"class":68,"line":1829},[66,69101,4013],{"class":76},[66,69103,69104],{"class":68,"line":3529},[66,69105,109],{"emptyLinePlaceholder":108},[66,69107,69108,69110],{"class":68,"line":3557},[66,69109,65524],{"class":3793},[66,69111,17375],{"class":76},[66,69113,69114,69116,69118,69120,69122],{"class":68,"line":3562},[66,69115,56552],{"class":102},[66,69117,53221],{"class":76},[66,69119,310],{"class":102},[66,69121,953],{"class":72},[66,69123,3135],{"class":76},[66,69125,69126,69128,69130,69132,69134],{"class":68,"line":3579},[66,69127,56566],{"class":102},[66,69129,53221],{"class":76},[66,69131,2885],{"class":102},[66,69133,53276],{"class":72},[66,69135,3135],{"class":76},[66,69137,69138,69140,69142,69144,69146],{"class":68,"line":3584},[66,69139,59139],{"class":102},[66,69141,53221],{"class":76},[66,69143,2885],{"class":102},[66,69145,53276],{"class":72},[66,69147,3135],{"class":76},[66,69149,69150,69152,69154,69156],{"class":68,"line":3589},[66,69151,56790],{"class":102},[66,69153,53221],{"class":76},[66,69155,53261],{"class":102},[66,69157,3135],{"class":76},[66,69159,69160,69162,69164,69166],{"class":68,"line":3594},[66,69161,56801],{"class":102},[66,69163,53221],{"class":76},[66,69165,53452],{"class":102},[66,69167,3135],{"class":76},[66,69169,69170],{"class":68,"line":3608},[66,69171,4013],{"class":76},[66,69173,69174],{"class":68,"line":3613},[66,69175,109],{"emptyLinePlaceholder":108},[66,69177,69178,69180,69182],{"class":68,"line":4401},[66,69179,65524],{"class":3793},[66,69181,65597],{"class":53084},[66,69183,17375],{"class":76},[66,69185,69186,69188,69190,69192,69194],{"class":68,"line":4415},[66,69187,56703],{"class":102},[66,69189,53221],{"class":76},[66,69191,2779],{"class":102},[66,69193,53276],{"class":72},[66,69195,3135],{"class":76},[66,69197,69198,69200,69202,69204],{"class":68,"line":4423},[66,69199,64113],{"class":102},[66,69201,53221],{"class":76},[66,69203,65620],{"class":102},[66,69205,3135],{"class":76},[66,69207,69208,69210,69212,69214,69216],{"class":68,"line":4428},[66,69209,63779],{"class":102},[66,69211,53221],{"class":76},[66,69213,2679],{"class":102},[66,69215,53276],{"class":72},[66,69217,3135],{"class":76},[66,69219,69220],{"class":68,"line":4434},[66,69221,4013],{"class":76},[66,69223,69224],{"class":68,"line":4440},[66,69225,109],{"emptyLinePlaceholder":108},[66,69227,69228,69230,69232],{"class":68,"line":4445},[66,69229,65524],{"class":3793},[66,69231,63071],{"class":53084},[66,69233,17375],{"class":76},[66,69235,69236,69238,69240,69242],{"class":68,"line":9759},[66,69237,56513],{"class":102},[66,69239,53221],{"class":76},[66,69241,56518],{"class":102},[66,69243,3135],{"class":76},[66,69245,69246,69248,69250,69252],{"class":68,"line":9783},[66,69247,56790],{"class":102},[66,69249,53221],{"class":76},[66,69251,53261],{"class":102},[66,69253,3135],{"class":76},[66,69255,69256,69258,69260,69262],{"class":68,"line":9788},[66,69257,56801],{"class":102},[66,69259,53221],{"class":76},[66,69261,53364],{"class":102},[66,69263,3135],{"class":76},[66,69265,69266],{"class":68,"line":9794},[66,69267,4013],{"class":76},[66,69269,69270],{"class":68,"line":9821},[66,69271,109],{"emptyLinePlaceholder":108},[66,69273,69274,69276,69278,69280],{"class":68,"line":9826},[66,69275,65524],{"class":3793},[66,69277,63071],{"class":53084},[66,69279,56856],{"class":53084},[66,69281,17375],{"class":76},[66,69283,69284,69286,69288,69290,69292,69294],{"class":68,"line":9832},[66,69285,56487],{"class":102},[66,69287,53221],{"class":76},[66,69289,2183],{"class":102},[66,69291,10761],{"class":102},[66,69293,53276],{"class":72},[66,69295,3135],{"class":76},[66,69297,69298,69300,69302,69304,69306],{"class":68,"line":9844},[66,69299,56703],{"class":102},[66,69301,53221],{"class":76},[66,69303,2528],{"class":102},[66,69305,53276],{"class":72},[66,69307,3135],{"class":76},[66,69309,69310],{"class":68,"line":9856},[66,69311,4013],{"class":76},[66,69313,69314],{"class":68,"line":9868},[66,69315,109],{"emptyLinePlaceholder":108},[66,69317,69318,69320,69322,69324,69326],{"class":68,"line":11523},[66,69319,65524],{"class":3793},[66,69321,63071],{"class":53084},[66,69323,56856],{"class":53084},[66,69325,3240],{"class":53084},[66,69327,17375],{"class":76},[66,69329,69330,69332,69334,69336],{"class":68,"line":11548},[66,69331,65749],{"class":102},[66,69333,53221],{"class":76},[66,69335,56518],{"class":102},[66,69337,3135],{"class":76},[66,69339,69340,69342,69344,69346,69348,69350,69352],{"class":68,"line":11571},[66,69341,64011],{"class":102},[66,69343,53221],{"class":76},[66,69345,795],{"class":102},[66,69347,53276],{"class":72},[66,69349,53305],{"class":102},[66,69351,65770],{"class":102},[66,69353,3135],{"class":76},[66,69355,69356,69358,69360,69362],{"class":68,"line":11595},[66,69357,59196],{"class":102},[66,69359,53221],{"class":76},[66,69361,64148],{"class":102},[66,69363,3135],{"class":76},[66,69365,69366],{"class":68,"line":11600},[66,69367,4013],{"class":76},[66,69369,69370],{"class":68,"line":11605},[66,69371,109],{"emptyLinePlaceholder":108},[66,69373,69374,69376,69378,69380,69382,69384],{"class":68,"line":11610},[66,69375,65524],{"class":3793},[66,69377,63071],{"class":53084},[66,69379,56856],{"class":53084},[66,69381,3240],{"class":53084},[66,69383,65803],{"class":3793},[66,69385,17375],{"class":76},[66,69387,69388,69390,69392,69394],{"class":68,"line":11619},[66,69389,63570],{"class":102},[66,69391,53221],{"class":76},[66,69393,65814],{"class":102},[66,69395,3135],{"class":76},[66,69397,69398,69400,69402,69404],{"class":68,"line":11624},[66,69399,59196],{"class":102},[66,69401,53221],{"class":76},[66,69403,65814],{"class":102},[66,69405,3135],{"class":76},[66,69407,69408],{"class":68,"line":11630},[66,69409,4013],{"class":76},[66,69411,69412],{"class":68,"line":11651},[66,69413,109],{"emptyLinePlaceholder":108},[66,69415,69416,69418],{"class":68,"line":11657},[66,69417,65839],{"class":3793},[66,69419,17375],{"class":76},[66,69421,69422,69424,69426,69428,69430,69432],{"class":68,"line":11671},[66,69423,56476],{"class":102},[66,69425,53221],{"class":76},[66,69427,2183],{"class":102},[66,69429,65852],{"class":102},[66,69431,53276],{"class":72},[66,69433,3135],{"class":76},[66,69435,69436],{"class":68,"line":11677},[66,69437,4013],{"class":76},[66,69439,69440],{"class":68,"line":11704},[66,69441,109],{"emptyLinePlaceholder":108},[66,69443,69444,69446,69448],{"class":68,"line":11713},[66,69445,65839],{"class":3793},[66,69447,63953],{"class":3793},[66,69449,17375],{"class":76},[66,69451,69452,69454,69456,69458],{"class":68,"line":11719},[66,69453,56790],{"class":102},[66,69455,53221],{"class":76},[66,69457,56518],{"class":102},[66,69459,3135],{"class":76},[66,69461,69462],{"class":68,"line":11727},[66,69463,4013],{"class":76},[66,69465,69466],{"class":68,"line":11732},[66,69467,109],{"emptyLinePlaceholder":108},[66,69469,69470,69472,69475],{"class":68,"line":18407},[66,69471,65839],{"class":3793},[66,69473,69474],{"class":3793}," .active",[66,69476,17375],{"class":76},[66,69478,69479,69481,69483,69485],{"class":68,"line":18413},[66,69480,56790],{"class":102},[66,69482,53221],{"class":76},[66,69484,62648],{"class":102},[66,69486,3135],{"class":76},[66,69488,69489],{"class":68,"line":18436},[66,69490,4013],{"class":76},[66,69492,69493,69495,69497],{"class":68,"line":18442},[66,69494,54199],{"class":76},[66,69496,1903],{"class":53084},[66,69498,53091],{"class":76},[66,69500,69501,69503,69505],{"class":68,"line":18465},[66,69502,53569],{"class":76},[66,69504,53118],{"class":53084},[66,69506,53091],{"class":76},[66,69508,69509],{"class":68,"line":18479},[66,69510,109],{"emptyLinePlaceholder":108},[66,69512,69513,69515,69517],{"class":68,"line":18499},[66,69514,413],{"class":76},[66,69516,53584],{"class":53084},[66,69518,53091],{"class":76},[66,69520,69521,69523,69525,69527,69529,69531],{"class":68,"line":18505},[66,69522,53928],{"class":76},[66,69524,53395],{"class":53084},[66,69526,55268],{"class":3793},[66,69528,99],{"class":76},[66,69530,65954],{"class":356},[66,69532,53091],{"class":76},[66,69534,69535,69537,69539,69541,69543,69545],{"class":68,"line":18516},[66,69536,53125],{"class":76},[66,69538,53395],{"class":53084},[66,69540,55268],{"class":3793},[66,69542,99],{"class":76},[66,69544,65969],{"class":356},[66,69546,53091],{"class":76},[66,69548,69549,69551,69553,69555,69557],{"class":68,"line":18539},[66,69550,57015],{"class":76},[66,69552,484],{"class":53084},[66,69554,65980],{"class":76},[66,69556,484],{"class":53084},[66,69558,53091],{"class":76},[66,69560,69561,69563,69565],{"class":68,"line":18561},[66,69562,57015],{"class":76},[66,69564,2982],{"class":53084},[66,69566,53091],{"class":76},[66,69568,69569,69571,69573,69575,69577,69579,69581,69583,69585,69587,69589,69591,69593,69596,69598,69600,69602,69604],{"class":68,"line":18566},[66,69570,57083],{"class":76},[66,69572,34],{"class":53084},[66,69574,62831],{"class":76},[66,69576,2229],{"class":53084},[66,69578,55268],{"class":3793},[66,69580,99],{"class":76},[66,69582,61486],{"class":356},[66,69584,62836],{"class":3793},[66,69586,99],{"class":76},[66,69588,66015],{"class":356},[66,69590,55732],{"class":3793},[66,69592,99],{"class":76},[66,69594,69595],{"class":356},"\"0\"",[66,69597,66018],{"class":76},[66,69599,2229],{"class":53084},[66,69601,57095],{"class":76},[66,69603,34],{"class":53084},[66,69605,53091],{"class":76},[66,69607,69608,69610,69612,69614,69616,69618,69620,69622,69624,69626,69628,69630,69632,69634,69636],{"class":68,"line":18572},[66,69609,57083],{"class":76},[66,69611,34],{"class":53084},[66,69613,62831],{"class":76},[66,69615,2229],{"class":53084},[66,69617,62836],{"class":3793},[66,69619,99],{"class":76},[66,69621,66015],{"class":356},[66,69623,55732],{"class":3793},[66,69625,99],{"class":76},[66,69627,5496],{"class":356},[66,69629,66045],{"class":76},[66,69631,2229],{"class":53084},[66,69633,57095],{"class":76},[66,69635,34],{"class":53084},[66,69637,53091],{"class":76},[66,69639,69640,69642,69644,69646,69648,69650,69652,69654,69656,69658,69660,69662,69664,69666,69668],{"class":68,"line":18586},[66,69641,57083],{"class":76},[66,69643,34],{"class":53084},[66,69645,62831],{"class":76},[66,69647,2229],{"class":53084},[66,69649,62836],{"class":3793},[66,69651,99],{"class":76},[66,69653,66015],{"class":356},[66,69655,55732],{"class":3793},[66,69657,99],{"class":76},[66,69659,5519],{"class":356},[66,69661,66072],{"class":76},[66,69663,2229],{"class":53084},[66,69665,57095],{"class":76},[66,69667,34],{"class":53084},[66,69669,53091],{"class":76},[66,69671,69672,69674,69676,69678,69680,69682,69684,69686,69688,69690,69692,69694,69696,69698,69700],{"class":68,"line":18599},[66,69673,57083],{"class":76},[66,69675,34],{"class":53084},[66,69677,62831],{"class":76},[66,69679,2229],{"class":53084},[66,69681,62836],{"class":3793},[66,69683,99],{"class":76},[66,69685,66015],{"class":356},[66,69687,55732],{"class":3793},[66,69689,99],{"class":76},[66,69691,5532],{"class":356},[66,69693,66099],{"class":76},[66,69695,2229],{"class":53084},[66,69697,57095],{"class":76},[66,69699,34],{"class":53084},[66,69701,53091],{"class":76},[66,69703,69704,69706,69708,69710,69712,69714,69716,69718,69720,69722,69724,69726,69728,69730,69732],{"class":68,"line":18604},[66,69705,57083],{"class":76},[66,69707,34],{"class":53084},[66,69709,62831],{"class":76},[66,69711,2229],{"class":53084},[66,69713,62836],{"class":3793},[66,69715,99],{"class":76},[66,69717,66015],{"class":356},[66,69719,55732],{"class":3793},[66,69721,99],{"class":76},[66,69723,5545],{"class":356},[66,69725,66126],{"class":76},[66,69727,2229],{"class":53084},[66,69729,57095],{"class":76},[66,69731,34],{"class":53084},[66,69733,53091],{"class":76},[66,69735,69736,69738,69740],{"class":68,"line":18618},[66,69737,57188],{"class":76},[66,69739,2982],{"class":53084},[66,69741,53091],{"class":76},[66,69743,69744,69746,69748],{"class":68,"line":18623},[66,69745,53560],{"class":76},[66,69747,53395],{"class":53084},[66,69749,53091],{"class":76},[66,69751,69752,69754,69756,69758,69760,69762],{"class":68,"line":18629},[66,69753,53125],{"class":76},[66,69755,53395],{"class":53084},[66,69757,55268],{"class":3793},[66,69759,99],{"class":76},[66,69761,66163],{"class":356},[66,69763,53091],{"class":76},[66,69765,69766,69768,69770,69772,69774,69776,69778,69780,69782,69784,69786,69788,69790,69792,69794,69796],{"class":68,"line":18634},[66,69767,57015],{"class":76},[66,69769,53395],{"class":53084},[66,69771,55268],{"class":3793},[66,69773,99],{"class":76},[66,69775,66178],{"class":356},[66,69777,62831],{"class":76},[66,69779,3304],{"class":53084},[66,69781,57020],{"class":3793},[66,69783,99],{"class":76},[66,69785,66189],{"class":356},[66,69787,57028],{"class":3793},[66,69789,99],{"class":76},[66,69791,9463],{"class":356},[66,69793,66198],{"class":76},[66,69795,53395],{"class":53084},[66,69797,53091],{"class":76},[66,69799,69800,69802,69804,69806,69808,69810,69812,69814,69816,69818,69820,69822,69824,69826,69828,69830],{"class":68,"line":18648},[66,69801,57015],{"class":76},[66,69803,53395],{"class":53084},[66,69805,55268],{"class":3793},[66,69807,99],{"class":76},[66,69809,64402],{"class":356},[66,69811,62831],{"class":76},[66,69813,3304],{"class":53084},[66,69815,57020],{"class":3793},[66,69817,99],{"class":76},[66,69819,66225],{"class":356},[66,69821,57028],{"class":3793},[66,69823,99],{"class":76},[66,69825,9463],{"class":356},[66,69827,66198],{"class":76},[66,69829,53395],{"class":53084},[66,69831,53091],{"class":76},[66,69833,69834,69836,69838,69840,69842,69844,69846,69848,69850,69852,69854,69856,69858,69860,69862,69864],{"class":68,"line":18653},[66,69835,57015],{"class":76},[66,69837,53395],{"class":53084},[66,69839,55268],{"class":3793},[66,69841,99],{"class":76},[66,69843,64402],{"class":356},[66,69845,62831],{"class":76},[66,69847,3304],{"class":53084},[66,69849,57020],{"class":3793},[66,69851,99],{"class":76},[66,69853,66260],{"class":356},[66,69855,57028],{"class":3793},[66,69857,99],{"class":76},[66,69859,9463],{"class":356},[66,69861,66198],{"class":76},[66,69863,53395],{"class":53084},[66,69865,53091],{"class":76},[66,69867,69868,69870,69872,69874,69876,69878,69880,69882,69884,69886,69888,69890,69892,69894,69896,69898],{"class":68,"line":18658},[66,69869,57015],{"class":76},[66,69871,53395],{"class":53084},[66,69873,55268],{"class":3793},[66,69875,99],{"class":76},[66,69877,64402],{"class":356},[66,69879,62831],{"class":76},[66,69881,3304],{"class":53084},[66,69883,57020],{"class":3793},[66,69885,99],{"class":76},[66,69887,66295],{"class":356},[66,69889,57028],{"class":3793},[66,69891,99],{"class":76},[66,69893,9463],{"class":356},[66,69895,66198],{"class":76},[66,69897,53395],{"class":53084},[66,69899,53091],{"class":76},[66,69901,69902,69904,69906,69908,69910,69912,69914,69916,69918,69920,69922,69924,69926,69928,69930,69932],{"class":68,"line":18672},[66,69903,57015],{"class":76},[66,69905,53395],{"class":53084},[66,69907,55268],{"class":3793},[66,69909,99],{"class":76},[66,69911,64402],{"class":356},[66,69913,62831],{"class":76},[66,69915,3304],{"class":53084},[66,69917,57020],{"class":3793},[66,69919,99],{"class":76},[66,69921,66330],{"class":356},[66,69923,57028],{"class":3793},[66,69925,99],{"class":76},[66,69927,9463],{"class":356},[66,69929,66198],{"class":76},[66,69931,53395],{"class":53084},[66,69933,53091],{"class":76},[66,69935,69936,69938,69940],{"class":68,"line":18684},[66,69937,53560],{"class":76},[66,69939,53395],{"class":53084},[66,69941,53091],{"class":76},[66,69943,69944,69946,69948],{"class":68,"line":18689},[66,69945,54199],{"class":76},[66,69947,53395],{"class":53084},[66,69949,53091],{"class":76},[66,69951,69952,69954,69956],{"class":68,"line":18702},[66,69953,53928],{"class":76},[66,69955,53597],{"class":53084},[66,69957,53091],{"class":76},[66,69959,69960],{"class":68,"line":18707},[66,69961,69962],{"class":758},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[66,69964,69965],{"class":68,"line":18712},[66,69966,69967],{"class":758},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[66,69969,69970,69972,69974,69976,69978,69980,69982,69985],{"class":68,"line":18717},[66,69971,13027],{"class":72},[66,69973,63071],{"class":102},[66,69975,15369],{"class":72},[66,69977,56177],{"class":76},[66,69979,56180],{"class":3793},[66,69981,348],{"class":76},[66,69983,69984],{"class":356},"'.tab-nav ul'",[66,69986,313],{"class":76},[66,69988,69989],{"class":68,"line":18730},[66,69990,69991],{"class":758},"    \u002F\u002F 2.添加事件\n",[66,69993,69994,69996,69998,70000,70002,70004,70006,70008,70010],{"class":68,"line":18735},[66,69995,68733],{"class":76},[66,69997,59593],{"class":3793},[66,69999,348],{"class":76},[66,70001,59598],{"class":356},[66,70003,307],{"class":76},[66,70005,56230],{"class":72},[66,70007,3492],{"class":76},[66,70009,2068],{"class":1234},[66,70011,14247],{"class":76},[66,70013,70014,70016,70018],{"class":68,"line":34423},[66,70015,60024],{"class":76},[66,70017,68789],{"class":3793},[66,70019,68792],{"class":76},[66,70021,70022],{"class":68,"line":34429},[66,70023,70024],{"class":758},"      \u002F\u002Fe.targer是我们点击的对象\n",[66,70026,70027,70029,70031,70033,70036],{"class":68,"line":34435},[66,70028,56261],{"class":72},[66,70030,68813],{"class":76},[66,70032,56267],{"class":72},[66,70034,70035],{"class":356}," 'A'",[66,70037,14247],{"class":76},[66,70039,70040,70042,70044,70046,70049,70051,70053,70055,70057],{"class":68,"line":34441},[66,70041,53709],{"class":76},[66,70043,56180],{"class":3793},[66,70045,348],{"class":76},[66,70047,70048],{"class":356},"'.active'",[66,70050,58783],{"class":76},[66,70052,58786],{"class":3793},[66,70054,348],{"class":76},[66,70056,66493],{"class":356},[66,70058,313],{"class":76},[66,70060,70061,70064,70066,70068,70070],{"class":68,"line":34447},[66,70062,70063],{"class":76},"        e.target.classList.",[66,70065,7146],{"class":3793},[66,70067,348],{"class":76},[66,70069,66493],{"class":356},[66,70071,313],{"class":76},[66,70073,70074],{"class":68,"line":34458},[66,70075,109],{"emptyLinePlaceholder":108},[66,70077,70078],{"class":68,"line":34464},[66,70079,70080],{"class":758},"        \u002F\u002F 下面大盒子模块\n",[66,70082,70083],{"class":68,"line":34484},[66,70084,70085],{"class":758},"        \u002F\u002F console.log(e.target.dataset.id)\n",[66,70087,70088,70090,70092,70094,70096],{"class":68,"line":34490},[66,70089,63049],{"class":72},[66,70091,1596],{"class":102},[66,70093,15369],{"class":72},[66,70095,47352],{"class":72},[66,70097,70098],{"class":76},"e.target.dataset.id\n",[66,70100,70101,70103,70105,70107,70109,70111,70113,70115,70117],{"class":68,"line":34501},[66,70102,53709],{"class":76},[66,70104,56180],{"class":3793},[66,70106,348],{"class":76},[66,70108,66541],{"class":356},[66,70110,58783],{"class":76},[66,70112,58786],{"class":3793},[66,70114,348],{"class":76},[66,70116,66493],{"class":356},[66,70118,313],{"class":76},[66,70120,70121,70123,70125,70127,70129,70131,70133,70135,70137,70139,70141,70143,70145],{"class":68,"line":34507},[66,70122,53709],{"class":76},[66,70124,56180],{"class":3793},[66,70126,348],{"class":76},[66,70128,66567],{"class":356},[66,70130,257],{"class":76},[66,70132,47352],{"class":72},[66,70134,1187],{"class":102},[66,70136,58812],{"class":356},[66,70138,58783],{"class":76},[66,70140,7146],{"class":3793},[66,70142,348],{"class":76},[66,70144,66493],{"class":356},[66,70146,313],{"class":76},[66,70148,70149],{"class":68,"line":34513},[66,70150,109],{"emptyLinePlaceholder":108},[66,70152,70153],{"class":68,"line":34519},[66,70154,54180],{"class":76},[66,70156,70157],{"class":68,"line":34525},[66,70158,35249],{"class":76},[66,70160,70161,70163,70165],{"class":68,"line":34531},[66,70162,54199],{"class":76},[66,70164,53597],{"class":53084},[66,70166,53091],{"class":76},[66,70168,70169,70171,70173],{"class":68,"line":34537},[66,70170,53569],{"class":76},[66,70172,53584],{"class":53084},[66,70174,53091],{"class":76},[66,70176,70177],{"class":68,"line":34543},[66,70178,109],{"emptyLinePlaceholder":108},[66,70180,70181,70183,70185],{"class":68,"line":34563},[66,70182,53569],{"class":76},[66,70184,52419],{"class":53084},[66,70186,53091],{"class":76},[484,70188,70190],{"id":70189},"_333-页面加载事件","3.3.3 页面加载事件",[31,70192,70193],{},[34,70194,70195],{},"load",[19,70197,70198],{},[3304,70199],{"alt":62,"src":70200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,70202,70203],{},"window代表整个窗口，比document还要大",[19,70205,70206],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,70208,70209],{},"img.addEventListener('load', function () {",[19,70211,70212],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,70214,54246],{},[31,70216,70217],{"start":80},[34,70218,70219],{},"DOMContentLoaded",[19,70221,70222],{},[3304,70223],{"alt":62,"src":70224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,70226,70227],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[484,70229,70231],{"id":70230},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,70233,70234],{},[3304,70235],{"alt":62,"src":70236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,70238,70239],{},[3304,70240],{"alt":62,"src":70241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,70243,70244],{},[3304,70245],{"alt":62,"src":70246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,70248,70249],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,70251,70252],{},"获得的是数字型数据，不带单位",[19,70254,70255],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,70257,70258],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,70260,70261],{},"它是通过document.documentElement来获取",[19,70263,70264],{},[3304,70265],{"alt":62,"src":70266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,70268,70269],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[484,70271,70273],{"id":70272},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,70275,70276],{},[3304,70277],{"alt":62,"src":70278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,70280,70281],{},[3304,70282],{"alt":62,"src":70283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[484,70285,70287],{"id":70286},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,70289,70290],{},[3304,70291],{"alt":62,"src":70292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,70294,70295],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,70297,70298],{},[3304,70299],{"alt":62,"src":70300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,70302,70303],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,70305,70306],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,70308,70309],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,70311,70312],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,70314,70315],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,70317,70318],{},[3304,70319],{"alt":62,"src":70320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,70322,70323],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,70325,70326],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,70328,70329],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,70331,70332],{},"e.pageX-box.getBoundingClientRect()",[484,70334,70336],{"id":70335},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,70338,70339],{},[3304,70340],{"alt":62,"src":70341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,70343,70344],{},"这个是相对于视口来说的，它是个方法，不是属性值",[484,70346,70348],{"id":70347},"_338-总结","3.3.8 总结",[19,70350,70351],{},[3304,70352],{"alt":62,"src":70353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,70355,70356],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,70358,70359],{},"修改盒子的宽高只能通过width和height来实现",[484,70361,70363],{"id":70362},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[57,70365,70367],{"className":52417,"code":70366,"language":52419,"meta":62,"style":62},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[23,70368,70369,70374,70379,70384,70389],{"__ignoreMap":62},[66,70370,70371],{"class":68,"line":69},[66,70372,70373],{"class":76},"\u002F* 页面滑动 *\u002F\n",[66,70375,70376],{"class":68,"line":80},[66,70377,70378],{"class":76},"html {\n",[66,70380,70381],{"class":68,"line":112},[66,70382,70383],{"class":76},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[66,70385,70386],{"class":68,"line":129},[66,70387,70388],{"class":76},"  scroll-behavior: smooth;\n",[66,70390,70391],{"class":68,"line":138},[66,70392,3407],{"class":76},[19,70394,70395],{},"默认是auto",[484,70397,70399],{"id":70398},"_3310-日期对象","3.3.10 日期对象",[23801,70401,70403],{"id":70402},"_33101-实例化","3.3.10.1 实例化",[19,70405,70406],{},[3304,70407],{"alt":62,"src":70408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[23801,70410,70412],{"id":70411},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,70414,70415],{},[3304,70416],{"alt":62,"src":70417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,70419,70420],{},"月份+1",[19,70422,70423],{},"老外认为第一天为0，星期天",[19,70425,70426],{},"方法使用的时候必须要跟括号",[19,70428,70429],{},"快速获得日期",[19,70431,70432],{},"\u002F\u002F 得到年月日",[19,70434,70435],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,70437,70438],{},"\u002F\u002F 得到当地日期",[19,70440,70441],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,70443,70444],{},"\u002F\u002F 得到当地时间",[19,70446,70447],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,70449,70450],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,70452,70453],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[53597,70455,70456],{},"\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,70458,70459],{},"学会去封装函数！",[23801,70461,70463],{"id":70462},"_33103-时间戳","3.3.10.3 时间戳",[19,70465,70466],{},[3304,70467],{"alt":62,"src":70468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,70470,70471],{},[3304,70472],{"alt":62,"src":70473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,70475,70476],{},"三种方法记住一个就可以",[484,70478,70480],{"id":70479},"_3311-节点操作","3.3.11 节点操作",[23801,70482,70484],{"id":70483},"_33111-dom节点","3.3.11.1 DOM节点",[19,70486,70487],{},[3304,70488],{"alt":62,"src":70489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,70491,70492],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[23801,70494,70496],{"id":70495},"_33112-查找节点","3.3.11.2 查找节点",[19,70498,70499],{},"前边的document.querySelector()是获取的元素",[19,70501,70502],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,70504,70505],{},[3304,70506],{"alt":62,"src":70507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[31,70509,70510],{},[34,70511,70512],{},"父节点",[19,70514,70515],{},[3304,70516],{"alt":62,"src":70517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[31,70519,70520],{"start":80},[34,70521,70522],{},"子节点",[19,70524,70525],{},[3304,70526],{"alt":62,"src":70527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,70529,70530],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,70532,70533],{},"children获得的是伪数组，是亲儿子",[31,70535,70536],{"start":112},[34,70537,70538],{},"兄弟节点",[19,70540,70541],{},[3304,70542],{"alt":62,"src":70543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[23801,70545,70547],{"id":70546},"_33113-增加节点","3.3.11.3 增加节点",[19,70549,70550],{},[3304,70551],{"alt":62,"src":70552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,70554,70555],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,70557,70558],{},[3304,70559],{"alt":62,"src":70560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,70562,70563],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,70565,70566],{},"下面是写法的部分展示，就按照下边的格式来写",[19,70568,70569],{},"例：",[53597,70571,70572],{},"\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,70574,70575],{},[3304,70576],{"alt":62,"src":70577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,70579,70580],{},"false只克隆标签，里边的内容不会克隆过来",[57,70582,70584],{"className":52417,"code":70583,"language":52419,"meta":62,"style":62},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[23,70585,70586],{"__ignoreMap":62},[66,70587,70588],{"class":68,"line":69},[66,70589,70583],{"class":76},[23801,70591,70593],{"id":70592},"_33114-删除节点","3.3.11.4 删除节点",[19,70595,70596],{},[3304,70597],{"alt":62,"src":70598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,70600,70601],{},"父亲删儿子",[19,70603,70604],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[484,70606,70608],{"id":70607},"_3312-m端事件","3.3.12 M端事件",[19,70610,70611],{},"M端就是移动端",[19,70613,70614],{},[3304,70615],{"alt":62,"src":70616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[484,70618,70620],{"id":70619},"_3313-插件","3.3.13 插件",[19,70622,70623],{},"要熟悉官网！！！",[19,70625,70626],{},[2229,70627,70628],{"href":70628,"rel":70629},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[25668],[19,70631,70632],{},[2229,70633,70634],{"href":70634,"rel":70635},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[25668],[484,70637,70639],{"id":70638},"_3314-学生信息表","3.3.14 学生信息表",[31,70641,70642,70645,70648,70651,70654,70657,70660,70663],{},[34,70643,70644],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[34,70646,70647],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[34,70649,70650],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[34,70652,70653],{},"用好表单元素自带的属性，value,name等",[34,70655,70656],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[34,70658,70659],{},"不要忘记事件对象",[34,70661,70662],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[34,70664,70665],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,70667,70668],{},"结构：",[57,70670,70672],{"className":52417,"code":70671,"language":52419,"meta":62,"style":62},"\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",[23,70673,70674,70684,70698,70702,70710,70724,70744,70765,70778,70802,70810,70814,70822,70835,70856,70884,70912,70917,70939,70959,70978,70986,71014,71036,71056,71076,71096,71116,71136,71144,71164,71172,71176,71189,71197,71205,71213,71226,71239,71252,71265,71278,71291,71304,71312,71320,71328,71333,71338,71343,71348,71353,71358,71363,71368,71373,71378,71383,71388,71393,71401,71409,71417,71421,71441,71460,71480,71500,71520,71540,71544,71549,71569,71574,71584,71589,71594,71614,71636,71641,71651,71655,71659,71664,71669,71698,71712,71727,71731,71735,71739,71744,71755,71768,71773,71778,71783,71788,71793,71797,71802,71807,71816,71821,71826,71838,71843,71850,71854,71859,71869,71874,71884,71889,71917,71938,71948,71968,71986,72003,72020,72037,72054,72058,72068,72073,72078,72083,72094,72098,72102,72106,72111,72116,72137,72149,72154,72159,72164,72178,72183,72190,72194,72198,72206,72210,72218,72222],{"__ignoreMap":62},[66,70675,70676,70678,70680,70682],{"class":68,"line":69},[66,70677,53081],{"class":76},[66,70679,53085],{"class":53084},[66,70681,53088],{"class":3793},[66,70683,53091],{"class":76},[66,70685,70686,70688,70690,70692,70694,70696],{"class":68,"line":80},[66,70687,413],{"class":76},[66,70689,52419],{"class":53084},[66,70691,53100],{"class":3793},[66,70693,99],{"class":76},[66,70695,53105],{"class":356},[66,70697,53091],{"class":76},[66,70699,70700],{"class":68,"line":112},[66,70701,109],{"emptyLinePlaceholder":108},[66,70703,70704,70706,70708],{"class":68,"line":129},[66,70705,413],{"class":76},[66,70707,53118],{"class":53084},[66,70709,53091],{"class":76},[66,70711,70712,70714,70716,70718,70720,70722],{"class":68,"line":138},[66,70713,53928],{"class":76},[66,70715,53128],{"class":53084},[66,70717,53131],{"class":3793},[66,70719,99],{"class":76},[66,70721,53136],{"class":356},[66,70723,60907],{"class":76},[66,70725,70726,70728,70730,70732,70734,70736,70738,70740,70742],{"class":68,"line":227},[66,70727,53928],{"class":76},[66,70729,53128],{"class":53084},[66,70731,16724],{"class":3793},[66,70733,99],{"class":76},[66,70735,53175],{"class":356},[66,70737,53155],{"class":3793},[66,70739,99],{"class":76},[66,70741,53182],{"class":356},[66,70743,60907],{"class":76},[66,70745,70746,70748,70750,70752,70754,70756,70758,70760,70763],{"class":68,"line":236},[66,70747,53928],{"class":76},[66,70749,53128],{"class":53084},[66,70751,53147],{"class":3793},[66,70753,99],{"class":76},[66,70755,53152],{"class":356},[66,70757,53155],{"class":3793},[66,70759,99],{"class":76},[66,70761,70762],{"class":356},"\"ie=edge\"",[66,70764,60907],{"class":76},[66,70766,70767,70769,70771,70774,70776],{"class":68,"line":241},[66,70768,53928],{"class":76},[66,70770,53191],{"class":53084},[66,70772,70773],{"class":76},">学生信息管理\u003C\u002F",[66,70775,53191],{"class":53084},[66,70777,53091],{"class":76},[66,70779,70780,70782,70785,70788,70790,70793,70795,70797,70800],{"class":68,"line":372},[66,70781,53928],{"class":76},[66,70783,70784],{"class":53084},"link",[66,70786,70787],{"class":3793}," rel",[66,70789,99],{"class":76},[66,70791,70792],{"class":356},"\"stylesheet\"",[66,70794,62836],{"class":3793},[66,70796,99],{"class":76},[66,70798,70799],{"class":356},"\"css\u002Findex.css\"",[66,70801,60907],{"class":76},[66,70803,70804,70806,70808],{"class":68,"line":377},[66,70805,53569],{"class":76},[66,70807,53118],{"class":53084},[66,70809,53091],{"class":76},[66,70811,70812],{"class":68,"line":392},[66,70813,109],{"emptyLinePlaceholder":108},[66,70815,70816,70818,70820],{"class":68,"line":405},[66,70817,413],{"class":76},[66,70819,53584],{"class":53084},[66,70821,53091],{"class":76},[66,70823,70824,70826,70828,70831,70833],{"class":68,"line":418},[66,70825,53928],{"class":76},[66,70827,10],{"class":53084},[66,70829,70830],{"class":76},">新增学员\u003C\u002F",[66,70832,10],{"class":53084},[66,70834,53091],{"class":76},[66,70836,70837,70839,70841,70843,70845,70847,70850,70852,70854],{"class":68,"line":430},[66,70838,53928],{"class":76},[66,70840,68404],{"class":53084},[66,70842,55268],{"class":3793},[66,70844,99],{"class":76},[66,70846,64443],{"class":356},[66,70848,70849],{"class":3793}," autocomplete",[66,70851,99],{"class":76},[66,70853,33568],{"class":356},[66,70855,53091],{"class":76},[66,70857,70858,70861,70863,70865,70867,70869,70871,70873,70876,70878,70880,70882],{"class":68,"line":438},[66,70859,70860],{"class":76},"    姓名：\u003C",[66,70862,351],{"class":53084},[66,70864,55605],{"class":3793},[66,70866,99],{"class":76},[66,70868,64478],{"class":356},[66,70870,55268],{"class":3793},[66,70872,99],{"class":76},[66,70874,70875],{"class":356},"\"uname\"",[66,70877,16724],{"class":3793},[66,70879,99],{"class":76},[66,70881,70875],{"class":356},[66,70883,60907],{"class":76},[66,70885,70886,70889,70891,70893,70895,70897,70899,70901,70904,70906,70908,70910],{"class":68,"line":465},[66,70887,70888],{"class":76},"    年龄：\u003C",[66,70890,351],{"class":53084},[66,70892,55605],{"class":3793},[66,70894,99],{"class":76},[66,70896,64478],{"class":356},[66,70898,55268],{"class":3793},[66,70900,99],{"class":76},[66,70902,70903],{"class":356},"\"age\"",[66,70905,16724],{"class":3793},[66,70907,99],{"class":76},[66,70909,70903],{"class":356},[66,70911,60907],{"class":76},[66,70913,70914],{"class":68,"line":1805},[66,70915,70916],{"class":76},"    性别:\n",[66,70918,70919,70921,70924,70926,70928,70931,70933,70935,70937],{"class":68,"line":1817},[66,70920,53125],{"class":76},[66,70922,70923],{"class":53084},"select",[66,70925,16724],{"class":3793},[66,70927,99],{"class":76},[66,70929,70930],{"class":356},"\"gender\"",[66,70932,55268],{"class":3793},[66,70934,99],{"class":76},[66,70936,70930],{"class":356},[66,70938,53091],{"class":76},[66,70940,70941,70943,70946,70948,70950,70952,70955,70957],{"class":68,"line":1822},[66,70942,57015],{"class":76},[66,70944,70945],{"class":53084},"option",[66,70947,68430],{"class":3793},[66,70949,99],{"class":76},[66,70951,11768],{"class":356},[66,70953,70954],{"class":76},">男\u003C\u002F",[66,70956,70945],{"class":53084},[66,70958,53091],{"class":76},[66,70960,70961,70963,70965,70967,70969,70971,70974,70976],{"class":68,"line":1829},[66,70962,57015],{"class":76},[66,70964,70945],{"class":53084},[66,70966,68430],{"class":3793},[66,70968,99],{"class":76},[66,70970,11837],{"class":356},[66,70972,70973],{"class":76},">女\u003C\u002F",[66,70975,70945],{"class":53084},[66,70977,53091],{"class":76},[66,70979,70980,70982,70984],{"class":68,"line":3529},[66,70981,53560],{"class":76},[66,70983,70923],{"class":53084},[66,70985,53091],{"class":76},[66,70987,70988,70991,70993,70995,70997,70999,71001,71003,71006,71008,71010,71012],{"class":68,"line":3557},[66,70989,70990],{"class":76},"    薪资：\u003C",[66,70992,351],{"class":53084},[66,70994,55605],{"class":3793},[66,70996,99],{"class":76},[66,70998,64478],{"class":356},[66,71000,55268],{"class":3793},[66,71002,99],{"class":76},[66,71004,71005],{"class":356},"\"salary\"",[66,71007,16724],{"class":3793},[66,71009,99],{"class":76},[66,71011,71005],{"class":356},[66,71013,60907],{"class":76},[66,71015,71016,71019,71021,71023,71025,71028,71030,71032,71034],{"class":68,"line":3562},[66,71017,71018],{"class":76},"    就业城市：\u003C",[66,71020,70923],{"class":53084},[66,71022,16724],{"class":3793},[66,71024,99],{"class":76},[66,71026,71027],{"class":356},"\"city\"",[66,71029,55268],{"class":3793},[66,71031,99],{"class":76},[66,71033,71027],{"class":356},[66,71035,53091],{"class":76},[66,71037,71038,71040,71042,71044,71046,71049,71052,71054],{"class":68,"line":3579},[66,71039,57015],{"class":76},[66,71041,70945],{"class":53084},[66,71043,68430],{"class":3793},[66,71045,99],{"class":76},[66,71047,71048],{"class":356},"\"北京\"",[66,71050,71051],{"class":76},">北京\u003C\u002F",[66,71053,70945],{"class":53084},[66,71055,53091],{"class":76},[66,71057,71058,71060,71062,71064,71066,71069,71072,71074],{"class":68,"line":3584},[66,71059,57015],{"class":76},[66,71061,70945],{"class":53084},[66,71063,68430],{"class":3793},[66,71065,99],{"class":76},[66,71067,71068],{"class":356},"\"上海\"",[66,71070,71071],{"class":76},">上海\u003C\u002F",[66,71073,70945],{"class":53084},[66,71075,53091],{"class":76},[66,71077,71078,71080,71082,71084,71086,71089,71092,71094],{"class":68,"line":3589},[66,71079,57015],{"class":76},[66,71081,70945],{"class":53084},[66,71083,68430],{"class":3793},[66,71085,99],{"class":76},[66,71087,71088],{"class":356},"\"广州\"",[66,71090,71091],{"class":76},">广州\u003C\u002F",[66,71093,70945],{"class":53084},[66,71095,53091],{"class":76},[66,71097,71098,71100,71102,71104,71106,71109,71112,71114],{"class":68,"line":3594},[66,71099,57015],{"class":76},[66,71101,70945],{"class":53084},[66,71103,68430],{"class":3793},[66,71105,99],{"class":76},[66,71107,71108],{"class":356},"\"深圳\"",[66,71110,71111],{"class":76},">深圳\u003C\u002F",[66,71113,70945],{"class":53084},[66,71115,53091],{"class":76},[66,71117,71118,71120,71122,71124,71126,71129,71132,71134],{"class":68,"line":3608},[66,71119,57015],{"class":76},[66,71121,70945],{"class":53084},[66,71123,68430],{"class":3793},[66,71125,99],{"class":76},[66,71127,71128],{"class":356},"\"曹县\"",[66,71130,71131],{"class":76},">曹县\u003C\u002F",[66,71133,70945],{"class":53084},[66,71135,53091],{"class":76},[66,71137,71138,71140,71142],{"class":68,"line":3613},[66,71139,53560],{"class":76},[66,71141,70923],{"class":53084},[66,71143,53091],{"class":76},[66,71145,71146,71148,71150,71152,71154,71157,71160,71162],{"class":68,"line":4401},[66,71147,53125],{"class":76},[66,71149,55668],{"class":53084},[66,71151,55268],{"class":3793},[66,71153,99],{"class":76},[66,71155,71156],{"class":356},"\"add\"",[66,71158,71159],{"class":76},">录入\u003C\u002F",[66,71161,55668],{"class":53084},[66,71163,53091],{"class":76},[66,71165,71166,71168,71170],{"class":68,"line":4415},[66,71167,54199],{"class":76},[66,71169,68404],{"class":53084},[66,71171,53091],{"class":76},[66,71173,71174],{"class":68,"line":4423},[66,71175,109],{"emptyLinePlaceholder":108},[66,71177,71178,71180,71182,71185,71187],{"class":68,"line":4428},[66,71179,53928],{"class":76},[66,71181,10],{"class":53084},[66,71183,71184],{"class":76},">就业榜\u003C\u002F",[66,71186,10],{"class":53084},[66,71188,53091],{"class":76},[66,71190,71191,71193,71195],{"class":68,"line":4434},[66,71192,53928],{"class":76},[66,71194,2129],{"class":53084},[66,71196,53091],{"class":76},[66,71198,71199,71201,71203],{"class":68,"line":4440},[66,71200,53125],{"class":76},[66,71202,2132],{"class":53084},[66,71204,53091],{"class":76},[66,71206,71207,71209,71211],{"class":68,"line":4445},[66,71208,57015],{"class":76},[66,71210,2135],{"class":53084},[66,71212,53091],{"class":76},[66,71214,71215,71217,71219,71222,71224],{"class":68,"line":9759},[66,71216,57083],{"class":76},[66,71218,2138],{"class":53084},[66,71220,71221],{"class":76},">序号\u003C\u002F",[66,71223,2138],{"class":53084},[66,71225,53091],{"class":76},[66,71227,71228,71230,71232,71235,71237],{"class":68,"line":9783},[66,71229,57083],{"class":76},[66,71231,2138],{"class":53084},[66,71233,71234],{"class":76},">姓名\u003C\u002F",[66,71236,2138],{"class":53084},[66,71238,53091],{"class":76},[66,71240,71241,71243,71245,71248,71250],{"class":68,"line":9788},[66,71242,57083],{"class":76},[66,71244,2138],{"class":53084},[66,71246,71247],{"class":76},">年龄\u003C\u002F",[66,71249,2138],{"class":53084},[66,71251,53091],{"class":76},[66,71253,71254,71256,71258,71261,71263],{"class":68,"line":9794},[66,71255,57083],{"class":76},[66,71257,2138],{"class":53084},[66,71259,71260],{"class":76},">性别\u003C\u002F",[66,71262,2138],{"class":53084},[66,71264,53091],{"class":76},[66,71266,71267,71269,71271,71274,71276],{"class":68,"line":9821},[66,71268,57083],{"class":76},[66,71270,2138],{"class":53084},[66,71272,71273],{"class":76},">薪资\u003C\u002F",[66,71275,2138],{"class":53084},[66,71277,53091],{"class":76},[66,71279,71280,71282,71284,71287,71289],{"class":68,"line":9826},[66,71281,57083],{"class":76},[66,71283,2138],{"class":53084},[66,71285,71286],{"class":76},">就业城市\u003C\u002F",[66,71288,2138],{"class":53084},[66,71290,53091],{"class":76},[66,71292,71293,71295,71297,71300,71302],{"class":68,"line":9832},[66,71294,57083],{"class":76},[66,71296,2138],{"class":53084},[66,71298,71299],{"class":76},">操作\u003C\u002F",[66,71301,2138],{"class":53084},[66,71303,53091],{"class":76},[66,71305,71306,71308,71310],{"class":68,"line":9844},[66,71307,57188],{"class":76},[66,71309,2135],{"class":53084},[66,71311,53091],{"class":76},[66,71313,71314,71316,71318],{"class":68,"line":9856},[66,71315,53560],{"class":76},[66,71317,2132],{"class":53084},[66,71319,53091],{"class":76},[66,71321,71322,71324,71326],{"class":68,"line":9868},[66,71323,53125],{"class":76},[66,71325,2176],{"class":53084},[66,71327,53091],{"class":76},[66,71329,71330],{"class":68,"line":11523},[66,71331,71332],{"class":758},"      \u003C!-- \n",[66,71334,71335],{"class":68,"line":11548},[66,71336,71337],{"class":758},"        \u003Ctr>\n",[66,71339,71340],{"class":68,"line":11571},[66,71341,71342],{"class":758},"          \u003Ctd>1001\u003C\u002Ftd>\n",[66,71344,71345],{"class":68,"line":11595},[66,71346,71347],{"class":758},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[66,71349,71350],{"class":68,"line":11600},[66,71351,71352],{"class":758},"          \u003Ctd>19\u003C\u002Ftd>\n",[66,71354,71355],{"class":68,"line":11605},[66,71356,71357],{"class":758},"          \u003Ctd>男\u003C\u002Ftd>\n",[66,71359,71360],{"class":68,"line":11610},[66,71361,71362],{"class":758},"          \u003Ctd>15000\u003C\u002Ftd>\n",[66,71364,71365],{"class":68,"line":11619},[66,71366,71367],{"class":758},"          \u003Ctd>上海\u003C\u002Ftd>\n",[66,71369,71370],{"class":68,"line":11624},[66,71371,71372],{"class":758},"          \u003Ctd>\n",[66,71374,71375],{"class":68,"line":11630},[66,71376,71377],{"class":758},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[66,71379,71380],{"class":68,"line":11651},[66,71381,71382],{"class":758},"          \u003C\u002Ftd>\n",[66,71384,71385],{"class":68,"line":11657},[66,71386,71387],{"class":758},"        \u003C\u002Ftr> \n",[66,71389,71390],{"class":68,"line":11671},[66,71391,71392],{"class":758},"        -->\n",[66,71394,71395,71397,71399],{"class":68,"line":11677},[66,71396,53560],{"class":76},[66,71398,2176],{"class":53084},[66,71400,53091],{"class":76},[66,71402,71403,71405,71407],{"class":68,"line":11704},[66,71404,54199],{"class":76},[66,71406,2129],{"class":53084},[66,71408,53091],{"class":76},[66,71410,71411,71413,71415],{"class":68,"line":11713},[66,71412,53928],{"class":76},[66,71414,53597],{"class":53084},[66,71416,53091],{"class":76},[66,71418,71419],{"class":68,"line":11719},[66,71420,61738],{"class":758},[66,71422,71423,71425,71428,71430,71432,71434,71436,71439],{"class":68,"line":11727},[66,71424,13027],{"class":72},[66,71426,71427],{"class":102}," uname",[66,71429,15369],{"class":72},[66,71431,56177],{"class":76},[66,71433,56180],{"class":3793},[66,71435,348],{"class":76},[66,71437,71438],{"class":356},"'.uname'",[66,71440,313],{"class":76},[66,71442,71443,71445,71447,71449,71451,71453,71455,71458],{"class":68,"line":11732},[66,71444,13027],{"class":72},[66,71446,17492],{"class":102},[66,71448,15369],{"class":72},[66,71450,56177],{"class":76},[66,71452,56180],{"class":3793},[66,71454,348],{"class":76},[66,71456,71457],{"class":356},"'.age'",[66,71459,313],{"class":76},[66,71461,71462,71464,71467,71469,71471,71473,71475,71478],{"class":68,"line":18407},[66,71463,13027],{"class":72},[66,71465,71466],{"class":102}," gender",[66,71468,15369],{"class":72},[66,71470,56177],{"class":76},[66,71472,56180],{"class":3793},[66,71474,348],{"class":76},[66,71476,71477],{"class":356},"'.gender'",[66,71479,313],{"class":76},[66,71481,71482,71484,71487,71489,71491,71493,71495,71498],{"class":68,"line":18413},[66,71483,13027],{"class":72},[66,71485,71486],{"class":102}," salary",[66,71488,15369],{"class":72},[66,71490,56177],{"class":76},[66,71492,56180],{"class":3793},[66,71494,348],{"class":76},[66,71496,71497],{"class":356},"'.salary'",[66,71499,313],{"class":76},[66,71501,71502,71504,71507,71509,71511,71513,71515,71518],{"class":68,"line":18436},[66,71503,13027],{"class":72},[66,71505,71506],{"class":102}," city",[66,71508,15369],{"class":72},[66,71510,56177],{"class":76},[66,71512,56180],{"class":3793},[66,71514,348],{"class":76},[66,71516,71517],{"class":356},"'.city'",[66,71519,313],{"class":76},[66,71521,71522,71524,71527,71529,71531,71533,71535,71538],{"class":68,"line":18442},[66,71523,13027],{"class":72},[66,71525,71526],{"class":102}," tbody",[66,71528,15369],{"class":72},[66,71530,56177],{"class":76},[66,71532,56180],{"class":3793},[66,71534,348],{"class":76},[66,71536,71537],{"class":356},"'tbody'",[66,71539,313],{"class":76},[66,71541,71542],{"class":68,"line":18465},[66,71543,109],{"emptyLinePlaceholder":108},[66,71545,71546],{"class":68,"line":18479},[66,71547,71548],{"class":758},"    \u002F\u002F 获取所有带有name属性的元素\n",[66,71550,71551,71553,71556,71558,71560,71562,71564,71567],{"class":68,"line":18499},[66,71552,13027],{"class":72},[66,71554,71555],{"class":102}," items",[66,71557,15369],{"class":72},[66,71559,56177],{"class":76},[66,71561,57462],{"class":3793},[66,71563,348],{"class":76},[66,71565,71566],{"class":356},"'[name]'",[66,71568,313],{"class":76},[66,71570,71571],{"class":68,"line":18505},[66,71572,71573],{"class":758},"    \u002F\u002F 声明一个空的数组\n",[66,71575,71576,71578,71580,71582],{"class":68,"line":18516},[66,71577,13027],{"class":72},[66,71579,59475],{"class":102},[66,71581,15369],{"class":72},[66,71583,53622],{"class":76},[66,71585,71586],{"class":68,"line":18539},[66,71587,71588],{"class":758},"    \u002F\u002F 1.录入模块\n",[66,71590,71591],{"class":68,"line":18561},[66,71592,71593],{"class":758},"    \u002F\u002F 1.1这是一个表单提交事件\n",[66,71595,71596,71598,71601,71603,71605,71607,71609,71612],{"class":68,"line":18566},[66,71597,13027],{"class":72},[66,71599,71600],{"class":102}," info",[66,71602,15369],{"class":72},[66,71604,56177],{"class":76},[66,71606,56180],{"class":3793},[66,71608,348],{"class":76},[66,71610,71611],{"class":356},"'.info'",[66,71613,313],{"class":76},[66,71615,71616,71619,71621,71623,71626,71628,71630,71632,71634],{"class":68,"line":18572},[66,71617,71618],{"class":76},"    info.",[66,71620,59593],{"class":3793},[66,71622,348],{"class":76},[66,71624,71625],{"class":356},"'submit'",[66,71627,307],{"class":76},[66,71629,56230],{"class":72},[66,71631,3492],{"class":76},[66,71633,2068],{"class":1234},[66,71635,14247],{"class":76},[66,71637,71638],{"class":68,"line":18586},[66,71639,71640],{"class":758},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[66,71642,71643,71646,71649],{"class":68,"line":18599},[66,71644,71645],{"class":76},"      e.",[66,71647,71648],{"class":3793},"preventDefault",[66,71650,1253],{"class":76},[66,71652,71653],{"class":68,"line":18604},[66,71654,61792],{"class":758},[66,71656,71657],{"class":68,"line":18618},[66,71658,109],{"emptyLinePlaceholder":108},[66,71660,71661],{"class":68,"line":18623},[66,71662,71663],{"class":758},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[66,71665,71666],{"class":68,"line":18629},[66,71667,71668],{"class":758},"      \u002F\u002F 先遍历循环\n",[66,71670,71671,71673,71675,71677,71679,71681,71683,71685,71687,71690,71692,71694,71696],{"class":68,"line":18634},[66,71672,54066],{"class":72},[66,71674,3492],{"class":76},[66,71676,53631],{"class":72},[66,71678,117],{"class":76},[66,71680,99],{"class":72},[66,71682,962],{"class":102},[66,71684,11254],{"class":76},[66,71686,413],{"class":72},[66,71688,71689],{"class":76}," items.",[66,71691,53752],{"class":102},[66,71693,5033],{"class":76},[66,71695,4118],{"class":72},[66,71697,14247],{"class":76},[66,71699,71700,71702,71705,71707,71710],{"class":68,"line":18648},[66,71701,4321],{"class":72},[66,71703,71704],{"class":76}," (items[i].value ",[66,71706,56267],{"class":72},[66,71708,71709],{"class":356}," ''",[66,71711,14247],{"class":76},[66,71713,71714,71717,71720,71722,71725],{"class":68,"line":18653},[66,71715,71716],{"class":72},"          return",[66,71718,71719],{"class":3793}," alert",[66,71721,348],{"class":76},[66,71723,71724],{"class":356},"'输入内容不能为空'",[66,71726,313],{"class":76},[66,71728,71729],{"class":68,"line":18658},[66,71730,4353],{"class":76},[66,71732,71733],{"class":68,"line":18672},[66,71734,54180],{"class":76},[66,71736,71737],{"class":68,"line":18684},[66,71738,109],{"emptyLinePlaceholder":108},[66,71740,71741],{"class":68,"line":18689},[66,71742,71743],{"class":758},"      \u002F\u002F 创建新的对象\n",[66,71745,71746,71748,71751,71753],{"class":68,"line":18702},[66,71747,60008],{"class":72},[66,71749,71750],{"class":102}," obj",[66,71752,15369],{"class":72},[66,71754,17375],{"class":76},[66,71756,71757,71760,71762,71764,71766],{"class":68,"line":18707},[66,71758,71759],{"class":76},"        stuID: arr.",[66,71761,53752],{"class":102},[66,71763,47352],{"class":72},[66,71765,1187],{"class":102},[66,71767,33259],{"class":76},[66,71769,71770],{"class":68,"line":18712},[66,71771,71772],{"class":76},"        uname: uname.value,\n",[66,71774,71775],{"class":68,"line":18717},[66,71776,71777],{"class":76},"        age: age.value,\n",[66,71779,71780],{"class":68,"line":18730},[66,71781,71782],{"class":76},"        gender: gender.value,\n",[66,71784,71785],{"class":68,"line":18735},[66,71786,71787],{"class":76},"        salary: salary.value,\n",[66,71789,71790],{"class":68,"line":34423},[66,71791,71792],{"class":76},"        city: city.value\n",[66,71794,71795],{"class":68,"line":34429},[66,71796,54180],{"class":76},[66,71798,71799],{"class":68,"line":34435},[66,71800,71801],{"class":758},"      \u002F\u002F console.log(obj);\n",[66,71803,71804],{"class":68,"line":34441},[66,71805,71806],{"class":758},"      \u002F\u002F 追加到数组里面\n",[66,71808,71809,71811,71813],{"class":68,"line":34447},[66,71810,59787],{"class":76},[66,71812,53668],{"class":3793},[66,71814,71815],{"class":76},"(obj)\n",[66,71817,71818],{"class":68,"line":34458},[66,71819,71820],{"class":758},"      \u002F\u002F console.log(arr);\n",[66,71822,71823],{"class":68,"line":34464},[66,71824,71825],{"class":758},"      \u002F\u002F 清空表单  reset重置表单\n",[66,71827,71828,71831,71833,71836],{"class":68,"line":34484},[66,71829,71830],{"class":102},"      this",[66,71832,2537],{"class":76},[66,71834,71835],{"class":3793},"reset",[66,71837,1253],{"class":76},[66,71839,71840],{"class":68,"line":34490},[66,71841,71842],{"class":758},"      \u002F\u002F 调用渲染函数\n",[66,71844,71845,71848],{"class":68,"line":34501},[66,71846,71847],{"class":3793},"      render",[66,71849,1253],{"class":76},[66,71851,71852],{"class":68,"line":34507},[66,71853,35249],{"class":76},[66,71855,71856],{"class":68,"line":34513},[66,71857,71858],{"class":758},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[66,71860,71861,71864,71867],{"class":68,"line":34519},[66,71862,71863],{"class":72},"    function",[66,71865,71866],{"class":3793}," render",[66,71868,12659],{"class":76},[66,71870,71871],{"class":68,"line":34525},[66,71872,71873],{"class":758},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[66,71875,71876,71879,71881],{"class":68,"line":34531},[66,71877,71878],{"class":76},"      tbody.innerHTML ",[66,71880,99],{"class":72},[66,71882,71883],{"class":356}," ''\n",[66,71885,71886],{"class":68,"line":34537},[66,71887,71888],{"class":758},"      \u002F\u002F 遍历数组\n",[66,71890,71891,71893,71895,71897,71899,71901,71903,71905,71907,71909,71911,71913,71915],{"class":68,"line":34543},[66,71892,54066],{"class":72},[66,71894,3492],{"class":76},[66,71896,53631],{"class":72},[66,71898,117],{"class":76},[66,71900,99],{"class":72},[66,71902,962],{"class":102},[66,71904,11254],{"class":76},[66,71906,413],{"class":72},[66,71908,53749],{"class":76},[66,71910,53752],{"class":102},[66,71912,5033],{"class":76},[66,71914,4118],{"class":72},[66,71916,14247],{"class":76},[66,71918,71919,71921,71924,71926,71928,71931,71933,71936],{"class":68,"line":34563},[66,71920,63049],{"class":72},[66,71922,71923],{"class":102}," tr",[66,71925,15369],{"class":72},[66,71927,56177],{"class":76},[66,71929,71930],{"class":3793},"createElement",[66,71932,348],{"class":76},[66,71934,71935],{"class":356},"'tr'",[66,71937,313],{"class":76},[66,71939,71940,71943,71945],{"class":68,"line":34569},[66,71941,71942],{"class":76},"        tr.innerHTML ",[66,71944,99],{"class":72},[66,71946,71947],{"class":356}," `\n",[66,71949,71950,71953,71955,71957,71959,71962,71965],{"class":68,"line":34585},[66,71951,71952],{"class":356},"        \u003Ctd>${",[66,71954,5697],{"class":76},[66,71956,2869],{"class":356},[66,71958,257],{"class":76},[66,71960,71961],{"class":356},"].",[66,71963,71964],{"class":76},"stuID",[66,71966,71967],{"class":356},"}\u003C\u002Ftd>\n",[66,71969,71970,71973,71975,71977,71979,71981,71984],{"class":68,"line":34591},[66,71971,71972],{"class":356},"          \u003Ctd>${",[66,71974,5697],{"class":76},[66,71976,2869],{"class":356},[66,71978,257],{"class":76},[66,71980,71961],{"class":356},[66,71982,71983],{"class":76},"uname",[66,71985,71967],{"class":356},[66,71987,71988,71990,71992,71994,71996,71998,72001],{"class":68,"line":34605},[66,71989,71972],{"class":356},[66,71991,5697],{"class":76},[66,71993,2869],{"class":356},[66,71995,257],{"class":76},[66,71997,71961],{"class":356},[66,71999,72000],{"class":76},"age",[66,72002,71967],{"class":356},[66,72004,72005,72007,72009,72011,72013,72015,72018],{"class":68,"line":34611},[66,72006,71972],{"class":356},[66,72008,5697],{"class":76},[66,72010,2869],{"class":356},[66,72012,257],{"class":76},[66,72014,71961],{"class":356},[66,72016,72017],{"class":76},"gender",[66,72019,71967],{"class":356},[66,72021,72022,72024,72026,72028,72030,72032,72035],{"class":68,"line":34626},[66,72023,71972],{"class":356},[66,72025,5697],{"class":76},[66,72027,2869],{"class":356},[66,72029,257],{"class":76},[66,72031,71961],{"class":356},[66,72033,72034],{"class":76},"salary",[66,72036,71967],{"class":356},[66,72038,72039,72041,72043,72045,72047,72049,72052],{"class":68,"line":34632},[66,72040,71972],{"class":356},[66,72042,5697],{"class":76},[66,72044,2869],{"class":356},[66,72046,257],{"class":76},[66,72048,71961],{"class":356},[66,72050,72051],{"class":76},"city",[66,72053,71967],{"class":356},[66,72055,72056],{"class":68,"line":34641},[66,72057,71372],{"class":356},[66,72059,72060,72063,72065],{"class":68,"line":34647},[66,72061,72062],{"class":356},"            \u003Ca href=\"javascript:\" data-id=${",[66,72064,257],{"class":76},[66,72066,72067],{"class":356},"}>删除\u003C\u002Fa>\n",[66,72069,72070],{"class":68,"line":34656},[66,72071,72072],{"class":356},"          \u003C\u002Ftd> \n",[66,72074,72075],{"class":68,"line":34662},[66,72076,72077],{"class":356},"          `\n",[66,72079,72080],{"class":68,"line":34668},[66,72081,72082],{"class":758},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[66,72084,72085,72088,72091],{"class":68,"line":34677},[66,72086,72087],{"class":76},"        tbody.",[66,72089,72090],{"class":3793},"appendChild",[66,72092,72093],{"class":76},"(tr)\n",[66,72095,72096],{"class":68,"line":34683},[66,72097,54180],{"class":76},[66,72099,72100],{"class":68,"line":34694},[66,72101,4013],{"class":76},[66,72103,72104],{"class":68,"line":34700},[66,72105,109],{"emptyLinePlaceholder":108},[66,72107,72108],{"class":68,"line":34719},[66,72109,72110],{"class":758},"    \u002F\u002F 3.删除委托\n",[66,72112,72113],{"class":68,"line":34725},[66,72114,72115],{"class":758},"    \u002F\u002F 3.1 事件委托 tbody\n",[66,72117,72118,72121,72123,72125,72127,72129,72131,72133,72135],{"class":68,"line":34736},[66,72119,72120],{"class":76},"    tbody.",[66,72122,59593],{"class":3793},[66,72124,348],{"class":76},[66,72126,59598],{"class":356},[66,72128,307],{"class":76},[66,72130,56230],{"class":72},[66,72132,3492],{"class":76},[66,72134,2068],{"class":1234},[66,72136,14247],{"class":76},[66,72138,72139,72141,72143,72145,72147],{"class":68,"line":34742},[66,72140,56261],{"class":72},[66,72142,68813],{"class":76},[66,72144,56267],{"class":72},[66,72146,70035],{"class":356},[66,72148,14247],{"class":76},[66,72150,72151],{"class":68,"line":34762},[66,72152,72153],{"class":758},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[66,72155,72156],{"class":68,"line":34778},[66,72157,72158],{"class":758},"        \u002F\u002F console.log(e.target.dataset.id);\n",[66,72160,72161],{"class":68,"line":34784},[66,72162,72163],{"class":758},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[66,72165,72166,72169,72171,72174,72176],{"class":68,"line":34798},[66,72167,72168],{"class":76},"        arr.",[66,72170,59790],{"class":3793},[66,72172,72173],{"class":76},"(e.target.dataset.id, ",[66,72175,304],{"class":102},[66,72177,313],{"class":76},[66,72179,72180],{"class":68,"line":34804},[66,72181,72182],{"class":758},"        \u002F\u002F 重新渲染一次\n",[66,72184,72185,72188],{"class":68,"line":34810},[66,72186,72187],{"class":3793},"        render",[66,72189,1253],{"class":76},[66,72191,72192],{"class":68,"line":34821},[66,72193,54180],{"class":76},[66,72195,72196],{"class":68,"line":34827},[66,72197,35249],{"class":76},[66,72199,72200,72202,72204],{"class":68,"line":34833},[66,72201,54199],{"class":76},[66,72203,53597],{"class":53084},[66,72205,53091],{"class":76},[66,72207,72208],{"class":68,"line":34843},[66,72209,109],{"emptyLinePlaceholder":108},[66,72211,72212,72214,72216],{"class":68,"line":34849},[66,72213,53569],{"class":76},[66,72215,53584],{"class":53084},[66,72217,53091],{"class":76},[66,72219,72220],{"class":68,"line":34860},[66,72221,109],{"emptyLinePlaceholder":108},[66,72223,72224,72226,72228],{"class":68,"line":34866},[66,72225,53569],{"class":76},[66,72227,52419],{"class":53084},[66,72229,53091],{"class":76},[19,72231,72232],{},"样式：",[57,72234,72238],{"className":72235,"code":72236,"language":72237,"meta":62,"style":62},"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",[23,72239,72240,72245,72255,72264,72268,72272,72277,72287,72292,72296,72301,72311,72316,72325,72329,72333,72338,72343,72353,72363,72368,72372,72377,72386,72396,72401,72411,72421,72425,72430,72438,72442,72447,72452,72457,72465,72474,72478,72483,72492,72496,72501,72510,72514,72519,72528,72537,72545,72549,72554,72563,72573,72582,72592,72598,72607,72617,72627,72631,72636,72645,72653,72663,72671,72680,72689,72699,72707,72711,72716,72725],{"__ignoreMap":62},[66,72241,72242],{"class":68,"line":69},[66,72243,72244],{"class":76},"* {\n",[66,72246,72247,72250,72252],{"class":68,"line":80},[66,72248,72249],{"class":53084},"  margin",[66,72251,53221],{"class":76},[66,72253,72254],{"class":356},"0;\n",[66,72256,72257,72260,72262],{"class":68,"line":112},[66,72258,72259],{"class":356},"  padding",[66,72261,53221],{"class":76},[66,72263,72254],{"class":356},[66,72265,72266],{"class":68,"line":129},[66,72267,3407],{"class":76},[66,72269,72270],{"class":68,"line":138},[66,72271,109],{"emptyLinePlaceholder":108},[66,72273,72274],{"class":68,"line":227},[66,72275,72276],{"class":356},"a {\n",[66,72278,72279,72282,72284],{"class":68,"line":236},[66,72280,72281],{"class":53084},"  text-decoration",[66,72283,53221],{"class":76},[66,72285,72286],{"class":356},"none;\n",[66,72288,72289],{"class":68,"line":241},[66,72290,72291],{"class":356},"  color:#721c24;\n",[66,72293,72294],{"class":68,"line":372},[66,72295,3407],{"class":76},[66,72297,72298],{"class":68,"line":377},[66,72299,72300],{"class":356},"h1 {\n",[66,72302,72303,72306,72308],{"class":68,"line":392},[66,72304,72305],{"class":53084},"  text-align",[66,72307,53221],{"class":76},[66,72309,72310],{"class":356},"center;\n",[66,72312,72313],{"class":68,"line":405},[66,72314,72315],{"class":356},"  color:#333;\n",[66,72317,72318,72320,72322],{"class":68,"line":418},[66,72319,72249],{"class":53084},[66,72321,53221],{"class":76},[66,72323,72324],{"class":356},"20px 0;\n",[66,72326,72327],{"class":68,"line":430},[66,72328,4498],{"class":76},[66,72330,72331],{"class":68,"line":438},[66,72332,3407],{"class":76},[66,72334,72335],{"class":68,"line":465},[66,72336,72337],{"class":356},"table {\n",[66,72339,72340],{"class":68,"line":1805},[66,72341,72342],{"class":356},"  margin:0 auto;\n",[66,72344,72345,72348,72350],{"class":68,"line":1817},[66,72346,72347],{"class":53084},"  width",[66,72349,53221],{"class":76},[66,72351,72352],{"class":356},"800px;\n",[66,72354,72355,72358,72360],{"class":68,"line":1822},[66,72356,72357],{"class":53084},"  border-collapse",[66,72359,53221],{"class":76},[66,72361,72362],{"class":356},"collapse;\n",[66,72364,72365],{"class":68,"line":1829},[66,72366,72367],{"class":356},"  color:#004085;\n",[66,72369,72370],{"class":68,"line":3529},[66,72371,3407],{"class":76},[66,72373,72374],{"class":68,"line":3557},[66,72375,72376],{"class":356},"th {\n",[66,72378,72379,72381,72383],{"class":68,"line":3562},[66,72380,72259],{"class":53084},[66,72382,53221],{"class":76},[66,72384,72385],{"class":356},"10px;\n",[66,72387,72388,72391,72393],{"class":68,"line":3579},[66,72389,72390],{"class":53084},"  background",[66,72392,53221],{"class":76},[66,72394,72395],{"class":758},"#cfe5ff;\n",[66,72397,72398],{"class":68,"line":3584},[66,72399,72400],{"class":76},"  \n",[66,72402,72403,72406,72408],{"class":68,"line":3589},[66,72404,72405],{"class":53084},"  font-size",[66,72407,53221],{"class":76},[66,72409,72410],{"class":356},"20px;\n",[66,72412,72413,72416,72418],{"class":68,"line":3594},[66,72414,72415],{"class":53084},"  font-weight",[66,72417,53221],{"class":76},[66,72419,72420],{"class":356},"400;\n",[66,72422,72423],{"class":68,"line":3608},[66,72424,3407],{"class":76},[66,72426,72427],{"class":68,"line":3613},[66,72428,72429],{"class":356},"td,th {\n",[66,72431,72432,72435],{"class":68,"line":4401},[66,72433,72434],{"class":356},"  border:1px solid",[66,72436,72437],{"class":758}," #b8daff;\n",[66,72439,72440],{"class":68,"line":4415},[66,72441,3407],{"class":76},[66,72443,72444],{"class":68,"line":4423},[66,72445,72446],{"class":356},"td {\n",[66,72448,72449],{"class":68,"line":4428},[66,72450,72451],{"class":356},"  padding:10px;\n",[66,72453,72454],{"class":68,"line":4434},[66,72455,72456],{"class":356},"  color:#666;\n",[66,72458,72459,72461,72463],{"class":68,"line":4440},[66,72460,72305],{"class":53084},[66,72462,53221],{"class":76},[66,72464,72310],{"class":356},[66,72466,72467,72469,72471],{"class":68,"line":4445},[66,72468,72405],{"class":53084},[66,72470,53221],{"class":76},[66,72472,72473],{"class":356},"16px;\n",[66,72475,72476],{"class":68,"line":9759},[66,72477,3407],{"class":76},[66,72479,72480],{"class":68,"line":9783},[66,72481,72482],{"class":356},"tbody tr {\n",[66,72484,72485,72487,72489],{"class":68,"line":9788},[66,72486,72390],{"class":53084},[66,72488,53221],{"class":76},[66,72490,72491],{"class":758},"#fff;\n",[66,72493,72494],{"class":68,"line":9794},[66,72495,3407],{"class":76},[66,72497,72498],{"class":68,"line":9821},[66,72499,72500],{"class":356},"tbody tr:hover {\n",[66,72502,72503,72505,72507],{"class":68,"line":9826},[66,72504,72390],{"class":53084},[66,72506,53221],{"class":76},[66,72508,72509],{"class":758},"#e1ecf8;\n",[66,72511,72512],{"class":68,"line":9832},[66,72513,3407],{"class":76},[66,72515,72516],{"class":68,"line":9844},[66,72517,72518],{"class":356},".info {\n",[66,72520,72521,72523,72525],{"class":68,"line":9856},[66,72522,72347],{"class":53084},[66,72524,53221],{"class":76},[66,72526,72527],{"class":356},"900px;\n",[66,72529,72530,72532,72534],{"class":68,"line":9868},[66,72531,72249],{"class":53084},[66,72533,53221],{"class":76},[66,72535,72536],{"class":356},"50px auto;\n",[66,72538,72539,72541,72543],{"class":68,"line":11523},[66,72540,72305],{"class":53084},[66,72542,53221],{"class":76},[66,72544,72310],{"class":356},[66,72546,72547],{"class":68,"line":11548},[66,72548,3407],{"class":76},[66,72550,72551],{"class":68,"line":11571},[66,72552,72553],{"class":356},".info  input, .info select {\n",[66,72555,72556,72558,72560],{"class":68,"line":11595},[66,72557,72347],{"class":53084},[66,72559,53221],{"class":76},[66,72561,72562],{"class":356},"80px;\n",[66,72564,72565,72568,72570],{"class":68,"line":11600},[66,72566,72567],{"class":53084},"  height",[66,72569,53221],{"class":76},[66,72571,72572],{"class":356},"27px;\n",[66,72574,72575,72578,72580],{"class":68,"line":11605},[66,72576,72577],{"class":53084},"  outline",[66,72579,53221],{"class":76},[66,72581,72286],{"class":356},[66,72583,72584,72587,72589],{"class":68,"line":11610},[66,72585,72586],{"class":53084},"  border-radius",[66,72588,53221],{"class":76},[66,72590,72591],{"class":356},"5px;\n",[66,72593,72594,72596],{"class":68,"line":11619},[66,72595,72434],{"class":356},[66,72597,72437],{"class":758},[66,72599,72600,72603,72605],{"class":68,"line":11624},[66,72601,72602],{"class":53084},"  padding-left",[66,72604,53221],{"class":76},[66,72606,72591],{"class":356},[66,72608,72609,72612,72614],{"class":68,"line":11630},[66,72610,72611],{"class":53084},"  box-sizing",[66,72613,53221],{"class":76},[66,72615,72616],{"class":356},"border-box;\n",[66,72618,72619,72622,72624],{"class":68,"line":11651},[66,72620,72621],{"class":53084},"  margin-right",[66,72623,53221],{"class":76},[66,72625,72626],{"class":356},"15px;\n",[66,72628,72629],{"class":68,"line":11657},[66,72630,3407],{"class":76},[66,72632,72633],{"class":68,"line":11671},[66,72634,72635],{"class":356},".info button {\n",[66,72637,72638,72640,72642],{"class":68,"line":11677},[66,72639,72347],{"class":53084},[66,72641,53221],{"class":76},[66,72643,72644],{"class":356},"60px;\n",[66,72646,72647,72649,72651],{"class":68,"line":11704},[66,72648,72567],{"class":53084},[66,72650,53221],{"class":76},[66,72652,72572],{"class":356},[66,72654,72655,72658,72660],{"class":68,"line":11713},[66,72656,72657],{"class":53084},"  background-color",[66,72659,53221],{"class":76},[66,72661,72662],{"class":758},"#004085;\n",[66,72664,72665,72667,72669],{"class":68,"line":11719},[66,72666,72577],{"class":53084},[66,72668,53221],{"class":76},[66,72670,72286],{"class":356},[66,72672,72673,72676,72678],{"class":68,"line":11727},[66,72674,72675],{"class":53084},"  border",[66,72677,53221],{"class":76},[66,72679,72254],{"class":356},[66,72681,72682,72685,72687],{"class":68,"line":11732},[66,72683,72684],{"class":53084},"  color",[66,72686,53221],{"class":76},[66,72688,72491],{"class":758},[66,72690,72691,72694,72696],{"class":68,"line":18407},[66,72692,72693],{"class":53084},"  cursor",[66,72695,53221],{"class":76},[66,72697,72698],{"class":356},"pointer;\n",[66,72700,72701,72703,72705],{"class":68,"line":18413},[66,72702,72586],{"class":53084},[66,72704,53221],{"class":76},[66,72706,72591],{"class":356},[66,72708,72709],{"class":68,"line":18436},[66,72710,3407],{"class":76},[66,72712,72713],{"class":68,"line":18442},[66,72714,72715],{"class":356},".info .age {\n",[66,72717,72718,72720,72722],{"class":68,"line":18465},[66,72719,72347],{"class":53084},[66,72721,53221],{"class":76},[66,72723,72724],{"class":356},"50px;\n",[66,72726,72727],{"class":68,"line":18479},[66,72728,3407],{"class":76},[19,72730,72731],{},"思路：",[19,72733,72734],{},[3304,72735],{"alt":62,"src":72736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,72738,72739],{},[3304,72740],{"alt":62,"src":72741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,72743,72744],{},[3304,72745],{"alt":62,"src":72746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[484,72748,72750],{"id":72749},"_3315-重绘回流","3.3.15 重绘回流",[19,72752,72753],{},[3304,72754],{"alt":62,"src":72755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,72757,72758],{},[3304,72759],{"alt":62,"src":72760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,72762,72763],{},[3304,72764],{"alt":62,"src":72765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,72767,72769],{"id":72768},"_34-bom","3.4 BOM",[19,72771,72772],{},[3304,72773],{"alt":62,"src":72774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,72776,72777],{},"平时写的document省略了window而已，实际上是window.document",[19,72779,72780],{},"函数也是这样，调用的时候实际为window.fn()",[19,72782,72783],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,72785,72786],{},"window大部分情况下可以省略",[484,72788,72790],{"id":72789},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,72792,72793],{},"只执行一次",[19,72795,72796],{},[3304,72797],{"alt":62,"src":72798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,72800,72801],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,72803,72804],{},[3304,72805],{"alt":62,"src":72806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[484,72808,72810],{"id":72809},"_342-js执行机制","3.4.2 JS执行机制",[19,72812,72813],{},[3304,72814],{"alt":62,"src":72815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,72817,72818],{},"两个的结果都是1111 3333 2222",[19,72820,72821],{},[3304,72822],{"alt":62,"src":72823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,72825,72826],{},[3304,72827],{"alt":62,"src":72828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,72830,72831],{},[3304,72832],{"alt":62,"src":72833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,72835,72836],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,72838,72839],{},"工作流程：",[19,72841,72842],{},[3304,72843],{"alt":62,"src":72844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,72846,72847],{},[3304,72848],{"alt":62,"src":72849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,72851,72852],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,72854,72855],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[484,72857,72859],{"id":72858},"_343-location对象","3.4.3 location对象",[19,72861,72862],{},"location对象属于window这个全局对象下的，可以 省略window",[19,72864,72865],{},[3304,72866],{"alt":62,"src":72867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,72869,72870],{},"href可以跳转页面",[31,72872,72873],{},[34,72874,72875],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,72877,72878],{},"search得到提交信息之后网站后边的地址",[19,72880,72881],{},[3304,72882],{"alt":62,"src":72883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,72885,72886],{},[3304,72887],{"alt":62,"src":72888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[31,72890,72891],{"start":80},[34,72892,72893],{},"hash:这个获取单页面应用#后边的地址",[19,72895,72896],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,72898,72899],{},[3304,72900],{"alt":62,"src":72901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[57,72903,72905],{"className":54849,"code":72904,"language":54851,"meta":62,"style":62},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[23,72906,72907,72927,72947],{"__ignoreMap":62},[66,72908,72909,72911,72913,72915,72917,72920,72923,72925],{"class":68,"line":69},[66,72910,53928],{"class":76},[66,72912,2229],{"class":53084},[66,72914,62836],{"class":3793},[66,72916,99],{"class":76},[66,72918,72919],{"class":356},"\"#\u002Fmy\"",[66,72921,72922],{"class":76},">我的\u003C\u002F",[66,72924,2229],{"class":53084},[66,72926,53091],{"class":76},[66,72928,72929,72931,72933,72935,72937,72940,72943,72945],{"class":68,"line":80},[66,72930,53928],{"class":76},[66,72932,2229],{"class":53084},[66,72934,62836],{"class":3793},[66,72936,99],{"class":76},[66,72938,72939],{"class":356},"\"#\u002Ffriend\"",[66,72941,72942],{"class":76},">关注\u003C\u002F",[66,72944,2229],{"class":53084},[66,72946,53091],{"class":76},[66,72948,72949,72951,72953,72955,72957,72960,72963,72965],{"class":68,"line":112},[66,72950,53928],{"class":76},[66,72952,2229],{"class":53084},[66,72954,62836],{"class":3793},[66,72956,99],{"class":76},[66,72958,72959],{"class":356},"\"#\u002Fdownload\"",[66,72961,72962],{"class":76},">下载\u003C\u002F",[66,72964,2229],{"class":53084},[66,72966,53091],{"class":76},[19,72968,72969],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[31,72971,72972],{"start":112},[34,72973,72974,72975,72977,72978,72980],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[55498,72976],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[55498,72979],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[484,72982,72984],{"id":72983},"_345-navigator对象","3.4.5 navigator对象",[19,72986,72987],{},[3304,72988],{"alt":62,"src":72989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[57,72991,72995],{"className":72992,"code":72993,"language":72994,"meta":62,"style":62},"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",[23,72996,72997,73002,73013,73025,73030,73081,73122,73127,73140,73152,73157],{"__ignoreMap":62},[66,72998,72999],{"class":68,"line":69},[66,73000,73001],{"class":758},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[66,73003,73004,73006,73008,73010],{"class":68,"line":80},[66,73005,2217],{"class":72},[66,73007,348],{"class":76},[66,73009,56230],{"class":72},[66,73011,73012],{"class":76}," () { \n",[66,73014,73015,73017,73020,73022],{"class":68,"line":112},[66,73016,8603],{"class":72},[66,73018,73019],{"class":102}," userAgent",[66,73021,15369],{"class":72},[66,73023,73024],{"class":76}," navigator.userAgent \n",[66,73026,73027],{"class":68,"line":129},[66,73028,73029],{"class":758},"\u002F\u002F 验证是否为Android或iPhone \n",[66,73031,73032,73034,73037,73039,73042,73045,73047,73049,73052,73054,73057,73061,73063,73065,73067,73070,73072,73074,73076,73078],{"class":68,"line":138},[66,73033,8603],{"class":72},[66,73035,73036],{"class":102}," android",[66,73038,15369],{"class":72},[66,73040,73041],{"class":76}," userAgent.",[66,73043,73044],{"class":3793},"match",[66,73046,348],{"class":76},[66,73048,2563],{"class":356},[66,73050,73051],{"class":49761},"(Android);",[66,73053,2961],{"class":72},[66,73055,73056],{"class":102},"[\\s",[66,73058,73060],{"class":73059},"snhLl","\\\u002F",[66,73062,2917],{"class":102},[66,73064,1184],{"class":72},[66,73066,348],{"class":49761},[66,73068,73069],{"class":102},"[\\d.]",[66,73071,1184],{"class":72},[66,73073,2413],{"class":49761},[66,73075,2961],{"class":72},[66,73077,2563],{"class":356},[66,73079,73080],{"class":76},") \n",[66,73082,73083,73085,73088,73090,73092,73094,73096,73098,73101,73104,73107,73109,73111,73114,73116,73118,73120],{"class":68,"line":227},[66,73084,8603],{"class":72},[66,73086,73087],{"class":102}," iphone",[66,73089,15369],{"class":72},[66,73091,73041],{"class":76},[66,73093,73044],{"class":3793},[66,73095,348],{"class":76},[66,73097,2563],{"class":356},[66,73099,73100],{"class":49761},"(iPhone",[66,73102,73103],{"class":102},"\\s",[66,73105,73106],{"class":49761},"OS)",[66,73108,73103],{"class":102},[66,73110,348],{"class":49761},[66,73112,73113],{"class":102},"[\\d_]",[66,73115,1184],{"class":72},[66,73117,2413],{"class":49761},[66,73119,2563],{"class":356},[66,73121,73080],{"class":76},[66,73123,73124],{"class":68,"line":236},[66,73125,73126],{"class":758},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[66,73128,73129,73131,73134,73137],{"class":68,"line":241},[66,73130,3373],{"class":72},[66,73132,73133],{"class":76}," (android ",[66,73135,73136],{"class":72},"||",[66,73138,73139],{"class":76}," iphone) { \n",[66,73141,73142,73145,73147,73150],{"class":68,"line":372},[66,73143,73144],{"class":76},"location.href ",[66,73146,99],{"class":72},[66,73148,73149],{"class":356}," 'http:\u002F\u002Fm.itcast.cn'",[66,73151,4498],{"class":76},[66,73153,73154],{"class":68,"line":377},[66,73155,73156],{"class":76},"} \n",[66,73158,73159],{"class":68,"line":392},[66,73160,73161],{"class":76},"})()\n",[484,73163,73165],{"id":73164},"_346-histroy对象","3.4.6 histroy对象",[19,73167,73168],{},[3304,73169],{"alt":62,"src":73170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,73172,73173],{},"浏览器地址的前进与后退!!!",[19,73175,73176],{},"history.back() 等效于 history.go(-1)",[19,73178,73179],{},"history.forward() 等效于 history.go(1)",[14,73181,73183],{"id":73182},"_35-本地存储","3.5 本地存储",[31,73185,73186,73189,73192],{},[34,73187,73188],{},"数据存储在用户浏览器中",[34,73190,73191],{},"设置、读取方便、甚至页面刷新不丢失数据",[34,73193,73194],{},"容量较大，sessionStorage和localStorage约 5M 左右",[484,73196,73198],{"id":73197},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,73200,73201],{},"只能存储字符串",[19,73203,73204],{},[3304,73205],{"alt":62,"src":73206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,73208,73209],{},[3304,73210],{"alt":62,"src":73211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,73213,73214],{},"键值对要加引号,不然就会当变量来看了",[19,73216,73217],{},"localStorage.setItem('uname', 'pink')",[19,73219,73220],{},"刷新之后信息不再丢失",[19,73222,73223],{},"操作key,value会跟着变",[19,73225,73226],{},"删除只删除键就可以,即名字",[19,73228,73217],{},[19,73230,73231],{},"改:",[19,73233,73234],{},"localStorage.setItem('uname','red')",[19,73236,73237],{},"有这个键就是改,没有这个键就是改",[19,73239,73240],{},[3304,73241],{"alt":62,"src":73242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,73244,73245],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,73247,73248],{},[3304,73249],{"alt":62,"src":73250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,73252,73253],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[484,73255,73257],{"id":73256},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,73259,73260],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,73262,73263],{},"特性:",[31,73265,73266,73269,73272,73275],{},[34,73267,73268],{},"生命周期为关闭浏览器窗口",[34,73270,73271],{},"在同一个窗口(页面)下数据可以共享",[34,73273,73274],{},"以键值对的形式存储使用",[34,73276,73277],{},"用法跟localStorage 基本相同",[484,73279,73281],{"id":73280},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,73283,73284],{},"本地只能存储字符串,无法直接存储复杂数据类型",[57,73286,73288],{"className":54849,"code":73287,"language":54851,"meta":62,"style":62},"\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",[23,73289,73290,73298,73303,73308,73313,73318,73322,73327,73332],{"__ignoreMap":62},[66,73291,73292,73294,73296],{"class":68,"line":69},[66,73293,413],{"class":76},[66,73295,53597],{"class":53084},[66,73297,53091],{"class":76},[66,73299,73300],{"class":68,"line":80},[66,73301,73302],{"class":76},"    const obj = {\n",[66,73304,73305],{"class":68,"line":112},[66,73306,73307],{"class":76},"      uname: 'pink老师',\n",[66,73309,73310],{"class":68,"line":129},[66,73311,73312],{"class":76},"      age: 18,\n",[66,73314,73315],{"class":68,"line":138},[66,73316,73317],{"class":76},"      gender: '女'\n",[66,73319,73320],{"class":68,"line":227},[66,73321,4013],{"class":76},[66,73323,73324],{"class":68,"line":236},[66,73325,73326],{"class":76},"    \u002F\u002F 存储复杂数据类型\n",[66,73328,73329],{"class":68,"line":241},[66,73330,73331],{"class":76},"    localStorage.setItem('obj', obj)\n",[66,73333,73334,73336,73338],{"class":68,"line":372},[66,73335,54199],{"class":76},[66,73337,53597],{"class":53084},[66,73339,53091],{"class":76},[19,73341,73342],{},[3304,73343],{"alt":62,"src":73344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,73346,73347],{},"如果获取一下数据:",[19,73349,73350],{},"log(localStorage.getItem('obj'))",[19,73352,73353],{},[3304,73354],{"alt":62,"src":73355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,73357,73358],{},"发现直接存对象是使用不了的!!!",[23801,73360,73362],{"id":73361},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,73364,73365],{},[3304,73366],{"alt":62,"src":73367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[57,73369,73371],{"className":52417,"code":73370,"language":52419,"meta":62,"style":62},"\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",[23,73372,73373,73381,73391,73401,73410,73418,73422,73426,73452,73471,73479,73483,73488,73493],{"__ignoreMap":62},[66,73374,73375,73377,73379],{"class":68,"line":69},[66,73376,413],{"class":76},[66,73378,53597],{"class":53084},[66,73380,53091],{"class":76},[66,73382,73383,73385,73387,73389],{"class":68,"line":80},[66,73384,13027],{"class":72},[66,73386,71750],{"class":102},[66,73388,15369],{"class":72},[66,73390,17375],{"class":76},[66,73392,73393,73396,73399],{"class":68,"line":112},[66,73394,73395],{"class":76},"      uname: ",[66,73397,73398],{"class":356},"'pink老师'",[66,73400,33259],{"class":76},[66,73402,73403,73406,73408],{"class":68,"line":129},[66,73404,73405],{"class":76},"      age: ",[66,73407,2629],{"class":102},[66,73409,33259],{"class":76},[66,73411,73412,73415],{"class":68,"line":138},[66,73413,73414],{"class":76},"      gender: ",[66,73416,73417],{"class":356},"'女'\n",[66,73419,73420],{"class":68,"line":227},[66,73421,4013],{"class":76},[66,73423,73424],{"class":68,"line":236},[66,73425,73326],{"class":758},[66,73427,73428,73431,73434,73436,73439,73441,73444,73446,73449],{"class":68,"line":241},[66,73429,73430],{"class":76},"  localStorage.",[66,73432,73433],{"class":3793},"setItem",[66,73435,348],{"class":76},[66,73437,73438],{"class":356},"'obj'",[66,73440,307],{"class":76},[66,73442,73443],{"class":102},"JSON",[66,73445,2537],{"class":76},[66,73447,73448],{"class":3793},"stringify",[66,73450,73451],{"class":76},"(obj))\n",[66,73453,73454,73457,73459,73462,73465,73467,73469],{"class":68,"line":372},[66,73455,73456],{"class":76},"  console.",[66,73458,60027],{"class":3793},[66,73460,73461],{"class":76},"(localStorage.",[66,73463,73464],{"class":3793},"getItem",[66,73466,348],{"class":76},[66,73468,73438],{"class":356},[66,73470,360],{"class":76},[66,73472,73473,73475,73477],{"class":68,"line":377},[66,73474,54199],{"class":76},[66,73476,53597],{"class":53084},[66,73478,53091],{"class":76},[66,73480,73481],{"class":68,"line":392},[66,73482,72400],{"class":76},[66,73484,73485],{"class":68,"line":405},[66,73486,73487],{"class":76},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[66,73489,73490],{"class":68,"line":418},[66,73491,73492],{"class":76},"  类型是字符串的\n",[66,73494,73495],{"class":68,"line":430},[66,73496,73497],{"class":76},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[23801,73499,73501],{"id":73500},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,73503,73504],{},[3304,73505],{"alt":62,"src":73506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,73508,73509],{},[3304,73510],{"alt":62,"src":73511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[57,73513,73515],{"className":54849,"code":73514,"language":54851,"meta":62,"style":62},"  \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",[23,73516,73517,73525,73529,73533,73537,73541,73545,73550,73555,73560,73565,73570,73575,73580,73585],{"__ignoreMap":62},[66,73518,73519,73521,73523],{"class":68,"line":69},[66,73520,53928],{"class":76},[66,73522,53597],{"class":53084},[66,73524,53091],{"class":76},[66,73526,73527],{"class":68,"line":80},[66,73528,73302],{"class":76},[66,73530,73531],{"class":68,"line":112},[66,73532,73307],{"class":76},[66,73534,73535],{"class":68,"line":129},[66,73536,73312],{"class":76},[66,73538,73539],{"class":68,"line":138},[66,73540,73317],{"class":76},[66,73542,73543],{"class":68,"line":227},[66,73544,4013],{"class":76},[66,73546,73547],{"class":68,"line":236},[66,73548,73549],{"class":76},"    \u002F\u002F 1.存储复杂数据类型\n",[66,73551,73552],{"class":68,"line":241},[66,73553,73554],{"class":76},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[66,73556,73557],{"class":68,"line":372},[66,73558,73559],{"class":76},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[66,73561,73562],{"class":68,"line":377},[66,73563,73564],{"class":76},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[66,73566,73567],{"class":68,"line":392},[66,73568,73569],{"class":76},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[66,73571,73572],{"class":68,"line":405},[66,73573,73574],{"class":76},"    \u002F\u002F 取\n",[66,73576,73577],{"class":68,"line":418},[66,73578,73579],{"class":76},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[66,73581,73582],{"class":68,"line":430},[66,73583,73584],{"class":76},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[66,73586,73587,73589,73591],{"class":68,"line":438},[66,73588,54199],{"class":76},[66,73590,53597],{"class":53084},[66,73592,53091],{"class":76},[19,73594,73595],{},[3304,73596],{"alt":62,"src":73597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[484,73599,73601],{"id":73600},"_356-数组map方法","3.5.6 数组map方法",[19,73603,73604],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,73606,73607],{},[3304,73608],{"alt":62,"src":73609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,73611,73612],{},[3304,73613],{"alt":62,"src":73614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,73616,73617,73620],{},[2141,73618,73619],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,73622,73623],{},"map有返回值，但是forEach没有返回值",[19,73625,73626],{},"map是个方法。用的时候要加 ()",[19,73628,73629],{},"map返回的是一个数组",[484,73631,73633],{"id":73632},"_357-数组中join方法","3.5.7 数组中join方法",[19,73635,73636],{},[3304,73637],{"alt":62,"src":73638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,73640,73641],{},"类似于python中拼接字符串一样！",[31,73643,73644,73647,73650],{},[34,73645,73646],{},"小括号为空则逗号分开",[34,73648,73649],{},"小括号为空字符串 ''，则元素之间没有分隔符",[34,73651,73652],{},"小括号用啥符号就用进行分割",[484,73654,73656],{"id":73655},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[31,73658,73659,73662,73665,73668,73671],{},[34,73660,73661],{},"记住本地时间获取快速方式：new Date().toDateString()",[34,73663,73664],{},"尽量减少DOM操作，用好map+join的渲染方式",[34,73666,73667],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[34,73669,73670],{},"return可以实现函数的结束",[34,73672,73673],{},"禁止跳转是 preventDefault() 不要忘记",[57,73675,73677],{"className":52417,"code":73676,"language":52419,"meta":62,"style":62},"\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",[23,73678,73679,73689,73703,73707,73715,73729,73749,73761,73769,73775,73785,73795,73799,73803,73809,73819,73831,73835,73839,73846,73858,73872,73882,73886,73890,73897,73904,73911,73923,73935,73945,73957,73961,73965,73972,73979,73991,74003,74013,74025,74055,74059,74063,74070,74082,74094,74118,74128,74138,74142,74146,74154,74165,74177,74189,74201,74218,74230,74242,74246,74250,74257,74269,74281,74293,74304,74322,74335,74347,74371,74382,74386,74390,74398,74408,74412,74416,74422,74434,74445,74455,74459,74463,74469,74491,74495,74499,74505,74511,74523,74533,74545,74575,74588,74605,74609,74613,74624,74646,74656,74660,74664,74677,74687,74699,74711,74723,74735,74745,74755,74765,74776,74789,74793,74801,74809,74813,74821,74834,74854,74887,74920,74953,74979,74997,75015,75023,75049,75067,75085,75103,75121,75139,75147,75155,75173,75181,75210,75218,75226,75234,75247,75259,75271,75283,75295,75307,75320,75332,75340,75348,75356,75361,75366,75370,75374,75378,75382,75386,75390,75395,75400,75405,75410,75418,75426,75434,75439,75444,75449,75454,75459,75464,75469,75474,75479,75484,75489,75494,75499,75504,75508,75513,75518,75528,75537,75541,75546,75555,75571,75613,75653,75692,75757,75765,75769,75774,75792,75800,75805,75810,75840,75846,75851,75864,75876,75888,75900,75912,75924,75936,75940,75950,75954,75959,75964,75968,75977,75981,75986,75991,76010,76015,76035,76039,76044,76048,76053,76071,76089,76107,76126,76145,76164,76169,76175,76196,76202,76211,76217,76223,76229,76256,76269,76274,76284,76290,76296,76302,76308,76313,76319,76325,76331,76337,76370,76375,76380,76385,76390,76396,76402,76408,76419,76424,76430,76437,76451,76457,76481,76486,76491,76497,76503,76524,76530,76543,76549,76555,76561,76567,76572,76578,76584,76590,76608,76622,76628,76636,76642,76664,76669,76674,76679,76684,76689,76698,76707,76712],{"__ignoreMap":62},[66,73680,73681,73683,73685,73687],{"class":68,"line":69},[66,73682,53081],{"class":76},[66,73684,53085],{"class":53084},[66,73686,53088],{"class":3793},[66,73688,53091],{"class":76},[66,73690,73691,73693,73695,73697,73699,73701],{"class":68,"line":80},[66,73692,413],{"class":76},[66,73694,52419],{"class":53084},[66,73696,53100],{"class":3793},[66,73698,99],{"class":76},[66,73700,53105],{"class":356},[66,73702,53091],{"class":76},[66,73704,73705],{"class":68,"line":112},[66,73706,109],{"emptyLinePlaceholder":108},[66,73708,73709,73711,73713],{"class":68,"line":129},[66,73710,413],{"class":76},[66,73712,53118],{"class":53084},[66,73714,53091],{"class":76},[66,73716,73717,73719,73721,73723,73725,73727],{"class":68,"line":138},[66,73718,53928],{"class":76},[66,73720,53128],{"class":53084},[66,73722,53131],{"class":3793},[66,73724,99],{"class":76},[66,73726,53136],{"class":356},[66,73728,53091],{"class":76},[66,73730,73731,73733,73735,73737,73739,73741,73743,73745,73747],{"class":68,"line":227},[66,73732,53928],{"class":76},[66,73734,53128],{"class":53084},[66,73736,16724],{"class":3793},[66,73738,99],{"class":76},[66,73740,53175],{"class":356},[66,73742,53155],{"class":3793},[66,73744,99],{"class":76},[66,73746,53182],{"class":356},[66,73748,53091],{"class":76},[66,73750,73751,73753,73755,73757,73759],{"class":68,"line":236},[66,73752,53928],{"class":76},[66,73754,53191],{"class":53084},[66,73756,53194],{"class":76},[66,73758,53191],{"class":53084},[66,73760,53091],{"class":76},[66,73762,73763,73765,73767],{"class":68,"line":241},[66,73764,53928],{"class":76},[66,73766,1903],{"class":53084},[66,73768,53091],{"class":76},[66,73770,73771,73773],{"class":68,"line":372},[66,73772,8214],{"class":53084},[66,73774,17375],{"class":76},[66,73776,73777,73779,73781,73783],{"class":68,"line":377},[66,73778,56476],{"class":102},[66,73780,53221],{"class":76},[66,73782,2183],{"class":102},[66,73784,3135],{"class":76},[66,73786,73787,73789,73791,73793],{"class":68,"line":392},[66,73788,56487],{"class":102},[66,73790,53221],{"class":76},[66,73792,2183],{"class":102},[66,73794,3135],{"class":76},[66,73796,73797],{"class":68,"line":405},[66,73798,4013],{"class":76},[66,73800,73801],{"class":68,"line":418},[66,73802,109],{"emptyLinePlaceholder":108},[66,73804,73805,73807],{"class":68,"line":430},[66,73806,59059],{"class":53084},[66,73808,17375],{"class":76},[66,73810,73811,73813,73815,73817],{"class":68,"line":438},[66,73812,59066],{"class":102},[66,73814,53221],{"class":76},[66,73816,53376],{"class":102},[66,73818,3135],{"class":76},[66,73820,73821,73823,73825,73827,73829],{"class":68,"line":465},[66,73822,63856],{"class":102},[66,73824,53221],{"class":76},[66,73826,2679],{"class":102},[66,73828,53276],{"class":72},[66,73830,3135],{"class":76},[66,73832,73833],{"class":68,"line":1805},[66,73834,4013],{"class":76},[66,73836,73837],{"class":68,"line":1817},[66,73838,109],{"emptyLinePlaceholder":108},[66,73840,73841,73844],{"class":68,"line":1822},[66,73842,73843],{"class":3793},"    .info",[66,73845,17375],{"class":76},[66,73847,73848,73850,73852,73854,73856],{"class":68,"line":1829},[66,73849,56552],{"class":102},[66,73851,53221],{"class":76},[66,73853,53273],{"class":102},[66,73855,53276],{"class":72},[66,73857,3135],{"class":76},[66,73859,73860,73862,73864,73866,73868,73870],{"class":68,"line":3529},[66,73861,56487],{"class":102},[66,73863,53221],{"class":76},[66,73865,790],{"class":102},[66,73867,53276],{"class":72},[66,73869,53340],{"class":102},[66,73871,3135],{"class":76},[66,73873,73874,73876,73878,73880],{"class":68,"line":3557},[66,73875,59066],{"class":102},[66,73877,53221],{"class":76},[66,73879,53376],{"class":102},[66,73881,3135],{"class":76},[66,73883,73884],{"class":68,"line":3562},[66,73885,4013],{"class":76},[66,73887,73888],{"class":68,"line":3579},[66,73889,109],{"emptyLinePlaceholder":108},[66,73891,73892,73895],{"class":68,"line":3584},[66,73893,73894],{"class":3793},"    .uname",[66,73896,33259],{"class":76},[66,73898,73899,73902],{"class":68,"line":3589},[66,73900,73901],{"class":3793},"    .age",[66,73903,33259],{"class":76},[66,73905,73906,73909],{"class":68,"line":3594},[66,73907,73908],{"class":3793},"    .salary",[66,73910,17375],{"class":76},[66,73912,73913,73915,73917,73919,73921],{"class":68,"line":3608},[66,73914,56552],{"class":102},[66,73916,53221],{"class":76},[66,73918,310],{"class":102},[66,73920,53276],{"class":72},[66,73922,3135],{"class":76},[66,73924,73925,73927,73929,73931,73933],{"class":68,"line":3613},[66,73926,56566],{"class":102},[66,73928,53221],{"class":76},[66,73930,2679],{"class":102},[66,73932,53276],{"class":72},[66,73934,3135],{"class":76},[66,73936,73937,73939,73941,73943],{"class":68,"line":4401},[66,73938,63559],{"class":102},[66,73940,53221],{"class":76},[66,73942,56518],{"class":102},[66,73944,3135],{"class":76},[66,73946,73947,73949,73951,73953,73955],{"class":68,"line":4415},[66,73948,63529],{"class":102},[66,73950,53221],{"class":76},[66,73952,2554],{"class":102},[66,73954,53276],{"class":72},[66,73956,3135],{"class":76},[66,73958,73959],{"class":68,"line":4423},[66,73960,4013],{"class":76},[66,73962,73963],{"class":68,"line":4428},[66,73964,109],{"emptyLinePlaceholder":108},[66,73966,73967,73970],{"class":68,"line":4434},[66,73968,73969],{"class":3793},"    .gender",[66,73971,33259],{"class":76},[66,73973,73974,73977],{"class":68,"line":4440},[66,73975,73976],{"class":3793},"    .city",[66,73978,17375],{"class":76},[66,73980,73981,73983,73985,73987,73989],{"class":68,"line":4445},[66,73982,56552],{"class":102},[66,73984,53221],{"class":76},[66,73986,310],{"class":102},[66,73988,53276],{"class":72},[66,73990,3135],{"class":76},[66,73992,73993,73995,73997,73999,74001],{"class":68,"line":9759},[66,73994,56566],{"class":102},[66,73996,53221],{"class":76},[66,73998,2804],{"class":102},[66,74000,53276],{"class":72},[66,74002,3135],{"class":76},[66,74004,74005,74007,74009,74011],{"class":68,"line":9783},[66,74006,63559],{"class":102},[66,74008,53221],{"class":76},[66,74010,56518],{"class":102},[66,74012,3135],{"class":76},[66,74014,74015,74017,74019,74021,74023],{"class":68,"line":9788},[66,74016,63529],{"class":102},[66,74018,53221],{"class":76},[66,74020,2554],{"class":102},[66,74022,53276],{"class":72},[66,74024,3135],{"class":76},[66,74026,74027,74029,74031,74033,74035,74037,74040,74042,74044,74046,74049,74051,74053],{"class":68,"line":9794},[66,74028,63756],{"class":102},[66,74030,53221],{"class":76},[66,74032,304],{"class":102},[66,74034,53276],{"class":72},[66,74036,53305],{"class":102},[66,74038,74039],{"class":102}," rgb",[66,74041,348],{"class":76},[66,74043,3552],{"class":102},[66,74045,307],{"class":76},[66,74047,74048],{"class":102},"197",[66,74050,307],{"class":76},[66,74052,74048],{"class":102},[66,74054,4543],{"class":76},[66,74056,74057],{"class":68,"line":9821},[66,74058,4013],{"class":76},[66,74060,74061],{"class":68,"line":9826},[66,74062,109],{"emptyLinePlaceholder":108},[66,74064,74065,74068],{"class":68,"line":9832},[66,74066,74067],{"class":53084},"    button",[66,74069,17375],{"class":76},[66,74071,74072,74074,74076,74078,74080],{"class":68,"line":9844},[66,74073,56566],{"class":102},[66,74075,53221],{"class":76},[66,74077,2804],{"class":102},[66,74079,53276],{"class":72},[66,74081,3135],{"class":76},[66,74083,74084,74086,74088,74090,74092],{"class":68,"line":9856},[66,74085,56552],{"class":102},[66,74087,53221],{"class":76},[66,74089,2463],{"class":102},[66,74091,53276],{"class":72},[66,74093,3135],{"class":76},[66,74095,74096,74098,74100,74103,74105,74107,74109,74112,74114,74116],{"class":68,"line":9868},[66,74097,56665],{"class":102},[66,74099,53221],{"class":76},[66,74101,74102],{"class":102},"rgb",[66,74104,348],{"class":76},[66,74106,2944],{"class":102},[66,74108,307],{"class":76},[66,74110,74111],{"class":102},"187",[66,74113,307],{"class":76},[66,74115,2288],{"class":102},[66,74117,4543],{"class":76},[66,74119,74120,74122,74124,74126],{"class":68,"line":11523},[66,74121,59196],{"class":102},[66,74123,53221],{"class":76},[66,74125,62621],{"class":102},[66,74127,3135],{"class":76},[66,74129,74130,74132,74134,74136],{"class":68,"line":11548},[66,74131,63756],{"class":102},[66,74133,53221],{"class":76},[66,74135,2183],{"class":102},[66,74137,3135],{"class":76},[66,74139,74140],{"class":68,"line":11571},[66,74141,4013],{"class":76},[66,74143,74144],{"class":68,"line":11595},[66,74145,109],{"emptyLinePlaceholder":108},[66,74147,74148,74150,74152],{"class":68,"line":11600},[66,74149,74067],{"class":53084},[66,74151,53472],{"class":53084},[66,74153,17375],{"class":76},[66,74155,74156,74158,74160,74163],{"class":68,"line":11605},[66,74157,56790],{"class":102},[66,74159,53221],{"class":76},[66,74161,74162],{"class":102},"inline-block",[66,74164,3135],{"class":76},[66,74166,74167,74169,74171,74173,74175],{"class":68,"line":11610},[66,74168,56552],{"class":102},[66,74170,53221],{"class":76},[66,74172,790],{"class":102},[66,74174,53276],{"class":72},[66,74176,3135],{"class":76},[66,74178,74179,74181,74183,74185,74187],{"class":68,"line":11619},[66,74180,56566],{"class":102},[66,74182,53221],{"class":76},[66,74184,790],{"class":102},[66,74186,53276],{"class":72},[66,74188,3135],{"class":76},[66,74190,74191,74193,74195,74197,74199],{"class":68,"line":11624},[66,74192,59139],{"class":102},[66,74194,53221],{"class":76},[66,74196,2452],{"class":102},[66,74198,53276],{"class":72},[66,74200,3135],{"class":76},[66,74202,74203,74205,74207,74209,74211,74213,74216],{"class":68,"line":11630},[66,74204,63756],{"class":102},[66,74206,53221],{"class":76},[66,74208,304],{"class":102},[66,74210,53276],{"class":72},[66,74212,53305],{"class":102},[66,74214,74215],{"class":102}," #fff",[66,74217,3135],{"class":76},[66,74219,74220,74222,74224,74226,74228],{"class":68,"line":11651},[66,74221,56915],{"class":102},[66,74223,53221],{"class":76},[66,74225,752],{"class":102},[66,74227,53276],{"class":72},[66,74229,3135],{"class":76},[66,74231,74232,74234,74236,74238,74240],{"class":68,"line":11657},[66,74233,63529],{"class":102},[66,74235,53221],{"class":76},[66,74237,304],{"class":102},[66,74239,53276],{"class":72},[66,74241,3135],{"class":76},[66,74243,74244],{"class":68,"line":11671},[66,74245,4013],{"class":76},[66,74247,74248],{"class":68,"line":11677},[66,74249,109],{"emptyLinePlaceholder":108},[66,74251,74252,74255],{"class":68,"line":11704},[66,74253,74254],{"class":3793},"    .total",[66,74256,17375],{"class":76},[66,74258,74259,74261,74263,74265,74267],{"class":68,"line":11713},[66,74260,56552],{"class":102},[66,74262,53221],{"class":76},[66,74264,63408],{"class":102},[66,74266,53276],{"class":72},[66,74268,3135],{"class":76},[66,74270,74271,74273,74275,74277,74279],{"class":68,"line":11719},[66,74272,56566],{"class":102},[66,74274,53221],{"class":76},[66,74276,2385],{"class":102},[66,74278,53276],{"class":72},[66,74280,3135],{"class":76},[66,74282,74283,74285,74287,74289,74291],{"class":68,"line":11727},[66,74284,59139],{"class":102},[66,74286,53221],{"class":76},[66,74288,2385],{"class":102},[66,74290,53276],{"class":72},[66,74292,3135],{"class":76},[66,74294,74295,74297,74299,74302],{"class":68,"line":11732},[66,74296,59066],{"class":102},[66,74298,53221],{"class":76},[66,74300,74301],{"class":102},"right",[66,74303,3135],{"class":76},[66,74305,74306,74308,74310,74312,74314,74316,74318,74320],{"class":68,"line":18407},[66,74307,56487],{"class":102},[66,74309,53221],{"class":76},[66,74311,2385],{"class":102},[66,74313,53276],{"class":72},[66,74315,53340],{"class":102},[66,74317,1335],{"class":102},[66,74319,53276],{"class":72},[66,74321,3135],{"class":76},[66,74323,74324,74327,74329,74331,74333],{"class":68,"line":18413},[66,74325,74326],{"class":102},"      padding-right",[66,74328,53221],{"class":76},[66,74330,790],{"class":102},[66,74332,53276],{"class":72},[66,74334,3135],{"class":76},[66,74336,74337,74339,74341,74343,74345],{"class":68,"line":18436},[66,74338,56703],{"class":102},[66,74340,53221],{"class":76},[66,74342,2502],{"class":102},[66,74344,53276],{"class":72},[66,74346,3135],{"class":76},[66,74348,74349,74351,74353,74355,74357,74360,74362,74365,74367,74369],{"class":68,"line":18442},[66,74350,56665],{"class":102},[66,74352,53221],{"class":76},[66,74354,74102],{"class":102},[66,74356,348],{"class":76},[66,74358,74359],{"class":102},"237",[66,74361,307],{"class":76},[66,74363,74364],{"class":102},"235",[66,74366,307],{"class":76},[66,74368,74364],{"class":102},[66,74370,4543],{"class":76},[66,74372,74373,74376,74378,74380],{"class":68,"line":18465},[66,74374,74375],{"class":102},"      box-sizing",[66,74377,53221],{"class":76},[66,74379,62285],{"class":102},[66,74381,3135],{"class":76},[66,74383,74384],{"class":68,"line":18479},[66,74385,4013],{"class":76},[66,74387,74388],{"class":68,"line":18499},[66,74389,109],{"emptyLinePlaceholder":108},[66,74391,74392,74394,74396],{"class":68,"line":18505},[66,74393,74254],{"class":3793},[66,74395,53472],{"class":53084},[66,74397,17375],{"class":76},[66,74399,74400,74402,74404,74406],{"class":68,"line":18516},[66,74401,59196],{"class":102},[66,74403,53221],{"class":76},[66,74405,59201],{"class":102},[66,74407,3135],{"class":76},[66,74409,74410],{"class":68,"line":18539},[66,74411,4013],{"class":76},[66,74413,74414],{"class":68,"line":18561},[66,74415,109],{"emptyLinePlaceholder":108},[66,74417,74418,74420],{"class":68,"line":18566},[66,74419,66802],{"class":53084},[66,74421,17375],{"class":76},[66,74423,74424,74426,74428,74430,74432],{"class":68,"line":18572},[66,74425,56552],{"class":102},[66,74427,53221],{"class":76},[66,74429,63408],{"class":102},[66,74431,53276],{"class":72},[66,74433,3135],{"class":76},[66,74435,74436,74438,74440,74443],{"class":68,"line":18586},[66,74437,56487],{"class":102},[66,74439,53221],{"class":76},[66,74441,74442],{"class":102},"auto",[66,74444,3135],{"class":76},[66,74446,74447,74449,74451,74453],{"class":68,"line":18599},[66,74448,66809],{"class":102},[66,74450,53221],{"class":76},[66,74452,66814],{"class":102},[66,74454,3135],{"class":76},[66,74456,74457],{"class":68,"line":18604},[66,74458,4013],{"class":76},[66,74460,74461],{"class":68,"line":18618},[66,74462,109],{"emptyLinePlaceholder":108},[66,74464,74465,74467],{"class":68,"line":18623},[66,74466,66894],{"class":53084},[66,74468,17375],{"class":76},[66,74470,74471,74473,74475,74477,74479,74481,74483,74485,74487,74489],{"class":68,"line":18629},[66,74472,56665],{"class":102},[66,74474,53221],{"class":76},[66,74476,74102],{"class":102},[66,74478,348],{"class":76},[66,74480,74359],{"class":102},[66,74482,307],{"class":76},[66,74484,74364],{"class":102},[66,74486,307],{"class":76},[66,74488,74364],{"class":102},[66,74490,4543],{"class":76},[66,74492,74493],{"class":68,"line":18634},[66,74494,4013],{"class":76},[66,74496,74497],{"class":68,"line":18648},[66,74498,109],{"emptyLinePlaceholder":108},[66,74500,74501,74503],{"class":68,"line":18653},[66,74502,66894],{"class":53084},[66,74504,33259],{"class":76},[66,74506,74507,74509],{"class":68,"line":18658},[66,74508,66960],{"class":53084},[66,74510,17375],{"class":76},[66,74512,74513,74515,74517,74519,74521],{"class":68,"line":18672},[66,74514,56566],{"class":102},[66,74516,53221],{"class":76},[66,74518,2263],{"class":102},[66,74520,53276],{"class":72},[66,74522,3135],{"class":76},[66,74524,74525,74527,74529,74531],{"class":68,"line":18684},[66,74526,59066],{"class":102},[66,74528,53221],{"class":76},[66,74530,25539],{"class":102},[66,74532,3135],{"class":76},[66,74534,74535,74537,74539,74541,74543],{"class":68,"line":18689},[66,74536,56703],{"class":102},[66,74538,53221],{"class":76},[66,74540,2528],{"class":102},[66,74542,53276],{"class":72},[66,74544,3135],{"class":76},[66,74546,74547,74549,74551,74553,74555,74557,74559,74561,74564,74566,74569,74571,74573],{"class":68,"line":18702},[66,74548,63756],{"class":102},[66,74550,53221],{"class":76},[66,74552,304],{"class":102},[66,74554,53276],{"class":72},[66,74556,53305],{"class":102},[66,74558,74039],{"class":102},[66,74560,348],{"class":76},[66,74562,74563],{"class":102},"228",[66,74565,307],{"class":76},[66,74567,74568],{"class":102},"225",[66,74570,307],{"class":76},[66,74572,74568],{"class":102},[66,74574,4543],{"class":76},[66,74576,74577,74580,74582,74584,74586],{"class":68,"line":18707},[66,74578,74579],{"class":102},"      padding-left",[66,74581,53221],{"class":76},[66,74583,752],{"class":102},[66,74585,53276],{"class":72},[66,74587,3135],{"class":76},[66,74589,74590,74592,74594,74596,74599,74601,74603],{"class":68,"line":18712},[66,74591,63639],{"class":102},[66,74593,53221],{"class":76},[66,74595,29922],{"class":102},[66,74597,74598],{"class":102}," linear",[66,74600,63646],{"class":102},[66,74602,2674],{"class":72},[66,74604,3135],{"class":76},[66,74606,74607],{"class":68,"line":18717},[66,74608,4013],{"class":76},[66,74610,74611],{"class":68,"line":18730},[66,74612,109],{"emptyLinePlaceholder":108},[66,74614,74615,74618,74620,74622],{"class":68,"line":18735},[66,74616,74617],{"class":53084},"    tbody",[66,74619,71923],{"class":53084},[66,74621,62719],{"class":3793},[66,74623,17375],{"class":76},[66,74625,74626,74628,74630,74632,74634,74636,74638,74640,74642,74644],{"class":68,"line":34423},[66,74627,56665],{"class":102},[66,74629,53221],{"class":76},[66,74631,74102],{"class":102},[66,74633,348],{"class":76},[66,74635,74359],{"class":102},[66,74637,307],{"class":76},[66,74639,74364],{"class":102},[66,74641,307],{"class":76},[66,74643,74364],{"class":102},[66,74645,4543],{"class":76},[66,74647,74648,74650,74652,74654],{"class":68,"line":34429},[66,74649,63804],{"class":102},[66,74651,53221],{"class":76},[66,74653,63809],{"class":102},[66,74655,3135],{"class":76},[66,74657,74658],{"class":68,"line":34435},[66,74659,4013],{"class":76},[66,74661,74662],{"class":68,"line":34441},[66,74663,109],{"emptyLinePlaceholder":108},[66,74665,74666,74668,74670,74673,74675],{"class":68,"line":34447},[66,74667,74617],{"class":53084},[66,74669,71923],{"class":53084},[66,74671,74672],{"class":53084}," td",[66,74674,3240],{"class":53084},[66,74676,17375],{"class":76},[66,74678,74679,74681,74683,74685],{"class":68,"line":34458},[66,74680,56790],{"class":102},[66,74682,53221],{"class":76},[66,74684,62648],{"class":102},[66,74686,3135],{"class":76},[66,74688,74689,74691,74693,74695,74697],{"class":68,"line":34464},[66,74690,56552],{"class":102},[66,74692,53221],{"class":76},[66,74694,2885],{"class":102},[66,74696,53276],{"class":72},[66,74698,3135],{"class":76},[66,74700,74701,74703,74705,74707,74709],{"class":68,"line":34484},[66,74702,56566],{"class":102},[66,74704,53221],{"class":76},[66,74706,2804],{"class":102},[66,74708,53276],{"class":72},[66,74710,3135],{"class":76},[66,74712,74713,74715,74717,74719,74721],{"class":68,"line":34490},[66,74714,59139],{"class":102},[66,74716,53221],{"class":76},[66,74718,2804],{"class":102},[66,74720,53276],{"class":72},[66,74722,3135],{"class":76},[66,74724,74725,74727,74729,74731,74733],{"class":68,"line":34501},[66,74726,63856],{"class":102},[66,74728,53221],{"class":76},[66,74730,795],{"class":102},[66,74732,53276],{"class":72},[66,74734,3135],{"class":76},[66,74736,74737,74739,74741,74743],{"class":68,"line":34507},[66,74738,59196],{"class":102},[66,74740,53221],{"class":76},[66,74742,62621],{"class":102},[66,74744,3135],{"class":76},[66,74746,74747,74749,74751,74753],{"class":68,"line":34513},[66,74748,59066],{"class":102},[66,74750,53221],{"class":76},[66,74752,53376],{"class":102},[66,74754,3135],{"class":76},[66,74756,74757,74759,74761,74763],{"class":68,"line":34519},[66,74758,65749],{"class":102},[66,74760,53221],{"class":76},[66,74762,56518],{"class":102},[66,74764,3135],{"class":76},[66,74766,74767,74769,74771,74774],{"class":68,"line":34525},[66,74768,56665],{"class":102},[66,74770,53221],{"class":76},[66,74772,74773],{"class":102},"orange",[66,74775,3135],{"class":76},[66,74777,74778,74780,74782,74785,74787],{"class":68,"line":34531},[66,74779,56915],{"class":102},[66,74781,53221],{"class":76},[66,74783,74784],{"class":102},"12.5",[66,74786,53276],{"class":72},[66,74788,3135],{"class":76},[66,74790,74791],{"class":68,"line":34537},[66,74792,4013],{"class":76},[66,74794,74795,74797,74799],{"class":68,"line":34543},[66,74796,54199],{"class":76},[66,74798,1903],{"class":53084},[66,74800,53091],{"class":76},[66,74802,74803,74805,74807],{"class":68,"line":34563},[66,74804,53569],{"class":76},[66,74806,53118],{"class":53084},[66,74808,53091],{"class":76},[66,74810,74811],{"class":68,"line":34569},[66,74812,109],{"emptyLinePlaceholder":108},[66,74814,74815,74817,74819],{"class":68,"line":34585},[66,74816,413],{"class":76},[66,74818,53584],{"class":53084},[66,74820,53091],{"class":76},[66,74822,74823,74825,74827,74830,74832],{"class":68,"line":34591},[66,74824,53928],{"class":76},[66,74826,14],{"class":53084},[66,74828,74829],{"class":76},">学生就业统计表\u003C\u002F",[66,74831,14],{"class":53084},[66,74833,53091],{"class":76},[66,74835,74836,74838,74840,74842,74844,74846,74848,74850,74852],{"class":68,"line":34605},[66,74837,53928],{"class":76},[66,74839,68404],{"class":53084},[66,74841,55268],{"class":3793},[66,74843,99],{"class":76},[66,74845,64443],{"class":356},[66,74847,70849],{"class":3793},[66,74849,99],{"class":76},[66,74851,33568],{"class":356},[66,74853,53091],{"class":76},[66,74855,74856,74858,74860,74862,74864,74866,74868,74870,74872,74874,74876,74879,74881,74883,74885],{"class":68,"line":34611},[66,74857,53125],{"class":76},[66,74859,351],{"class":53084},[66,74861,55605],{"class":3793},[66,74863,99],{"class":76},[66,74865,64478],{"class":356},[66,74867,16724],{"class":3793},[66,74869,99],{"class":76},[66,74871,70875],{"class":356},[66,74873,62799],{"class":3793},[66,74875,99],{"class":76},[66,74877,74878],{"class":356},"\"姓名\"",[66,74880,55268],{"class":3793},[66,74882,99],{"class":76},[66,74884,70875],{"class":356},[66,74886,53091],{"class":76},[66,74888,74889,74891,74893,74895,74897,74899,74901,74903,74905,74907,74909,74912,74914,74916,74918],{"class":68,"line":34626},[66,74890,53125],{"class":76},[66,74892,351],{"class":53084},[66,74894,55605],{"class":3793},[66,74896,99],{"class":76},[66,74898,64478],{"class":356},[66,74900,16724],{"class":3793},[66,74902,99],{"class":76},[66,74904,70903],{"class":356},[66,74906,62799],{"class":3793},[66,74908,99],{"class":76},[66,74910,74911],{"class":356},"\"年龄\"",[66,74913,55268],{"class":3793},[66,74915,99],{"class":76},[66,74917,70903],{"class":356},[66,74919,53091],{"class":76},[66,74921,74922,74924,74926,74928,74930,74932,74934,74936,74938,74940,74942,74945,74947,74949,74951],{"class":68,"line":34632},[66,74923,53125],{"class":76},[66,74925,351],{"class":53084},[66,74927,55605],{"class":3793},[66,74929,99],{"class":76},[66,74931,64478],{"class":356},[66,74933,16724],{"class":3793},[66,74935,99],{"class":76},[66,74937,71005],{"class":356},[66,74939,62799],{"class":3793},[66,74941,99],{"class":76},[66,74943,74944],{"class":356},"\"薪资\"",[66,74946,55268],{"class":3793},[66,74948,99],{"class":76},[66,74950,71005],{"class":356},[66,74952,53091],{"class":76},[66,74954,74955,74957,74959,74961,74963,74965,74967,74969,74971,74973,74975,74977],{"class":68,"line":34641},[66,74956,53125],{"class":76},[66,74958,70923],{"class":53084},[66,74960,16724],{"class":3793},[66,74962,99],{"class":76},[66,74964,70930],{"class":356},[66,74966,16763],{"class":3793},[66,74968,99],{"class":76},[66,74970,9463],{"class":356},[66,74972,55268],{"class":3793},[66,74974,99],{"class":76},[66,74976,70930],{"class":356},[66,74978,53091],{"class":76},[66,74980,74981,74983,74985,74987,74989,74991,74993,74995],{"class":68,"line":34647},[66,74982,57015],{"class":76},[66,74984,70945],{"class":53084},[66,74986,68430],{"class":3793},[66,74988,99],{"class":76},[66,74990,11768],{"class":356},[66,74992,70954],{"class":76},[66,74994,70945],{"class":53084},[66,74996,53091],{"class":76},[66,74998,74999,75001,75003,75005,75007,75009,75011,75013],{"class":68,"line":34656},[66,75000,57015],{"class":76},[66,75002,70945],{"class":53084},[66,75004,68430],{"class":3793},[66,75006,99],{"class":76},[66,75008,11837],{"class":356},[66,75010,70973],{"class":76},[66,75012,70945],{"class":53084},[66,75014,53091],{"class":76},[66,75016,75017,75019,75021],{"class":68,"line":34662},[66,75018,53560],{"class":76},[66,75020,70923],{"class":53084},[66,75022,53091],{"class":76},[66,75024,75025,75027,75029,75031,75033,75035,75037,75039,75041,75043,75045,75047],{"class":68,"line":34668},[66,75026,53125],{"class":76},[66,75028,70923],{"class":53084},[66,75030,16724],{"class":3793},[66,75032,99],{"class":76},[66,75034,71027],{"class":356},[66,75036,16763],{"class":3793},[66,75038,99],{"class":76},[66,75040,9463],{"class":356},[66,75042,55268],{"class":3793},[66,75044,99],{"class":76},[66,75046,71027],{"class":356},[66,75048,53091],{"class":76},[66,75050,75051,75053,75055,75057,75059,75061,75063,75065],{"class":68,"line":34677},[66,75052,57015],{"class":76},[66,75054,70945],{"class":53084},[66,75056,68430],{"class":3793},[66,75058,99],{"class":76},[66,75060,71048],{"class":356},[66,75062,71051],{"class":76},[66,75064,70945],{"class":53084},[66,75066,53091],{"class":76},[66,75068,75069,75071,75073,75075,75077,75079,75081,75083],{"class":68,"line":34683},[66,75070,57015],{"class":76},[66,75072,70945],{"class":53084},[66,75074,68430],{"class":3793},[66,75076,99],{"class":76},[66,75078,71068],{"class":356},[66,75080,71071],{"class":76},[66,75082,70945],{"class":53084},[66,75084,53091],{"class":76},[66,75086,75087,75089,75091,75093,75095,75097,75099,75101],{"class":68,"line":34694},[66,75088,57015],{"class":76},[66,75090,70945],{"class":53084},[66,75092,68430],{"class":3793},[66,75094,99],{"class":76},[66,75096,71088],{"class":356},[66,75098,71091],{"class":76},[66,75100,70945],{"class":53084},[66,75102,53091],{"class":76},[66,75104,75105,75107,75109,75111,75113,75115,75117,75119],{"class":68,"line":34700},[66,75106,57015],{"class":76},[66,75108,70945],{"class":53084},[66,75110,68430],{"class":3793},[66,75112,99],{"class":76},[66,75114,71108],{"class":356},[66,75116,71111],{"class":76},[66,75118,70945],{"class":53084},[66,75120,53091],{"class":76},[66,75122,75123,75125,75127,75129,75131,75133,75135,75137],{"class":68,"line":34719},[66,75124,57015],{"class":76},[66,75126,70945],{"class":53084},[66,75128,68430],{"class":3793},[66,75130,99],{"class":76},[66,75132,71128],{"class":356},[66,75134,71131],{"class":76},[66,75136,70945],{"class":53084},[66,75138,53091],{"class":76},[66,75140,75141,75143,75145],{"class":68,"line":34725},[66,75142,53560],{"class":76},[66,75144,70923],{"class":53084},[66,75146,53091],{"class":76},[66,75148,75149,75151,75153],{"class":68,"line":34736},[66,75150,53125],{"class":76},[66,75152,55668],{"class":53084},[66,75154,53091],{"class":76},[66,75156,75157,75159,75161,75164,75166,75169,75171],{"class":68,"line":34742},[66,75158,57015],{"class":76},[66,75160,66],{"class":53084},[66,75162,75163],{"class":76},">+\u003C\u002F",[66,75165,66],{"class":53084},[66,75167,75168],{"class":76},">添加\u003C\u002F",[66,75170,55668],{"class":53084},[66,75172,53091],{"class":76},[66,75174,75175,75177,75179],{"class":68,"line":34762},[66,75176,54199],{"class":76},[66,75178,68404],{"class":53084},[66,75180,53091],{"class":76},[66,75182,75183,75185,75187,75189,75191,75193,75196,75198,75201,75203,75206,75208],{"class":68,"line":34778},[66,75184,53928],{"class":76},[66,75186,53395],{"class":53084},[66,75188,55268],{"class":3793},[66,75190,99],{"class":76},[66,75192,64359],{"class":356},[66,75194,75195],{"class":76},">共有数据 \u003C",[66,75197,66],{"class":53084},[66,75199,75200],{"class":76},">0\u003C\u002F",[66,75202,66],{"class":53084},[66,75204,75205],{"class":76},"> 条\u003C\u002F",[66,75207,53395],{"class":53084},[66,75209,53091],{"class":76},[66,75211,75212,75214,75216],{"class":68,"line":34784},[66,75213,53928],{"class":76},[66,75215,2129],{"class":53084},[66,75217,53091],{"class":76},[66,75219,75220,75222,75224],{"class":68,"line":34798},[66,75221,53125],{"class":76},[66,75223,2132],{"class":53084},[66,75225,53091],{"class":76},[66,75227,75228,75230,75232],{"class":68,"line":34804},[66,75229,57015],{"class":76},[66,75231,2135],{"class":53084},[66,75233,53091],{"class":76},[66,75235,75236,75238,75240,75243,75245],{"class":68,"line":34810},[66,75237,57083],{"class":76},[66,75239,2138],{"class":53084},[66,75241,75242],{"class":76},">ID\u003C\u002F",[66,75244,2138],{"class":53084},[66,75246,53091],{"class":76},[66,75248,75249,75251,75253,75255,75257],{"class":68,"line":34821},[66,75250,57083],{"class":76},[66,75252,2138],{"class":53084},[66,75254,71234],{"class":76},[66,75256,2138],{"class":53084},[66,75258,53091],{"class":76},[66,75260,75261,75263,75265,75267,75269],{"class":68,"line":34827},[66,75262,57083],{"class":76},[66,75264,2138],{"class":53084},[66,75266,71247],{"class":76},[66,75268,2138],{"class":53084},[66,75270,53091],{"class":76},[66,75272,75273,75275,75277,75279,75281],{"class":68,"line":34833},[66,75274,57083],{"class":76},[66,75276,2138],{"class":53084},[66,75278,71260],{"class":76},[66,75280,2138],{"class":53084},[66,75282,53091],{"class":76},[66,75284,75285,75287,75289,75291,75293],{"class":68,"line":34843},[66,75286,57083],{"class":76},[66,75288,2138],{"class":53084},[66,75290,71273],{"class":76},[66,75292,2138],{"class":53084},[66,75294,53091],{"class":76},[66,75296,75297,75299,75301,75303,75305],{"class":68,"line":34849},[66,75298,57083],{"class":76},[66,75300,2138],{"class":53084},[66,75302,71286],{"class":76},[66,75304,2138],{"class":53084},[66,75306,53091],{"class":76},[66,75308,75309,75311,75313,75316,75318],{"class":68,"line":34860},[66,75310,57083],{"class":76},[66,75312,2138],{"class":53084},[66,75314,75315],{"class":76},">录入时间\u003C\u002F",[66,75317,2138],{"class":53084},[66,75319,53091],{"class":76},[66,75321,75322,75324,75326,75328,75330],{"class":68,"line":34866},[66,75323,57083],{"class":76},[66,75325,2138],{"class":53084},[66,75327,71299],{"class":76},[66,75329,2138],{"class":53084},[66,75331,53091],{"class":76},[66,75333,75334,75336,75338],{"class":68,"line":34876},[66,75335,57188],{"class":76},[66,75337,2135],{"class":53084},[66,75339,53091],{"class":76},[66,75341,75342,75344,75346],{"class":68,"line":34881},[66,75343,53560],{"class":76},[66,75345,2132],{"class":53084},[66,75347,53091],{"class":76},[66,75349,75350,75352,75354],{"class":68,"line":34887},[66,75351,53125],{"class":76},[66,75353,2176],{"class":53084},[66,75355,53091],{"class":76},[66,75357,75358],{"class":68,"line":34936},[66,75359,75360],{"class":758},"      \u003C!-- \u003Ctr>\n",[66,75362,75363],{"class":68,"line":34983},[66,75364,75365],{"class":758},"        \u003Ctd>1\u003C\u002Ftd>\n",[66,75367,75368],{"class":68,"line":34988},[66,75369,75365],{"class":758},[66,75371,75372],{"class":68,"line":34994},[66,75373,75365],{"class":758},[66,75375,75376],{"class":68,"line":35013},[66,75377,75365],{"class":758},[66,75379,75380],{"class":68,"line":35019},[66,75381,75365],{"class":758},[66,75383,75384],{"class":68,"line":35038},[66,75385,75365],{"class":758},[66,75387,75388],{"class":68,"line":35044},[66,75389,75365],{"class":758},[66,75391,75392],{"class":68,"line":35050},[66,75393,75394],{"class":758},"        \u003Ctd>\n",[66,75396,75397],{"class":68,"line":35060},[66,75398,75399],{"class":758},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[66,75401,75402],{"class":68,"line":35065},[66,75403,75404],{"class":758},"        \u003C\u002Ftd>\n",[66,75406,75407],{"class":68,"line":35071},[66,75408,75409],{"class":758},"      \u003C\u002Ftr> -->\n",[66,75411,75412,75414,75416],{"class":68,"line":35087},[66,75413,53560],{"class":76},[66,75415,2176],{"class":53084},[66,75417,53091],{"class":76},[66,75419,75420,75422,75424],{"class":68,"line":35132},[66,75421,54199],{"class":76},[66,75423,2129],{"class":53084},[66,75425,53091],{"class":76},[66,75427,75428,75430,75432],{"class":68,"line":35138},[66,75429,53928],{"class":76},[66,75431,53597],{"class":53084},[66,75433,53091],{"class":76},[66,75435,75436],{"class":68,"line":35144},[66,75437,75438],{"class":758},"    \u002F\u002F const initData = [{\n",[66,75440,75441],{"class":68,"line":35150},[66,75442,75443],{"class":758},"    \u002F\u002F   unameId: 1,\n",[66,75445,75446],{"class":68,"line":35161},[66,75447,75448],{"class":758},"    \u002F\u002F   uname: '华晨宇',\n",[66,75450,75451],{"class":68,"line":35167},[66,75452,75453],{"class":758},"    \u002F\u002F   age: 22,\n",[66,75455,75456],{"class":68,"line":35173},[66,75457,75458],{"class":758},"    \u002F\u002F   salary: 12000,\n",[66,75460,75461],{"class":68,"line":35179},[66,75462,75463],{"class":758},"    \u002F\u002F   gender: '男',\n",[66,75465,75466],{"class":68,"line":35197},[66,75467,75468],{"class":758},"    \u002F\u002F   city: '北京',\n",[66,75470,75471],{"class":68,"line":35210},[66,75472,75473],{"class":758},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[66,75475,75476],{"class":68,"line":35219},[66,75477,75478],{"class":758},"    \u002F\u002F }]\n",[66,75480,75481],{"class":68,"line":35228},[66,75482,75483],{"class":758},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[66,75485,75486],{"class":68,"line":35237},[66,75487,75488],{"class":758},"    \u002F\u002F 1.渲染业务\n",[66,75490,75491],{"class":68,"line":35246},[66,75492,75493],{"class":758},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[66,75495,75496],{"class":68,"line":35252},[66,75497,75498],{"class":758},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[66,75500,75501],{"class":68,"line":35258},[66,75502,75503],{"class":758},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[66,75505,75506],{"class":68,"line":35266},[66,75507,109],{"emptyLinePlaceholder":108},[66,75509,75510],{"class":68,"line":35271},[66,75511,75512],{"class":758},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[66,75514,75515],{"class":68,"line":35277},[66,75516,75517],{"class":758},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[66,75519,75520,75522,75524,75526],{"class":68,"line":35288},[66,75521,13027],{"class":72},[66,75523,59475],{"class":102},[66,75525,15369],{"class":72},[66,75527,53622],{"class":76},[66,75529,75530,75533,75535],{"class":68,"line":35294},[66,75531,75532],{"class":76},"    console.",[66,75534,60027],{"class":3793},[66,75536,54194],{"class":76},[66,75538,75539],{"class":68,"line":35314},[66,75540,109],{"emptyLinePlaceholder":108},[66,75542,75543],{"class":68,"line":35320},[66,75544,75545],{"class":758},"    \u002F\u002F 时间函数\n",[66,75547,75548,75550,75553],{"class":68,"line":35326},[66,75549,71863],{"class":72},[66,75551,75552],{"class":3793}," getTime",[66,75554,12659],{"class":76},[66,75556,75557,75559,75562,75564,75566,75569],{"class":68,"line":35332},[66,75558,60008],{"class":72},[66,75560,75561],{"class":102}," date",[66,75563,15369],{"class":72},[66,75565,13384],{"class":72},[66,75567,75568],{"class":3793}," Date",[66,75570,1253],{"class":76},[66,75572,75573,75575,75577,75579,75582,75585,75587,75589,75591,75594,75597,75599,75601,75603,75605,75607,75609,75611],{"class":68,"line":35349},[66,75574,60008],{"class":72},[66,75576,17894],{"class":102},[66,75578,15369],{"class":72},[66,75580,75581],{"class":76}," date.",[66,75583,75584],{"class":3793},"getHours",[66,75586,14855],{"class":76},[66,75588,413],{"class":72},[66,75590,1335],{"class":102},[66,75592,75593],{"class":72}," ?",[66,75595,75596],{"class":356}," '0'",[66,75598,47352],{"class":72},[66,75600,75581],{"class":76},[66,75602,75584],{"class":3793},[66,75604,14855],{"class":76},[66,75606,2838],{"class":72},[66,75608,75581],{"class":76},[66,75610,75584],{"class":3793},[66,75612,1253],{"class":76},[66,75614,75615,75617,75620,75622,75624,75627,75629,75631,75633,75635,75637,75639,75641,75643,75645,75647,75649,75651],{"class":68,"line":35355},[66,75616,60008],{"class":72},[66,75618,75619],{"class":102}," m",[66,75621,15369],{"class":72},[66,75623,75581],{"class":76},[66,75625,75626],{"class":3793},"getMinutes",[66,75628,14855],{"class":76},[66,75630,413],{"class":72},[66,75632,1335],{"class":102},[66,75634,75593],{"class":72},[66,75636,75596],{"class":356},[66,75638,47352],{"class":72},[66,75640,75581],{"class":76},[66,75642,75626],{"class":3793},[66,75644,14855],{"class":76},[66,75646,2838],{"class":72},[66,75648,75581],{"class":76},[66,75650,75626],{"class":3793},[66,75652,1253],{"class":76},[66,75654,75655,75657,75659,75661,75663,75666,75668,75670,75672,75674,75676,75678,75680,75682,75684,75686,75688,75690],{"class":68,"line":35361},[66,75656,60008],{"class":72},[66,75658,10239],{"class":102},[66,75660,15369],{"class":72},[66,75662,75581],{"class":76},[66,75664,75665],{"class":3793},"getSeconds",[66,75667,14855],{"class":76},[66,75669,413],{"class":72},[66,75671,1335],{"class":102},[66,75673,75593],{"class":72},[66,75675,75596],{"class":356},[66,75677,47352],{"class":72},[66,75679,75581],{"class":76},[66,75681,75665],{"class":3793},[66,75683,14855],{"class":76},[66,75685,2838],{"class":72},[66,75687,75581],{"class":76},[66,75689,75665],{"class":3793},[66,75691,1253],{"class":76},[66,75693,75694,75696,75699,75701,75703,75706,75708,75711,75713,75716,75718,75720,75723,75725,75727,75729,75731,75733,75735,75738,75740,75743,75745,75748,75750,75752,75754],{"class":68,"line":35367},[66,75695,60008],{"class":72},[66,75697,75698],{"class":102}," str",[66,75700,15369],{"class":72},[66,75702,64682],{"class":356},[66,75704,75705],{"class":76},"date",[66,75707,2537],{"class":356},[66,75709,75710],{"class":3793},"getFullYear",[66,75712,4251],{"class":356},[66,75714,75715],{"class":356},"}\u002F${",[66,75717,75705],{"class":76},[66,75719,2537],{"class":356},[66,75721,75722],{"class":3793},"getMonth",[66,75724,14855],{"class":356},[66,75726,1184],{"class":72},[66,75728,1187],{"class":102},[66,75730,75715],{"class":356},[66,75732,75705],{"class":76},[66,75734,2537],{"class":356},[66,75736,75737],{"class":3793},"getDate",[66,75739,4251],{"class":356},[66,75741,75742],{"class":356},"} ${",[66,75744,2399],{"class":76},[66,75746,75747],{"class":356},"}:${",[66,75749,2523],{"class":76},[66,75751,75747],{"class":356},[66,75753,2674],{"class":76},[66,75755,75756],{"class":356},"}`\n",[66,75758,75759,75762],{"class":68,"line":35373},[66,75760,75761],{"class":72},"      return",[66,75763,75764],{"class":76}," str\n",[66,75766,75767],{"class":68,"line":35379},[66,75768,4013],{"class":76},[66,75770,75771],{"class":68,"line":35406},[66,75772,75773],{"class":758},"    \u002F\u002F 渲染函数\n",[66,75775,75776,75778,75780,75782,75784,75786,75788,75790],{"class":68,"line":35430},[66,75777,13027],{"class":72},[66,75779,71526],{"class":102},[66,75781,15369],{"class":72},[66,75783,56177],{"class":76},[66,75785,56180],{"class":3793},[66,75787,348],{"class":76},[66,75789,71537],{"class":356},[66,75791,313],{"class":76},[66,75793,75794,75796,75798],{"class":68,"line":35436},[66,75795,71863],{"class":72},[66,75797,71866],{"class":3793},[66,75799,12659],{"class":76},[66,75801,75802],{"class":68,"line":35442},[66,75803,75804],{"class":758},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[66,75806,75807],{"class":68,"line":35448},[66,75808,75809],{"class":758},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[66,75811,75812,75814,75817,75819,75821,75824,75826,75828,75830,75833,75835,75838],{"class":68,"line":35459},[66,75813,60008],{"class":72},[66,75815,75816],{"class":102}," trArr",[66,75818,15369],{"class":72},[66,75820,53749],{"class":76},[66,75822,75823],{"class":3793},"map",[66,75825,348],{"class":76},[66,75827,56230],{"class":72},[66,75829,3492],{"class":76},[66,75831,75832],{"class":1234},"ele",[66,75834,307],{"class":76},[66,75836,75837],{"class":1234},"index",[66,75839,14247],{"class":76},[66,75841,75842,75844],{"class":68,"line":35470},[66,75843,16557],{"class":72},[66,75845,71947],{"class":356},[66,75847,75848],{"class":68,"line":35476},[66,75849,75850],{"class":356},"      \u003Ctr>\n",[66,75852,75853,75855,75857,75859,75862],{"class":68,"line":35493},[66,75854,71952],{"class":356},[66,75856,75832],{"class":76},[66,75858,2537],{"class":356},[66,75860,75861],{"class":76},"unameId",[66,75863,71967],{"class":356},[66,75865,75866,75868,75870,75872,75874],{"class":68,"line":35516},[66,75867,71952],{"class":356},[66,75869,75832],{"class":76},[66,75871,2537],{"class":356},[66,75873,71983],{"class":76},[66,75875,71967],{"class":356},[66,75877,75878,75880,75882,75884,75886],{"class":68,"line":35539},[66,75879,71952],{"class":356},[66,75881,75832],{"class":76},[66,75883,2537],{"class":356},[66,75885,72000],{"class":76},[66,75887,71967],{"class":356},[66,75889,75890,75892,75894,75896,75898],{"class":68,"line":35545},[66,75891,71952],{"class":356},[66,75893,75832],{"class":76},[66,75895,2537],{"class":356},[66,75897,72017],{"class":76},[66,75899,71967],{"class":356},[66,75901,75902,75904,75906,75908,75910],{"class":68,"line":35550},[66,75903,71952],{"class":356},[66,75905,75832],{"class":76},[66,75907,2537],{"class":356},[66,75909,72034],{"class":76},[66,75911,71967],{"class":356},[66,75913,75914,75916,75918,75920,75922],{"class":68,"line":35559},[66,75915,71952],{"class":356},[66,75917,75832],{"class":76},[66,75919,2537],{"class":356},[66,75921,72051],{"class":76},[66,75923,71967],{"class":356},[66,75925,75926,75928,75930,75932,75934],{"class":68,"line":35569},[66,75927,71952],{"class":356},[66,75929,75832],{"class":76},[66,75931,2537],{"class":356},[66,75933,4212],{"class":76},[66,75935,71967],{"class":356},[66,75937,75938],{"class":68,"line":35575},[66,75939,75394],{"class":356},[66,75941,75942,75945,75947],{"class":68,"line":35580},[66,75943,75944],{"class":356},"          \u003Ca href=\"#\" data-id=\"${",[66,75946,75837],{"class":76},[66,75948,75949],{"class":356},"}\">删除\u003C\u002Fa>\n",[66,75951,75952],{"class":68,"line":35586},[66,75953,75404],{"class":356},[66,75955,75956],{"class":68,"line":35599},[66,75957,75958],{"class":356},"      \u003C\u002Ftr>\n",[66,75960,75961],{"class":68,"line":35605},[66,75962,75963],{"class":356},"  `\n",[66,75965,75966],{"class":68,"line":35616},[66,75967,66594],{"class":76},[66,75969,75970,75972,75974],{"class":68,"line":35627},[66,75971,60024],{"class":76},[66,75973,60027],{"class":3793},[66,75975,75976],{"class":76},"(trArr)\n",[66,75978,75979],{"class":68,"line":35646},[66,75980,109],{"emptyLinePlaceholder":108},[66,75982,75983],{"class":68,"line":51302},[66,75984,75985],{"class":758},"      \u002F\u002F (2) 把数组转换为字符串join\n",[66,75987,75988],{"class":68,"line":51307},[66,75989,75990],{"class":758},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[66,75992,75993,75995,75997,76000,76003,76005,76008],{"class":68,"line":51316},[66,75994,71878],{"class":76},[66,75996,99],{"class":72},[66,75998,75999],{"class":76}," trArr.",[66,76001,76002],{"class":3793},"join",[66,76004,348],{"class":76},[66,76006,76007],{"class":356},"''",[66,76009,313],{"class":76},[66,76011,76012],{"class":68,"line":51325},[66,76013,76014],{"class":758},"      \u002F\u002F 显示共有几条\n",[66,76016,76017,76019,76021,76023,76026,76029,76031,76033],{"class":68,"line":51330},[66,76018,57551],{"class":76},[66,76020,56180],{"class":3793},[66,76022,348],{"class":76},[66,76024,76025],{"class":356},"'.total span'",[66,76027,76028],{"class":76},").innerHTML ",[66,76030,99],{"class":72},[66,76032,53749],{"class":76},[66,76034,57611],{"class":102},[66,76036,76037],{"class":68,"line":51335},[66,76038,4013],{"class":76},[66,76040,76041],{"class":68,"line":51340},[66,76042,76043],{"class":758},"    \u002F\u002F render()\n",[66,76045,76046],{"class":68,"line":51353},[66,76047,109],{"emptyLinePlaceholder":108},[66,76049,76050],{"class":68,"line":51358},[66,76051,76052],{"class":758},"    \u002F\u002F 获取DOM对象\n",[66,76054,76055,76057,76059,76061,76063,76065,76067,76069],{"class":68,"line":51367},[66,76056,13027],{"class":72},[66,76058,71600],{"class":102},[66,76060,15369],{"class":72},[66,76062,56177],{"class":76},[66,76064,56180],{"class":3793},[66,76066,348],{"class":76},[66,76068,71611],{"class":356},[66,76070,313],{"class":76},[66,76072,76073,76075,76077,76079,76081,76083,76085,76087],{"class":68,"line":51376},[66,76074,13027],{"class":72},[66,76076,71427],{"class":102},[66,76078,15369],{"class":72},[66,76080,56177],{"class":76},[66,76082,56180],{"class":3793},[66,76084,348],{"class":76},[66,76086,71438],{"class":356},[66,76088,313],{"class":76},[66,76090,76091,76093,76095,76097,76099,76101,76103,76105],{"class":68,"line":51393},[66,76092,13027],{"class":72},[66,76094,17492],{"class":102},[66,76096,15369],{"class":72},[66,76098,56177],{"class":76},[66,76100,56180],{"class":3793},[66,76102,348],{"class":76},[66,76104,71457],{"class":356},[66,76106,313],{"class":76},[66,76108,76110,76112,76114,76116,76118,76120,76122,76124],{"class":68,"line":76109},231,[66,76111,13027],{"class":72},[66,76113,71486],{"class":102},[66,76115,15369],{"class":72},[66,76117,56177],{"class":76},[66,76119,56180],{"class":3793},[66,76121,348],{"class":76},[66,76123,71497],{"class":356},[66,76125,313],{"class":76},[66,76127,76129,76131,76133,76135,76137,76139,76141,76143],{"class":68,"line":76128},232,[66,76130,13027],{"class":72},[66,76132,71466],{"class":102},[66,76134,15369],{"class":72},[66,76136,56177],{"class":76},[66,76138,56180],{"class":3793},[66,76140,348],{"class":76},[66,76142,71477],{"class":356},[66,76144,313],{"class":76},[66,76146,76148,76150,76152,76154,76156,76158,76160,76162],{"class":68,"line":76147},233,[66,76149,13027],{"class":72},[66,76151,71506],{"class":102},[66,76153,15369],{"class":72},[66,76155,56177],{"class":76},[66,76157,56180],{"class":3793},[66,76159,348],{"class":76},[66,76161,71517],{"class":356},[66,76163,313],{"class":76},[66,76165,76167],{"class":68,"line":76166},234,[66,76168,109],{"emptyLinePlaceholder":108},[66,76170,76172],{"class":68,"line":76171},235,[66,76173,76174],{"class":758},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[66,76176,76178,76180,76182,76184,76186,76188,76190,76192,76194],{"class":68,"line":76177},236,[66,76179,71618],{"class":76},[66,76181,59593],{"class":3793},[66,76183,348],{"class":76},[66,76185,71625],{"class":356},[66,76187,307],{"class":76},[66,76189,56230],{"class":72},[66,76191,3492],{"class":76},[66,76193,2068],{"class":1234},[66,76195,14247],{"class":76},[66,76197,76199],{"class":68,"line":76198},237,[66,76200,76201],{"class":758},"      \u002F\u002F 禁止浏览器跳转\n",[66,76203,76205,76207,76209],{"class":68,"line":76204},238,[66,76206,71645],{"class":76},[66,76208,71648],{"class":3793},[66,76210,1253],{"class":76},[66,76212,76214],{"class":68,"line":76213},239,[66,76215,76216],{"class":758},"      \u002F\u002F 非空判断\n",[66,76218,76220],{"class":68,"line":76219},240,[66,76221,76222],{"class":758},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[66,76224,76226],{"class":68,"line":76225},241,[66,76227,76228],{"class":758},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[66,76230,76232,76234,76236,76238,76241,76243,76246,76249,76251,76253],{"class":68,"line":76231},242,[66,76233,56261],{"class":72},[66,76235,3492],{"class":76},[66,76237,2217],{"class":72},[66,76239,76240],{"class":76},"uname.value ",[66,76242,73136],{"class":72},[66,76244,76245],{"class":72}," !",[66,76247,76248],{"class":76},"age.value ",[66,76250,73136],{"class":72},[66,76252,76245],{"class":72},[66,76254,76255],{"class":76},"salary.value) {\n",[66,76257,76259,76261,76263,76265,76267],{"class":68,"line":76258},243,[66,76260,16557],{"class":72},[66,76262,71719],{"class":3793},[66,76264,348],{"class":76},[66,76266,71724],{"class":356},[66,76268,313],{"class":76},[66,76270,76272],{"class":68,"line":76271},244,[66,76273,54180],{"class":76},[66,76275,76277,76279,76281],{"class":68,"line":76276},245,[66,76278,59787],{"class":76},[66,76280,53668],{"class":3793},[66,76282,76283],{"class":76},"({\n",[66,76285,76287],{"class":68,"line":76286},246,[66,76288,76289],{"class":758},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[66,76291,76293],{"class":68,"line":76292},247,[66,76294,76295],{"class":758},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[66,76297,76299],{"class":68,"line":76298},248,[66,76300,76301],{"class":758},"        \u002F\u002F 对象的序号应为数组长度+1\n",[66,76303,76305],{"class":68,"line":76304},249,[66,76306,76307],{"class":758},"        \u002F\u002F unameId: arr.length + 1,\n",[66,76309,76311],{"class":68,"line":76310},250,[66,76312,109],{"emptyLinePlaceholder":108},[66,76314,76316],{"class":68,"line":76315},251,[66,76317,76318],{"class":758},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[66,76320,76322],{"class":68,"line":76321},252,[66,76323,76324],{"class":758},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[66,76326,76328],{"class":68,"line":76327},253,[66,76329,76330],{"class":758},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[66,76332,76334],{"class":68,"line":76333},254,[66,76335,76336],{"class":758},"        \u002F\u002F 0当假看\n",[66,76338,76340,76343,76345,76347,76350,76352,76354,76356,76359,76361,76363,76366,76368],{"class":68,"line":76339},255,[66,76341,76342],{"class":76},"        unameId: arr.",[66,76344,53752],{"class":102},[66,76346,75593],{"class":72},[66,76348,76349],{"class":76}," arr[arr.",[66,76351,53752],{"class":102},[66,76353,1593],{"class":72},[66,76355,1187],{"class":102},[66,76357,76358],{"class":76},"].unameId ",[66,76360,1184],{"class":72},[66,76362,1187],{"class":102},[66,76364,76365],{"class":72}," :",[66,76367,1187],{"class":102},[66,76369,33259],{"class":76},[66,76371,76373],{"class":68,"line":76372},256,[66,76374,71772],{"class":76},[66,76376,76378],{"class":68,"line":76377},257,[66,76379,71777],{"class":76},[66,76381,76383],{"class":68,"line":76382},258,[66,76384,71787],{"class":76},[66,76386,76388],{"class":68,"line":76387},259,[66,76389,71782],{"class":76},[66,76391,76393],{"class":68,"line":76392},260,[66,76394,76395],{"class":76},"        city: city.value,\n",[66,76397,76399],{"class":68,"line":76398},261,[66,76400,76401],{"class":758},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[66,76403,76405],{"class":68,"line":76404},262,[66,76406,76407],{"class":758},"        \u002F\u002F time: new Date().toDateString()\n",[66,76409,76411,76414,76417],{"class":68,"line":76410},263,[66,76412,76413],{"class":76},"        time: ",[66,76415,76416],{"class":3793},"getTime",[66,76418,1253],{"class":76},[66,76420,76422],{"class":68,"line":76421},264,[66,76423,66594],{"class":76},[66,76425,76427],{"class":68,"line":76426},265,[66,76428,76429],{"class":758},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[66,76431,76433,76435],{"class":68,"line":76432},266,[66,76434,71847],{"class":3793},[66,76436,1253],{"class":76},[66,76438,76440,76442,76444,76446,76448],{"class":68,"line":76439},267,[66,76441,71830],{"class":102},[66,76443,2537],{"class":76},[66,76445,71835],{"class":3793},[66,76447,14855],{"class":76},[66,76449,76450],{"class":758},"\u002F\u002F重置表单\n",[66,76452,76454],{"class":68,"line":76453},268,[66,76455,76456],{"class":758},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[66,76458,76460,76463,76465,76467,76470,76472,76474,76476,76478],{"class":68,"line":76459},269,[66,76461,76462],{"class":76},"      localStorage.",[66,76464,73433],{"class":3793},[66,76466,348],{"class":76},[66,76468,76469],{"class":356},"'data'",[66,76471,307],{"class":76},[66,76473,73443],{"class":102},[66,76475,2537],{"class":76},[66,76477,73448],{"class":3793},[66,76479,76480],{"class":76},"(arr))\n",[66,76482,76484],{"class":68,"line":76483},270,[66,76485,35249],{"class":76},[66,76487,76489],{"class":68,"line":76488},271,[66,76490,109],{"emptyLinePlaceholder":108},[66,76492,76494],{"class":68,"line":76493},272,[66,76495,76496],{"class":758},"    \u002F\u002F 3.删除业务\n",[66,76498,76500],{"class":68,"line":76499},273,[66,76501,76502],{"class":758},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[66,76504,76506,76508,76510,76512,76514,76516,76518,76520,76522],{"class":68,"line":76505},274,[66,76507,72120],{"class":76},[66,76509,59593],{"class":3793},[66,76511,348],{"class":76},[66,76513,59598],{"class":356},[66,76515,307],{"class":76},[66,76517,56230],{"class":72},[66,76519,3492],{"class":76},[66,76521,2068],{"class":1234},[66,76523,14247],{"class":76},[66,76525,76527],{"class":68,"line":76526},275,[66,76528,76529],{"class":758},"      \u002F\u002F 判断是否点击的是删除按钮\n",[66,76531,76533,76535,76537,76539,76541],{"class":68,"line":76532},276,[66,76534,56261],{"class":72},[66,76536,68813],{"class":76},[66,76538,56267],{"class":72},[66,76540,70035],{"class":356},[66,76542,14247],{"class":76},[66,76544,76546],{"class":68,"line":76545},277,[66,76547,76548],{"class":758},"        \u002F\u002F alert(1)\n",[66,76550,76552],{"class":68,"line":76551},278,[66,76553,76554],{"class":758},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[66,76556,76558],{"class":68,"line":76557},279,[66,76559,76560],{"class":758},"        \u002F\u002F console.log(e.target)\n",[66,76562,76564],{"class":68,"line":76563},280,[66,76565,76566],{"class":758},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[66,76568,76570],{"class":68,"line":76569},281,[66,76571,109],{"emptyLinePlaceholder":108},[66,76573,76575],{"class":68,"line":76574},282,[66,76576,76577],{"class":758},"        \u002F\u002F 确认框，确然是否真的要删除\n",[66,76579,76581],{"class":68,"line":76580},283,[66,76582,76583],{"class":758},"        \u002F\u002F confirm()为确认框\n",[66,76585,76587],{"class":68,"line":76586},284,[66,76588,76589],{"class":758},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[66,76591,76593,76595,76597,76600,76602,76605],{"class":68,"line":76592},285,[66,76594,4321],{"class":72},[66,76596,3492],{"class":76},[66,76598,76599],{"class":3793},"confirm",[66,76601,348],{"class":76},[66,76603,76604],{"class":356},"'您确定要删除这条数据吗？'",[66,76606,76607],{"class":76},")) {\n",[66,76609,76611,76614,76616,76618,76620],{"class":68,"line":76610},286,[66,76612,76613],{"class":76},"          arr.",[66,76615,59790],{"class":3793},[66,76617,72173],{"class":76},[66,76619,304],{"class":102},[66,76621,313],{"class":76},[66,76623,76625],{"class":68,"line":76624},287,[66,76626,76627],{"class":758},"          \u002F\u002F 3.4 重新渲染页面\n",[66,76629,76631,76634],{"class":68,"line":76630},288,[66,76632,76633],{"class":3793},"          render",[66,76635,1253],{"class":76},[66,76637,76639],{"class":68,"line":76638},289,[66,76640,76641],{"class":758},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[66,76643,76645,76648,76650,76652,76654,76656,76658,76660,76662],{"class":68,"line":76644},290,[66,76646,76647],{"class":76},"          localStorage.",[66,76649,73433],{"class":3793},[66,76651,348],{"class":76},[66,76653,76469],{"class":356},[66,76655,307],{"class":76},[66,76657,73443],{"class":102},[66,76659,2537],{"class":76},[66,76661,73448],{"class":3793},[66,76663,76480],{"class":76},[66,76665,76667],{"class":68,"line":76666},291,[66,76668,4353],{"class":76},[66,76670,76672],{"class":68,"line":76671},292,[66,76673,54180],{"class":76},[66,76675,76677],{"class":68,"line":76676},293,[66,76678,109],{"emptyLinePlaceholder":108},[66,76680,76682],{"class":68,"line":76681},294,[66,76683,35249],{"class":76},[66,76685,76687],{"class":68,"line":76686},295,[66,76688,109],{"emptyLinePlaceholder":108},[66,76690,76692,76694,76696],{"class":68,"line":76691},296,[66,76693,54199],{"class":76},[66,76695,53597],{"class":53084},[66,76697,53091],{"class":76},[66,76699,76701,76703,76705],{"class":68,"line":76700},297,[66,76702,53569],{"class":76},[66,76704,53584],{"class":53084},[66,76706,53091],{"class":76},[66,76708,76710],{"class":68,"line":76709},298,[66,76711,109],{"emptyLinePlaceholder":108},[66,76713,76715,76717,76719],{"class":68,"line":76714},299,[66,76716,53569],{"class":76},[66,76718,52419],{"class":53084},[66,76720,53091],{"class":76},[14,76722,76724],{"id":76723},"_36-正则表达式","3.6 正则表达式",[19,76726,76727],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,76729,76730],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,76732,76733],{},"正则表达式的作用：",[2982,76735,76736,76743,76749],{},[34,76737,76738,76739,76742],{},"表单验证（ ",[2141,76740,76741],{},"匹配"," ）",[34,76744,76745,76746,76742],{},"过滤敏感词（ ",[2141,76747,76748],{},"替换",[34,76750,76751,76752,76742],{},"字符串中提取我们想要的部分（ ",[2141,76753,76754],{},"提取",[484,76756,76758],{"id":76757},"_361-语法","3.6.1 语法",[19,76760,76761],{},"正则表达式使用步骤：",[31,76763,76764,76767],{},[34,76765,76766],{},"定义规则",[34,76768,76769],{},"查找是否匹配",[19,76771,76772],{},"正则表达式里边不需要写引号",[19,76774,76775],{},[3304,76776],{"alt":62,"src":76777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,76779,76780],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,76782,76783],{},"reg.test(str)",[19,76785,76786],{},[3304,76787],{"alt":62,"src":76788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,76790,76791],{},[3304,76792],{"alt":62,"src":76793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[484,76795,76797],{"id":76796},"_362-元字符","3.6.2 元字符",[31,76799,76800,76803,76806,76809,76816],{},[34,76801,76802],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[34,76804,76805],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[34,76807,76808],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[34,76810,76811,76812],{},"正则验证工具：",[2229,76813,76814],{"href":76814,"rel":76815},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[25668],[34,76817,76818],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[23801,76820,76822],{"id":76821},"_3621-边界符","3.6.2.1 边界符",[19,76824,76825],{},[3304,76826],{"alt":62,"src":76827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,76829,76830],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,76832,76833],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,76835,76836],{},"只匹配一次",[19,76838,76839],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[23801,76841,76843],{"id":76842},"_3622-量词","3.6.2.2 量词",[19,76845,76846],{},[3304,76847],{"alt":62,"src":76848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,76850,76851],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[23801,76853,76855],{"id":76854},"_3623-元字符","3.6.2.3 元字符",[19,76857,76858],{},[3304,76859],{"alt":62,"src":76860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,76862,76863],{},"匹配的是a或b或c []只选一个",[19,76865,76866],{},[3304,76867],{"alt":62,"src":76868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,76870,76871],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,76873,76874],{},[3304,76875],{"alt":62,"src":76876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,76878,76879],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,76881,76882],{},[3304,76883],{"alt":62,"src":76884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[57,76886,76888],{"className":52417,"code":76887,"language":52419,"meta":62,"style":62},"\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",[23,76889,76890,76900,76914,76918,76926,76940,76960,76972,76980,76984,76992,77000,77005,77036,77063,77091,77095,77100,77128,77159,77164,77169,77200,77232,77264,77268,77273,77304,77334,77364,77368,77373,77404,77435,77465,77495,77499,77504,77537,77541,77546,77577,77608,77612,77617,77648,77678,77709,77713,77718,77750,77781,77812,77839,77870,77902,77935,77966,77997,78029,78060,78068,78076,78080],{"__ignoreMap":62},[66,76891,76892,76894,76896,76898],{"class":68,"line":69},[66,76893,53081],{"class":76},[66,76895,53085],{"class":53084},[66,76897,53088],{"class":3793},[66,76899,53091],{"class":76},[66,76901,76902,76904,76906,76908,76910,76912],{"class":68,"line":80},[66,76903,413],{"class":76},[66,76905,52419],{"class":53084},[66,76907,53100],{"class":3793},[66,76909,99],{"class":76},[66,76911,53105],{"class":356},[66,76913,53091],{"class":76},[66,76915,76916],{"class":68,"line":112},[66,76917,109],{"emptyLinePlaceholder":108},[66,76919,76920,76922,76924],{"class":68,"line":129},[66,76921,413],{"class":76},[66,76923,53118],{"class":53084},[66,76925,53091],{"class":76},[66,76927,76928,76930,76932,76934,76936,76938],{"class":68,"line":138},[66,76929,53928],{"class":76},[66,76931,53128],{"class":53084},[66,76933,53131],{"class":3793},[66,76935,99],{"class":76},[66,76937,53136],{"class":356},[66,76939,53091],{"class":76},[66,76941,76942,76944,76946,76948,76950,76952,76954,76956,76958],{"class":68,"line":227},[66,76943,53928],{"class":76},[66,76945,53128],{"class":53084},[66,76947,16724],{"class":3793},[66,76949,99],{"class":76},[66,76951,53175],{"class":356},[66,76953,53155],{"class":3793},[66,76955,99],{"class":76},[66,76957,53182],{"class":356},[66,76959,53091],{"class":76},[66,76961,76962,76964,76966,76968,76970],{"class":68,"line":236},[66,76963,53928],{"class":76},[66,76965,53191],{"class":53084},[66,76967,53194],{"class":76},[66,76969,53191],{"class":53084},[66,76971,53091],{"class":76},[66,76973,76974,76976,76978],{"class":68,"line":241},[66,76975,53569],{"class":76},[66,76977,53118],{"class":53084},[66,76979,53091],{"class":76},[66,76981,76982],{"class":68,"line":372},[66,76983,109],{"emptyLinePlaceholder":108},[66,76985,76986,76988,76990],{"class":68,"line":377},[66,76987,413],{"class":76},[66,76989,53584],{"class":53084},[66,76991,53091],{"class":76},[66,76993,76994,76996,76998],{"class":68,"line":392},[66,76995,53928],{"class":76},[66,76997,53597],{"class":53084},[66,76999,53091],{"class":76},[66,77001,77002],{"class":68,"line":405},[66,77003,77004],{"class":758},"    \u002F\u002F 元字符中\n",[66,77006,77007,77009,77011,77013,77015,77018,77020,77022,77025,77027,77030,77033],{"class":68,"line":418},[66,77008,75532],{"class":76},[66,77010,60027],{"class":3793},[66,77012,348],{"class":76},[66,77014,2563],{"class":356},[66,77016,77017],{"class":49761},"哈",[66,77019,2563],{"class":356},[66,77021,2537],{"class":76},[66,77023,77024],{"class":3793},"test",[66,77026,348],{"class":76},[66,77028,77029],{"class":356},"'哈'",[66,77031,77032],{"class":76},"))  ",[66,77034,77035],{"class":758},"\u002F\u002Ftrue\n",[66,77037,77038,77040,77042,77044,77046,77048,77050,77052,77054,77056,77059,77061],{"class":68,"line":430},[66,77039,75532],{"class":76},[66,77041,60027],{"class":3793},[66,77043,348],{"class":76},[66,77045,2563],{"class":356},[66,77047,77017],{"class":49761},[66,77049,2563],{"class":356},[66,77051,2537],{"class":76},[66,77053,77024],{"class":3793},[66,77055,348],{"class":76},[66,77057,77058],{"class":356},"'哈哈'",[66,77060,77032],{"class":76},[66,77062,77035],{"class":758},[66,77064,77065,77067,77069,77071,77073,77075,77077,77079,77081,77083,77086,77089],{"class":68,"line":438},[66,77066,75532],{"class":76},[66,77068,60027],{"class":3793},[66,77070,348],{"class":76},[66,77072,2563],{"class":356},[66,77074,77017],{"class":49761},[66,77076,2563],{"class":356},[66,77078,2537],{"class":76},[66,77080,77024],{"class":3793},[66,77082,348],{"class":76},[66,77084,77085],{"class":356},"'二哈'",[66,77087,77088],{"class":76},"))   ",[66,77090,77035],{"class":758},[66,77092,77093],{"class":68,"line":465},[66,77094,109],{"emptyLinePlaceholder":108},[66,77096,77097],{"class":68,"line":1805},[66,77098,77099],{"class":758},"    \u002F\u002F 1.边界符\n",[66,77101,77102,77104,77106,77108,77110,77112,77114,77116,77118,77120,77122,77124,77126],{"class":68,"line":1817},[66,77103,75532],{"class":76},[66,77105,60027],{"class":3793},[66,77107,348],{"class":76},[66,77109,2563],{"class":356},[66,77111,2941],{"class":72},[66,77113,77017],{"class":49761},[66,77115,2563],{"class":356},[66,77117,2537],{"class":76},[66,77119,77024],{"class":3793},[66,77121,348],{"class":76},[66,77123,77029],{"class":356},[66,77125,77032],{"class":76},[66,77127,77035],{"class":758},[66,77129,77130,77132,77134,77136,77138,77140,77142,77144,77146,77148,77150,77152,77154,77156],{"class":68,"line":1822},[66,77131,75532],{"class":76},[66,77133,60027],{"class":3793},[66,77135,348],{"class":76},[66,77137,2563],{"class":356},[66,77139,2941],{"class":72},[66,77141,77017],{"class":49761},[66,77143,2291],{"class":72},[66,77145,2563],{"class":356},[66,77147,2537],{"class":76},[66,77149,77024],{"class":3793},[66,77151,348],{"class":76},[66,77153,77058],{"class":356},[66,77155,77032],{"class":76},[66,77157,77158],{"class":758},"\u002F\u002Ffalse\n",[66,77160,77161],{"class":68,"line":1829},[66,77162,77163],{"class":758},"    \u002F\u002F 2.量词\n",[66,77165,77166],{"class":68,"line":3529},[66,77167,77168],{"class":758},"    \u002F\u002F 量词 * 类似于 >= 0\n",[66,77170,77171,77173,77175,77177,77179,77181,77183,77186,77188,77190,77192,77194,77196,77198],{"class":68,"line":3557},[66,77172,75532],{"class":76},[66,77174,60027],{"class":3793},[66,77176,348],{"class":76},[66,77178,2563],{"class":356},[66,77180,2941],{"class":72},[66,77182,77017],{"class":49761},[66,77184,77185],{"class":72},"*$",[66,77187,2563],{"class":356},[66,77189,2537],{"class":76},[66,77191,77024],{"class":3793},[66,77193,348],{"class":76},[66,77195,77058],{"class":356},[66,77197,77032],{"class":76},[66,77199,77035],{"class":758},[66,77201,77202,77204,77206,77208,77210,77212,77214,77216,77218,77220,77222,77224,77227,77229],{"class":68,"line":3562},[66,77203,75532],{"class":76},[66,77205,60027],{"class":3793},[66,77207,348],{"class":76},[66,77209,2563],{"class":356},[66,77211,2941],{"class":72},[66,77213,77017],{"class":49761},[66,77215,77185],{"class":72},[66,77217,2563],{"class":356},[66,77219,2537],{"class":76},[66,77221,77024],{"class":3793},[66,77223,348],{"class":76},[66,77225,77226],{"class":356},"'二哈好傻'",[66,77228,77032],{"class":76},[66,77230,77231],{"class":758},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[66,77233,77234,77236,77238,77240,77242,77244,77246,77248,77250,77252,77254,77256,77259,77261],{"class":68,"line":3579},[66,77235,75532],{"class":76},[66,77237,60027],{"class":3793},[66,77239,348],{"class":76},[66,77241,2563],{"class":356},[66,77243,2941],{"class":72},[66,77245,77017],{"class":49761},[66,77247,77185],{"class":72},[66,77249,2563],{"class":356},[66,77251,2537],{"class":76},[66,77253,77024],{"class":3793},[66,77255,348],{"class":76},[66,77257,77258],{"class":356},"'哈好哈'",[66,77260,77088],{"class":76},[66,77262,77263],{"class":758},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[66,77265,77266],{"class":68,"line":3584},[66,77267,109],{"emptyLinePlaceholder":108},[66,77269,77270],{"class":68,"line":3589},[66,77271,77272],{"class":758},"    \u002F\u002F +类似于>=1\n",[66,77274,77275,77277,77279,77281,77283,77285,77287,77290,77292,77294,77296,77298,77300,77302],{"class":68,"line":3594},[66,77276,75532],{"class":76},[66,77278,60027],{"class":3793},[66,77280,348],{"class":76},[66,77282,2563],{"class":356},[66,77284,2941],{"class":72},[66,77286,77017],{"class":49761},[66,77288,77289],{"class":72},"+$",[66,77291,2563],{"class":356},[66,77293,2537],{"class":76},[66,77295,77024],{"class":3793},[66,77297,348],{"class":76},[66,77299,77058],{"class":356},[66,77301,77032],{"class":76},[66,77303,77035],{"class":758},[66,77305,77306,77308,77310,77312,77314,77316,77318,77320,77322,77324,77326,77328,77330,77332],{"class":68,"line":3608},[66,77307,75532],{"class":76},[66,77309,60027],{"class":3793},[66,77311,348],{"class":76},[66,77313,2563],{"class":356},[66,77315,2941],{"class":72},[66,77317,77017],{"class":49761},[66,77319,77289],{"class":72},[66,77321,2563],{"class":356},[66,77323,2537],{"class":76},[66,77325,77024],{"class":3793},[66,77327,348],{"class":76},[66,77329,77226],{"class":356},[66,77331,77032],{"class":76},[66,77333,77231],{"class":758},[66,77335,77336,77338,77340,77342,77344,77346,77348,77350,77352,77354,77356,77358,77360,77362],{"class":68,"line":3613},[66,77337,75532],{"class":76},[66,77339,60027],{"class":3793},[66,77341,348],{"class":76},[66,77343,2563],{"class":356},[66,77345,2941],{"class":72},[66,77347,77017],{"class":49761},[66,77349,77289],{"class":72},[66,77351,2563],{"class":356},[66,77353,2537],{"class":76},[66,77355,77024],{"class":3793},[66,77357,348],{"class":76},[66,77359,77258],{"class":356},[66,77361,77088],{"class":76},[66,77363,77158],{"class":758},[66,77365,77366],{"class":68,"line":4401},[66,77367,109],{"emptyLinePlaceholder":108},[66,77369,77370],{"class":68,"line":4415},[66,77371,77372],{"class":758},"    \u002F\u002F ?类似于0次或一次\n",[66,77374,77375,77377,77379,77381,77383,77385,77388,77390,77392,77394,77396,77398,77400,77402],{"class":68,"line":4423},[66,77376,75532],{"class":76},[66,77378,60027],{"class":3793},[66,77380,348],{"class":76},[66,77382,2563],{"class":356},[66,77384,2941],{"class":72},[66,77386,77387],{"class":49761},"哈？",[66,77389,2291],{"class":72},[66,77391,2563],{"class":356},[66,77393,2537],{"class":76},[66,77395,77024],{"class":3793},[66,77397,348],{"class":76},[66,77399,76007],{"class":356},[66,77401,77088],{"class":76},[66,77403,77035],{"class":758},[66,77405,77406,77408,77410,77412,77414,77416,77418,77421,77423,77425,77427,77429,77431,77433],{"class":68,"line":4428},[66,77407,75532],{"class":76},[66,77409,60027],{"class":3793},[66,77411,348],{"class":76},[66,77413,2563],{"class":356},[66,77415,2941],{"class":72},[66,77417,77017],{"class":49761},[66,77419,77420],{"class":72},"?$",[66,77422,2563],{"class":356},[66,77424,2537],{"class":76},[66,77426,77024],{"class":3793},[66,77428,348],{"class":76},[66,77430,77058],{"class":356},[66,77432,77032],{"class":76},[66,77434,77158],{"class":758},[66,77436,77437,77439,77441,77443,77445,77447,77449,77451,77453,77455,77457,77459,77461,77463],{"class":68,"line":4434},[66,77438,75532],{"class":76},[66,77440,60027],{"class":3793},[66,77442,348],{"class":76},[66,77444,2563],{"class":356},[66,77446,2941],{"class":72},[66,77448,77017],{"class":49761},[66,77450,77420],{"class":72},[66,77452,2563],{"class":356},[66,77454,2537],{"class":76},[66,77456,77024],{"class":3793},[66,77458,348],{"class":76},[66,77460,77226],{"class":356},[66,77462,77032],{"class":76},[66,77464,77231],{"class":758},[66,77466,77467,77469,77471,77473,77475,77477,77479,77481,77483,77485,77487,77489,77491,77493],{"class":68,"line":4440},[66,77468,75532],{"class":76},[66,77470,60027],{"class":3793},[66,77472,348],{"class":76},[66,77474,2563],{"class":356},[66,77476,2941],{"class":72},[66,77478,77017],{"class":49761},[66,77480,77420],{"class":72},[66,77482,2563],{"class":356},[66,77484,2537],{"class":76},[66,77486,77024],{"class":3793},[66,77488,348],{"class":76},[66,77490,77258],{"class":356},[66,77492,77032],{"class":76},[66,77494,77158],{"class":758},[66,77496,77497],{"class":68,"line":4445},[66,77498,109],{"emptyLinePlaceholder":108},[66,77500,77501],{"class":68,"line":9759},[66,77502,77503],{"class":758},"    \u002F\u002F {n}写几，就必须出现几次\n",[66,77505,77506,77508,77510,77512,77514,77516,77518,77521,77523,77525,77527,77529,77532,77535],{"class":68,"line":9783},[66,77507,75532],{"class":76},[66,77509,60027],{"class":3793},[66,77511,348],{"class":76},[66,77513,2563],{"class":356},[66,77515,2941],{"class":72},[66,77517,77017],{"class":49761},[66,77519,77520],{"class":72},"{4}$",[66,77522,2563],{"class":356},[66,77524,2537],{"class":76},[66,77526,77024],{"class":3793},[66,77528,348],{"class":76},[66,77530,77531],{"class":356},"'哈哈哈哈'",[66,77533,77534],{"class":76},")) ",[66,77536,77035],{"class":758},[66,77538,77539],{"class":68,"line":9788},[66,77540,109],{"emptyLinePlaceholder":108},[66,77542,77543],{"class":68,"line":9794},[66,77544,77545],{"class":758},"    \u002F\u002F {n,}大于等于n次\n",[66,77547,77548,77550,77552,77554,77556,77558,77560,77563,77565,77567,77569,77571,77573,77575],{"class":68,"line":9821},[66,77549,75532],{"class":76},[66,77551,60027],{"class":3793},[66,77553,348],{"class":76},[66,77555,2563],{"class":356},[66,77557,2941],{"class":72},[66,77559,77017],{"class":49761},[66,77561,77562],{"class":72},"{4,}$",[66,77564,2563],{"class":356},[66,77566,2537],{"class":76},[66,77568,77024],{"class":3793},[66,77570,348],{"class":76},[66,77572,77531],{"class":356},[66,77574,77534],{"class":76},[66,77576,77035],{"class":758},[66,77578,77579,77581,77583,77585,77587,77589,77591,77593,77595,77597,77599,77601,77604,77606],{"class":68,"line":9826},[66,77580,75532],{"class":76},[66,77582,60027],{"class":3793},[66,77584,348],{"class":76},[66,77586,2563],{"class":356},[66,77588,2941],{"class":72},[66,77590,77017],{"class":49761},[66,77592,77562],{"class":72},[66,77594,2563],{"class":356},[66,77596,2537],{"class":76},[66,77598,77024],{"class":3793},[66,77600,348],{"class":76},[66,77602,77603],{"class":356},"'哈哈哈哈哈'",[66,77605,77534],{"class":76},[66,77607,77035],{"class":758},[66,77609,77610],{"class":68,"line":9832},[66,77611,109],{"emptyLinePlaceholder":108},[66,77613,77614],{"class":68,"line":9844},[66,77615,77616],{"class":758},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[66,77618,77619,77621,77623,77625,77627,77629,77631,77634,77636,77638,77640,77642,77644,77646],{"class":68,"line":9856},[66,77620,75532],{"class":76},[66,77622,60027],{"class":3793},[66,77624,348],{"class":76},[66,77626,2563],{"class":356},[66,77628,2941],{"class":72},[66,77630,77017],{"class":49761},[66,77632,77633],{"class":72},"{4,6}$",[66,77635,2563],{"class":356},[66,77637,2537],{"class":76},[66,77639,77024],{"class":3793},[66,77641,348],{"class":76},[66,77643,77531],{"class":356},[66,77645,77534],{"class":76},[66,77647,77035],{"class":758},[66,77649,77650,77652,77654,77656,77658,77660,77662,77664,77666,77668,77670,77672,77674,77676],{"class":68,"line":9868},[66,77651,75532],{"class":76},[66,77653,60027],{"class":3793},[66,77655,348],{"class":76},[66,77657,2563],{"class":356},[66,77659,2941],{"class":72},[66,77661,77017],{"class":49761},[66,77663,77633],{"class":72},[66,77665,2563],{"class":356},[66,77667,2537],{"class":76},[66,77669,77024],{"class":3793},[66,77671,348],{"class":76},[66,77673,77603],{"class":356},[66,77675,77534],{"class":76},[66,77677,77035],{"class":758},[66,77679,77680,77682,77684,77686,77688,77690,77692,77694,77696,77698,77700,77702,77705,77707],{"class":68,"line":11523},[66,77681,75532],{"class":76},[66,77683,60027],{"class":3793},[66,77685,348],{"class":76},[66,77687,2563],{"class":356},[66,77689,2941],{"class":72},[66,77691,77017],{"class":49761},[66,77693,77633],{"class":72},[66,77695,2563],{"class":356},[66,77697,2537],{"class":76},[66,77699,77024],{"class":3793},[66,77701,348],{"class":76},[66,77703,77704],{"class":356},"'哈哈哈哈哈哈哈'",[66,77706,77534],{"class":76},[66,77708,77158],{"class":758},[66,77710,77711],{"class":68,"line":11548},[66,77712,109],{"emptyLinePlaceholder":108},[66,77714,77715],{"class":68,"line":11571},[66,77716,77717],{"class":758},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[66,77719,77720,77722,77724,77726,77728,77730,77733,77735,77737,77739,77741,77743,77746,77748],{"class":68,"line":11595},[66,77721,75532],{"class":76},[66,77723,60027],{"class":3793},[66,77725,348],{"class":76},[66,77727,2563],{"class":356},[66,77729,2941],{"class":72},[66,77731,77732],{"class":102},"[abc]",[66,77734,2291],{"class":72},[66,77736,2563],{"class":356},[66,77738,2537],{"class":76},[66,77740,77024],{"class":3793},[66,77742,348],{"class":76},[66,77744,77745],{"class":356},"'a'",[66,77747,77032],{"class":76},[66,77749,77035],{"class":758},[66,77751,77752,77754,77756,77758,77760,77762,77764,77766,77768,77770,77772,77774,77777,77779],{"class":68,"line":11600},[66,77753,75532],{"class":76},[66,77755,60027],{"class":3793},[66,77757,348],{"class":76},[66,77759,2563],{"class":356},[66,77761,2941],{"class":72},[66,77763,77732],{"class":102},[66,77765,2291],{"class":72},[66,77767,2563],{"class":356},[66,77769,2537],{"class":76},[66,77771,77024],{"class":3793},[66,77773,348],{"class":76},[66,77775,77776],{"class":356},"'b'",[66,77778,77032],{"class":76},[66,77780,77035],{"class":758},[66,77782,77783,77785,77787,77789,77791,77793,77795,77797,77799,77801,77803,77805,77808,77810],{"class":68,"line":11605},[66,77784,75532],{"class":76},[66,77786,60027],{"class":3793},[66,77788,348],{"class":76},[66,77790,2563],{"class":356},[66,77792,2941],{"class":72},[66,77794,77732],{"class":102},[66,77796,2291],{"class":72},[66,77798,2563],{"class":356},[66,77800,2537],{"class":76},[66,77802,77024],{"class":3793},[66,77804,348],{"class":76},[66,77806,77807],{"class":356},"'c'",[66,77809,77032],{"class":76},[66,77811,77035],{"class":758},[66,77813,77814,77816,77818,77820,77822,77824,77826,77828,77830,77832,77835,77837],{"class":68,"line":11610},[66,77815,75532],{"class":76},[66,77817,60027],{"class":3793},[66,77819,348],{"class":76},[66,77821,2563],{"class":356},[66,77823,77732],{"class":102},[66,77825,2563],{"class":356},[66,77827,2537],{"class":76},[66,77829,77024],{"class":3793},[66,77831,348],{"class":76},[66,77833,77834],{"class":356},"'ab'",[66,77836,77032],{"class":76},[66,77838,77035],{"class":758},[66,77840,77841,77843,77845,77847,77849,77851,77853,77855,77857,77859,77861,77863,77865,77867],{"class":68,"line":11619},[66,77842,75532],{"class":76},[66,77844,60027],{"class":3793},[66,77846,348],{"class":76},[66,77848,2563],{"class":356},[66,77850,2941],{"class":72},[66,77852,77732],{"class":102},[66,77854,2291],{"class":72},[66,77856,2563],{"class":356},[66,77858,2537],{"class":76},[66,77860,77024],{"class":3793},[66,77862,348],{"class":76},[66,77864,77834],{"class":356},[66,77866,77032],{"class":76},[66,77868,77869],{"class":758},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[66,77871,77872,77874,77876,77878,77880,77882,77884,77887,77889,77891,77893,77895,77897,77899],{"class":68,"line":11624},[66,77873,75532],{"class":76},[66,77875,60027],{"class":3793},[66,77877,348],{"class":76},[66,77879,2563],{"class":356},[66,77881,2941],{"class":72},[66,77883,77732],{"class":102},[66,77885,77886],{"class":72},"{2}$",[66,77888,2563],{"class":356},[66,77890,2537],{"class":76},[66,77892,77024],{"class":3793},[66,77894,348],{"class":76},[66,77896,77834],{"class":356},[66,77898,77032],{"class":76},[66,77900,77901],{"class":758},"\u002F\u002Ftrue   可以选两个\n",[66,77903,77904,77906,77908,77910,77912,77914,77917,77919,77921,77923,77925,77927,77930,77932],{"class":68,"line":11630},[66,77905,75532],{"class":76},[66,77907,60027],{"class":3793},[66,77909,348],{"class":76},[66,77911,2563],{"class":356},[66,77913,2941],{"class":72},[66,77915,77916],{"class":102},"[a-z]",[66,77918,2291],{"class":72},[66,77920,2563],{"class":356},[66,77922,2537],{"class":76},[66,77924,77024],{"class":3793},[66,77926,348],{"class":76},[66,77928,77929],{"class":356},"'p'",[66,77931,77088],{"class":76},[66,77933,77934],{"class":758},"\u002F\u002Ftrue   依然只能选一个\n",[66,77936,77937,77939,77941,77943,77945,77947,77950,77952,77954,77956,77958,77960,77962,77964],{"class":68,"line":11651},[66,77938,75532],{"class":76},[66,77940,60027],{"class":3793},[66,77942,348],{"class":76},[66,77944,2563],{"class":356},[66,77946,2941],{"class":72},[66,77948,77949],{"class":102},"[A-Z]",[66,77951,2291],{"class":72},[66,77953,2563],{"class":356},[66,77955,2537],{"class":76},[66,77957,77024],{"class":3793},[66,77959,348],{"class":76},[66,77961,77929],{"class":356},[66,77963,77088],{"class":76},[66,77965,77158],{"class":758},[66,77967,77968,77970,77972,77974,77976,77978,77980,77982,77984,77986,77988,77990,77993,77995],{"class":68,"line":11657},[66,77969,75532],{"class":76},[66,77971,60027],{"class":3793},[66,77973,348],{"class":76},[66,77975,2563],{"class":356},[66,77977,2941],{"class":72},[66,77979,77949],{"class":102},[66,77981,2291],{"class":72},[66,77983,2563],{"class":356},[66,77985,2537],{"class":76},[66,77987,77024],{"class":3793},[66,77989,348],{"class":76},[66,77991,77992],{"class":356},"'P'",[66,77994,77088],{"class":76},[66,77996,77035],{"class":758},[66,77998,77999,78001,78003,78005,78007,78009,78012,78014,78016,78018,78020,78022,78025,78027],{"class":68,"line":11671},[66,78000,75532],{"class":76},[66,78002,60027],{"class":3793},[66,78004,348],{"class":76},[66,78006,2563],{"class":356},[66,78008,2941],{"class":72},[66,78010,78011],{"class":102},"[0-9]",[66,78013,2291],{"class":72},[66,78015,2563],{"class":356},[66,78017,2537],{"class":76},[66,78019,77024],{"class":3793},[66,78021,348],{"class":76},[66,78023,78024],{"class":356},"'0'",[66,78026,77088],{"class":76},[66,78028,77035],{"class":758},[66,78030,78031,78033,78035,78037,78039,78041,78044,78046,78048,78050,78052,78054,78056,78058],{"class":68,"line":11677},[66,78032,75532],{"class":76},[66,78034,60027],{"class":3793},[66,78036,348],{"class":76},[66,78038,2563],{"class":356},[66,78040,2941],{"class":72},[66,78042,78043],{"class":102},"[a-zA-Z0-9]",[66,78045,2291],{"class":72},[66,78047,2563],{"class":356},[66,78049,2537],{"class":76},[66,78051,77024],{"class":3793},[66,78053,348],{"class":76},[66,78055,77929],{"class":356},[66,78057,77032],{"class":76},[66,78059,77035],{"class":758},[66,78061,78062,78064,78066],{"class":68,"line":11704},[66,78063,54199],{"class":76},[66,78065,53597],{"class":53084},[66,78067,53091],{"class":76},[66,78069,78070,78072,78074],{"class":68,"line":11713},[66,78071,53569],{"class":76},[66,78073,53584],{"class":53084},[66,78075,53091],{"class":76},[66,78077,78078],{"class":68,"line":11719},[66,78079,109],{"emptyLinePlaceholder":108},[66,78081,78082,78084,78086],{"class":68,"line":11727},[66,78083,53569],{"class":76},[66,78085,52419],{"class":53084},[66,78087,53091],{"class":76},[23801,78089,78091],{"id":78090},"_3624-修饰符","3.6.2.4 修饰符",[19,78093,78094],{},[3304,78095],{"alt":62,"src":78096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,78098,78099],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,78101,78102],{},[3304,78103],{"alt":62,"src":78104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[57,78106,78108],{"className":52417,"code":78107,"language":52419,"meta":62,"style":62},"\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",[23,78109,78110,78120,78134,78142,78156,78176,78188,78196,78204,78212,78244,78275,78280,78312,78323,78356,78365,78373,78381],{"__ignoreMap":62},[66,78111,78112,78114,78116,78118],{"class":68,"line":69},[66,78113,53081],{"class":76},[66,78115,53085],{"class":53084},[66,78117,53088],{"class":3793},[66,78119,53091],{"class":76},[66,78121,78122,78124,78126,78128,78130,78132],{"class":68,"line":80},[66,78123,413],{"class":76},[66,78125,52419],{"class":53084},[66,78127,53100],{"class":3793},[66,78129,99],{"class":76},[66,78131,53105],{"class":356},[66,78133,53091],{"class":76},[66,78135,78136,78138,78140],{"class":68,"line":112},[66,78137,413],{"class":76},[66,78139,53118],{"class":53084},[66,78141,53091],{"class":76},[66,78143,78144,78146,78148,78150,78152,78154],{"class":68,"line":129},[66,78145,53928],{"class":76},[66,78147,53128],{"class":53084},[66,78149,53131],{"class":3793},[66,78151,99],{"class":76},[66,78153,53136],{"class":356},[66,78155,53091],{"class":76},[66,78157,78158,78160,78162,78164,78166,78168,78170,78172,78174],{"class":68,"line":138},[66,78159,53928],{"class":76},[66,78161,53128],{"class":53084},[66,78163,16724],{"class":3793},[66,78165,99],{"class":76},[66,78167,53175],{"class":356},[66,78169,53155],{"class":3793},[66,78171,99],{"class":76},[66,78173,53182],{"class":356},[66,78175,53091],{"class":76},[66,78177,78178,78180,78182,78184,78186],{"class":68,"line":227},[66,78179,53928],{"class":76},[66,78181,53191],{"class":53084},[66,78183,53194],{"class":76},[66,78185,53191],{"class":53084},[66,78187,53091],{"class":76},[66,78189,78190,78192,78194],{"class":68,"line":236},[66,78191,53569],{"class":76},[66,78193,53118],{"class":53084},[66,78195,53091],{"class":76},[66,78197,78198,78200,78202],{"class":68,"line":241},[66,78199,413],{"class":76},[66,78201,53584],{"class":53084},[66,78203,53091],{"class":76},[66,78205,78206,78208,78210],{"class":68,"line":372},[66,78207,53928],{"class":76},[66,78209,53597],{"class":53084},[66,78211,53091],{"class":76},[66,78213,78214,78216,78218,78220,78222,78224,78227,78229,78231,78233,78235,78237,78240,78242],{"class":68,"line":377},[66,78215,75532],{"class":76},[66,78217,60027],{"class":3793},[66,78219,348],{"class":76},[66,78221,2563],{"class":356},[66,78223,2941],{"class":72},[66,78225,78226],{"class":49761},"java",[66,78228,2291],{"class":72},[66,78230,2563],{"class":356},[66,78232,2537],{"class":76},[66,78234,77024],{"class":3793},[66,78236,348],{"class":76},[66,78238,78239],{"class":356},"'java'",[66,78241,77534],{"class":76},[66,78243,77035],{"class":758},[66,78245,78246,78248,78250,78252,78254,78256,78258,78260,78262,78264,78266,78268,78271,78273],{"class":68,"line":392},[66,78247,75532],{"class":76},[66,78249,60027],{"class":3793},[66,78251,348],{"class":76},[66,78253,2563],{"class":356},[66,78255,2941],{"class":72},[66,78257,78226],{"class":49761},[66,78259,2291],{"class":72},[66,78261,2563],{"class":356},[66,78263,2537],{"class":76},[66,78265,77024],{"class":3793},[66,78267,348],{"class":76},[66,78269,78270],{"class":356},"'Java'",[66,78272,77534],{"class":76},[66,78274,77158],{"class":758},[66,78276,78277],{"class":68,"line":405},[66,78278,78279],{"class":758},"    \u002F\u002F 不区分大小写、\n",[66,78281,78282,78284,78286,78288,78290,78292,78294,78296,78298,78300,78302,78304,78306,78308,78310],{"class":68,"line":418},[66,78283,75532],{"class":76},[66,78285,60027],{"class":3793},[66,78287,348],{"class":76},[66,78289,2563],{"class":356},[66,78291,2941],{"class":72},[66,78293,78226],{"class":49761},[66,78295,2291],{"class":72},[66,78297,2563],{"class":356},[66,78299,257],{"class":72},[66,78301,2537],{"class":76},[66,78303,77024],{"class":3793},[66,78305,348],{"class":76},[66,78307,78270],{"class":356},[66,78309,77534],{"class":76},[66,78311,77035],{"class":758},[66,78313,78314,78316,78318,78320],{"class":68,"line":430},[66,78315,13027],{"class":72},[66,78317,75698],{"class":102},[66,78319,15369],{"class":72},[66,78321,78322],{"class":356}," 'java是一门编程语言，学完java工资很高'\n",[66,78324,78325,78327,78330,78332,78335,78338,78340,78342,78344,78346,78349,78351,78354],{"class":68,"line":438},[66,78326,13027],{"class":72},[66,78328,78329],{"class":102}," result",[66,78331,15369],{"class":72},[66,78333,78334],{"class":76}," str.",[66,78336,78337],{"class":3793},"replace",[66,78339,348],{"class":76},[66,78341,2563],{"class":356},[66,78343,78226],{"class":49761},[66,78345,2563],{"class":356},[66,78347,78348],{"class":72},"ig",[66,78350,307],{"class":76},[66,78352,78353],{"class":356},"'前端'",[66,78355,313],{"class":76},[66,78357,78358,78360,78362],{"class":68,"line":465},[66,78359,75532],{"class":76},[66,78361,60027],{"class":3793},[66,78363,78364],{"class":76},"(result)\n",[66,78366,78367,78369,78371],{"class":68,"line":1805},[66,78368,54199],{"class":76},[66,78370,53597],{"class":53084},[66,78372,53091],{"class":76},[66,78374,78375,78377,78379],{"class":68,"line":1817},[66,78376,53569],{"class":76},[66,78378,53584],{"class":53084},[66,78380,53091],{"class":76},[66,78382,78383,78385,78387],{"class":68,"line":1822},[66,78384,53569],{"class":76},[66,78386,52419],{"class":53084},[66,78388,53091],{"class":76},[1903,78390,78391],{},"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":62,"searchDepth":80,"depth":80,"links":78393},[78394,78404,78416,78433,78440,78448],{"id":55142,"depth":80,"text":55143,"children":78395},[78396,78397,78398,78399,78400,78401,78402,78403],{"id":55146,"depth":112,"text":55147},{"id":55179,"depth":112,"text":55180},{"id":55218,"depth":112,"text":55219},{"id":55376,"depth":112,"text":55377},{"id":55424,"depth":112,"text":55425},{"id":55561,"depth":112,"text":55562},{"id":55882,"depth":112,"text":55883},{"id":58869,"depth":112,"text":58870},{"id":58897,"depth":80,"text":58898,"children":78405},[78406,78407,78408,78409,78410,78411,78412,78413,78414,78415],{"id":58901,"depth":112,"text":58902},{"id":58924,"depth":112,"text":58925},{"id":59839,"depth":112,"text":59840},{"id":60529,"depth":112,"text":60530},{"id":60811,"depth":112,"text":60812},{"id":64971,"depth":112,"text":64972},{"id":65141,"depth":112,"text":65142},{"id":65269,"depth":112,"text":65270},{"id":65294,"depth":112,"text":65295},{"id":66683,"depth":112,"text":66684},{"id":67836,"depth":80,"text":67837,"children":78417},[78418,78419,78420,78421,78422,78423,78424,78425,78426,78427,78428,78429,78430,78431,78432],{"id":67840,"depth":112,"text":67841},{"id":68494,"depth":112,"text":68495},{"id":70189,"depth":112,"text":70190},{"id":70230,"depth":112,"text":70231},{"id":70272,"depth":112,"text":70273},{"id":70286,"depth":112,"text":70287},{"id":70335,"depth":112,"text":70336},{"id":70347,"depth":112,"text":70348},{"id":70362,"depth":112,"text":70363},{"id":70398,"depth":112,"text":70399},{"id":70479,"depth":112,"text":70480},{"id":70607,"depth":112,"text":70608},{"id":70619,"depth":112,"text":70620},{"id":70638,"depth":112,"text":70639},{"id":72749,"depth":112,"text":72750},{"id":72768,"depth":80,"text":72769,"children":78434},[78435,78436,78437,78438,78439],{"id":72789,"depth":112,"text":72790},{"id":72809,"depth":112,"text":72810},{"id":72858,"depth":112,"text":72859},{"id":72983,"depth":112,"text":72984},{"id":73164,"depth":112,"text":73165},{"id":73182,"depth":80,"text":73183,"children":78441},[78442,78443,78444,78445,78446,78447],{"id":73197,"depth":112,"text":73198},{"id":73256,"depth":112,"text":73257},{"id":73280,"depth":112,"text":73281},{"id":73600,"depth":112,"text":73601},{"id":73632,"depth":112,"text":73633},{"id":73655,"depth":112,"text":73656},{"id":76723,"depth":80,"text":76724,"children":78449},[78450,78451],{"id":76757,"depth":112,"text":76758},{"id":76796,"depth":112,"text":76797},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":55114,"description":1926},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":78458,"title":78459,"body":78460,"description":1926,"extension":1927,"meta":94594,"navigation":108,"path":94595,"seo":94596,"stem":94597,"__hash__":94598},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":78461,"toc":94530},[78462,78465,78468,78472,78476,78481,78486,78497,78501,78506,78509,78513,78516,78521,78525,78529,78532,78537,78540,78544,78547,78555,78558,78562,78567,78572,78575,78579,78584,78589,78592,78596,78601,78604,78609,78612,78617,78620,78625,78630,78633,78636,78640,78645,78650,78653,78657,78661,78664,78667,78670,78674,78678,78683,78688,78691,78695,78700,78705,78708,78711,78714,78717,78720,78723,78726,78729,78732,78737,78741,78746,78751,78754,78757,78760,78763,78766,78769,78772,78775,78779,78783,78786,78789,78792,78797,78799,78802,78805,78808,78811,78814,78817,78820,78823,78826,78829,78832,78835,78838,78843,78848,78853,78856,78860,78863,78868,78872,78874,78885,78890,78991,78994,78997,79000,79003,79006,79009,79012,79015,79017,79020,79023,79026,79029,79032,79034,79037,79040,79043,79046,79049,79052,79054,79057,79059,79061,79064,79068,79072,79075,79078,79081,79084,79087,79090,79093,79096,79099,79104,79224,79227,79230,79235,79238,79241,79244,79247,79252,79255,79258,79261,79264,79269,79272,79372,79437,79511,79515,79518,79521,79525,79528,79542,79571,79574,79577,79580,79583,79586,79589,79592,79594,79597,79600,79603,79606,79610,79615,79619,79624,79699,79702,79884,79887,79890,79893,79896,79899,79901,79904,79907,79910,79913,79916,79919,79921,79925,79928,79933,79936,79939,79942,79945,79947,79952,79955,79958,79961,79964,79966,79971,79974,79977,79979,79981,79984,79988,79991,79994,79999,80002,80005,80008,80058,80063,80067,80072,80075,80144,80147,80156,80160,80165,80168,80171,80179,80182,80199,82001,82005,82009,82014,82017,82021,82027,82033,82185,82190,82195,82198,82201,82204,82207,82210,82213,82216,82219,82222,82225,82228,82231,82236,82240,82243,82254,82258,82263,82266,82269,82272,82275,82278,82280,82283,82286,82289,82292,82294,82311,82314,82318,82321,82326,82331,82334,82337,82341,82344,82347,82356,82359,82363,82366,82371,82376,82443,82447,82450,82453,82458,82463,82549,82554,82558,82561,82564,82579,82582,82587,82591,82596,82705,82707,82718,82868,82872,82877,82986,82990,82995,83000,83005,83008,83015,83035,83071,83235,83240,83243,83248,83255,83258,83261,83264,83323,83379,83435,83439,83444,83759,83762,83766,83769,83774,83883,83888,83892,83897,83901,83972,83976,83978,83981,83984,84022,84298,84302,84319,84385,84419,84423,84426,84431,84460,84467,84476,84481,84496,84501,84510,84513,84650,84654,84716,84720,84725,84970,84974,84979,84982,84985,84988,84991,84995,85000,86580,86584,86588,86594,86597,86602,86606,86609,86614,86617,86628,86632,86637,86641,86646,86651,86654,86659,86663,86667,86670,86675,86680,86683,86686,86689,86811,86816,86918,86921,86924,86928,86933,87105,87110,87114,87117,87122,87188,87193,87196,87327,87330,87335,87338,87341,87432,87437,87440,87443,87446,87449,87454,87459,87462,87467,87472,87477,87481,87484,87487,87492,87497,87502,87507,87561,87564,87567,87572,87575,87578,87583,87588,87593,87597,87602,87616,87621,87624,87629,87633,87638,87643,87648,87653,87658,87663,87668,87673,87676,87680,87685,87688,87691,87694,87699,87704,87707,87710,87714,87717,87720,87725,87730,87735,87740,87743,87748,87753,87814,87819,87822,87827,89068,89073,89077,89081,89086,89089,89094,89099,89102,89107,89109,89114,89118,89121,89124,89135,89139,89144,89149,89204,89209,89214,89219,89430,89435,89439,89444,89447,89449,89452,89455,89902,89907,89914,89920,89923,89926,90190,90195,90199,90464,90469,90473,90478,90483,90488,90493,90824,90827,90832,90837,90840,90844,90848,90853,90858,90863,90868,90873,90878,90882,90885,90890,90895,90898,90972,90977,90982,90987,90989,90992,91362,91367,91372,91377,91380,91383,91485,91490,91495,91598,91602,91607,91611,91615,91620,91625,91628,91633,91636,91639,92032,92037,92040,92043,92046,92049,92569,92573,92578,92583,92588,92591,92596,92599,92602,92984,92989,92991,92993,92996,92999,93511,93515,93576,93579,93582,93585,93589,93592,93597,93602,94527],[10,78463,78459],{"id":78464},"_4js进阶",[19,78466,78467],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,78469,78471],{"id":78470},"_41-作用域","4.1 作用域",[484,78473,78475],{"id":78474},"_411-局部作用域","4.1.1 局部作用域",[19,78477,78478],{},[3304,78479],{"alt":62,"src":78480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,78482,78483],{},[3304,78484],{"alt":62,"src":78485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[2982,78487,78488,78491,78494],{},[34,78489,78490],{},"函数作用域在函数内部",[34,78492,78493],{},"块级作用域在{}",[34,78495,78496],{},"对象的那个{}不是作用域，不是块作用域",[484,78498,78500],{"id":78499},"_412-全局作用域","4.1.2 全局作用域",[19,78502,78503],{},[3304,78504],{"alt":62,"src":78505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,78507,78508],{},"window.a=10不要这样写",[484,78510,78512],{"id":78511},"_413-作用域链","4.1.3 作用域链",[19,78514,78515],{},"变量查找机制",[19,78517,78518],{},[3304,78519],{"alt":62,"src":78520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,78522,78524],{"id":78523},"_42-垃圾回收机制","4.2 垃圾回收机制",[484,78526,78528],{"id":78527},"_421-大体介绍","4.2.1 大体介绍",[19,78530,78531],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,78533,78534],{},[3304,78535],{"alt":62,"src":78536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,78538,78539],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[484,78541,78543],{"id":78542},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,78545,78546],{},"堆栈空间分配区别：",[31,78548,78549,78552],{},[34,78550,78551],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[34,78553,78554],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,78556,78557],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[23801,78559,78561],{"id":78560},"_4221-引用计数","4.2.2.1 引用计数",[19,78563,78564],{},[3304,78565],{"alt":62,"src":78566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,78568,78569],{},[3304,78570],{"alt":62,"src":78571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,78573,78574],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[23801,78576,78578],{"id":78577},"_4222-标记清除法","4.2.2.2 标记清除法",[19,78580,78581],{},[3304,78582],{"alt":62,"src":78583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,78585,78586],{},[3304,78587],{"alt":62,"src":78588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,78590,78591],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,78593,78595],{"id":78594},"_43-闭包","4.3 闭包",[19,78597,78598],{},[3304,78599],{"alt":62,"src":78600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,78602,78603],{},"闭包：内层函数+外层函数的变量",[19,78605,78606],{},[3304,78607],{"alt":62,"src":78608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,78610,78611],{},"closure就是闭包",[19,78613,78614],{},[3304,78615],{"alt":62,"src":78616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,78618,78619],{},"内层函数必须包含外层函数的变量才是闭包",[19,78621,78622],{},[3304,78623],{"alt":62,"src":78624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,78626,78627],{},[3304,78628],{"alt":62,"src":78629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,78631,78632],{},"闭包可能会引起内存泄漏",[19,78634,78635],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,78637,78639],{"id":78638},"_44-变量提升","4.4 变量提升",[19,78641,78642],{},[3304,78643],{"alt":62,"src":78644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,78646,78647],{},[3304,78648],{"alt":62,"src":78649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,78651,78652],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,78654,78656],{"id":78655},"_45-函数进阶","4.5 函数进阶",[484,78658,78660],{"id":78659},"_451-函数提升","4.5.1 函数提升",[19,78662,78663],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,78665,78666],{},"只提升函数声明，不提升函数调用",[53597,78668,78669],{},"\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",[484,78671,78673],{"id":78672},"_452-函数参数","4.5.2 函数参数",[23801,78675,78677],{"id":78676},"_4521-动态参数","4.5.2.1 动态参数",[19,78679,78680],{},[3304,78681],{"alt":62,"src":78682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,78684,78685],{},[3304,78686],{"alt":62,"src":78687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,78689,78690],{},"箭头函数里边没有arguments",[23801,78692,78694],{"id":78693},"_4522-剩余参数","4.5.2.2 剩余参数",[19,78696,78697],{},[3304,78698],{"alt":62,"src":78699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,78701,78702],{},[3304,78703],{"alt":62,"src":78704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,78706,78707],{},"剩余参数使用的时候不需要写...",[19,78709,78710],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,78712,78713],{},"  function getSum(a,b,...arr) {",[19,78715,78716],{},"  console.log(11)",[19,78718,78719],{},"  }",[19,78721,78722],{},"  getSum(1,2,3,4)",[19,78724,78725],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,78727,78728],{},"  getSum(1,2)",[19,78730,78731],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,78733,78734],{},[3304,78735],{"alt":62,"src":78736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[23801,78738,78740],{"id":78739},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,78742,78743],{},[3304,78744],{"alt":62,"src":78745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,78747,78748],{},[3304,78749],{"alt":62,"src":78750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,78752,78753],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,78755,78756],{},"展开运算符可以用于数组之间的合并：",[19,78758,78759],{},"const arr1 = [1, 2, 3]",[19,78761,78762],{},"const arr2 = [3, 4, 5]",[19,78764,78765],{},"const arr = [...arr1, ...arr2]",[19,78767,78768],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,78770,78771],{},"剩余参数：函数参数使用，得到真数组",[19,78773,78774],{},"展开运算符：数组中使用，数组展开",[484,78776,78778],{"id":78777},"_453-箭头函数","4.5.3 箭头函数",[23801,78780,78782],{"id":78781},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,78784,78785],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,78787,78788],{},"它不是万能的！！！",[19,78790,78791],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,78793,78794],{},[3304,78795],{"alt":62,"src":78796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,78798,2028],{},[19,78800,78801],{},"① 只有一个形参的时候，可以省略小括号：",[19,78803,78804],{},"const fn=x=>{console.log(x)}",[19,78806,78807],{},"② 只有一行代码时可以省略大括号：",[19,78809,78810],{},"const fn=x=>console.log(11)",[19,78812,78813],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,78815,78816],{},"const fn=x=>x+x",[19,78818,78819],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,78821,78822],{},"⑤ 阻止表单默认提交：",[19,78824,78825],{},"const form = document.querySelector('form')",[19,78827,78828],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,78830,78831],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,78833,78834],{},"const fn=uname=>({uname:uname})",[19,78836,78837],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,78839,78840],{},[3304,78841],{"alt":62,"src":78842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,78844,78845],{},[3304,78846],{"alt":62,"src":78847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,78849,78850],{},[3304,78851],{"alt":62,"src":78852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,78854,78855],{},"一定不要忘记用()，有()就理解为自带return",[23801,78857,78859],{"id":78858},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,78861,78862],{},"箭头函数是没有动态参数的arguments",[19,78864,78865],{},[3304,78866],{"alt":62,"src":78867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[23801,78869,78871],{"id":78870},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,78873,13138],{},[31,78875,78876,78879,78882],{},[34,78877,78878],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[34,78880,78881],{},"事件回调函数使用箭头函数时，this 为全局的 window",[34,78883,78884],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,78886,78887],{},[3304,78888],{"alt":62,"src":78889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[57,78891,78893],{"className":54849,"code":78892,"language":54851,"meta":62,"style":62},"  \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",[23,78894,78895,78903,78908,78913,78918,78923,78928,78932,78937,78941,78945,78950,78955,78960,78964,78968,78973,78978,78983],{"__ignoreMap":62},[66,78896,78897,78899,78901],{"class":68,"line":69},[66,78898,53928],{"class":76},[66,78900,53597],{"class":53084},[66,78902,53091],{"class":76},[66,78904,78905],{"class":68,"line":80},[66,78906,78907],{"class":76},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[66,78909,78910],{"class":68,"line":112},[66,78911,78912],{"class":76},"    console.log(this) \u002F\u002F指向window\n",[66,78914,78915],{"class":68,"line":129},[66,78916,78917],{"class":76},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[66,78919,78920],{"class":68,"line":138},[66,78921,78922],{"class":76},"    function fn() {\n",[66,78924,78925],{"class":68,"line":227},[66,78926,78927],{"class":76},"      console.log(this)  \u002F\u002F指向window\n",[66,78929,78930],{"class":68,"line":236},[66,78931,4013],{"class":76},[66,78933,78934],{"class":68,"line":241},[66,78935,78936],{"class":76},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[66,78938,78939],{"class":68,"line":372},[66,78940,109],{"emptyLinePlaceholder":108},[66,78942,78943],{"class":68,"line":377},[66,78944,73302],{"class":76},[66,78946,78947],{"class":68,"line":392},[66,78948,78949],{"class":76},"      name: 'andy',\n",[66,78951,78952],{"class":68,"line":405},[66,78953,78954],{"class":76},"      sayHai: function () {\n",[66,78956,78957],{"class":68,"line":418},[66,78958,78959],{"class":76},"        console.log(this)\n",[66,78961,78962],{"class":68,"line":430},[66,78963,54180],{"class":76},[66,78965,78966],{"class":68,"line":438},[66,78967,4013],{"class":76},[66,78969,78970],{"class":68,"line":465},[66,78971,78972],{"class":76},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[66,78974,78975],{"class":68,"line":1805},[66,78976,78977],{"class":76},"    \u002F\u002F 2.箭头函数的this\n",[66,78979,78980],{"class":68,"line":1817},[66,78981,78982],{"class":76},"    const fn = () => console.log(this)\n",[66,78984,78985,78987,78989],{"class":68,"line":1822},[66,78986,54199],{"class":76},[66,78988,53597],{"class":53084},[66,78990,53091],{"class":76},[19,78992,78993],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,78995,78996],{},"const fn = () => console.log(this)",[19,78998,78999],{},"fn() \u002F\u002F指向window",[19,79001,79002],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,79004,79005],{},"①",[19,79007,79008],{},"const obj = {",[19,79010,79011],{},"uname: 'pink老师',",[19,79013,79014],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,79016,457],{},[19,79018,79019],{},"调用对象里边的函数",[19,79021,79022],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,79024,79025],{},"obj.sayHai()",[19,79027,79028],{},"②",[19,79030,79031],{},"const obj1 = {",[19,79033,79011],{},[19,79035,79036],{},"sayHai: function () {",[19,79038,79039],{},"let i = 10",[19,79041,79042],{},"const count = () => {",[19,79044,79045],{},"console.log(this)",[19,79047,79048],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,79050,79051],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,79053,457],{},[19,79055,79056],{},"count()",[19,79058,457],{},[19,79060,457],{},[19,79062,79063],{},"obj1.sayHai()",[14,79065,79067],{"id":79066},"_46-解构赋值","4.6 解构赋值",[484,79069,79071],{"id":79070},"_461-数组解构","4.6.1 数组解构",[19,79073,79074],{},"以前要是使用数组中的值的话：",[19,79076,79077],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,79079,79080],{},"const arr=[100,60,80]",[19,79082,79083],{},"const max=arr[0]",[19,79085,79086],{},"const min=arr[1]",[19,79088,79089],{},"const avg=arr[2]",[19,79091,79092],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,79094,79095],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,79097,79098],{},"这个写法就类似于上边的那种用很多const的方法",[19,79100,79101],{},[3304,79102],{"alt":62,"src":79103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[57,79105,79107],{"className":52417,"code":79106,"language":52419,"meta":62,"style":62},"①变量之间交换值:\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",[23,79108,79109,79114,79119,79124,79129,79134,79138,79142,79147,79151,79156,79161,79165,79170,79175,79186,79196,79201,79206,79211,79215,79219],{"__ignoreMap":62},[66,79110,79111],{"class":68,"line":69},[66,79112,79113],{"class":76},"①变量之间交换值:\n",[66,79115,79116],{"class":68,"line":80},[66,79117,79118],{"class":76},"let a=1\n",[66,79120,79121],{"class":68,"line":112},[66,79122,79123],{"class":76},"let b=2;\n",[66,79125,79126],{"class":68,"line":129},[66,79127,79128],{"class":76},"必须加这行代码，不然就会报错\n",[66,79130,79131],{"class":68,"line":138},[66,79132,79133],{"class":76},"[b,a]=[a,b]\n",[66,79135,79136],{"class":68,"line":227},[66,79137,109],{"emptyLinePlaceholder":108},[66,79139,79140],{"class":68,"line":236},[66,79141,109],{"emptyLinePlaceholder":108},[66,79143,79144],{"class":68,"line":241},[66,79145,79146],{"class":76},"可以写成下面的方式：\n",[66,79148,79149],{"class":68,"line":372},[66,79150,79118],{"class":76},[66,79152,79153],{"class":68,"line":377},[66,79154,79155],{"class":76},"let b=2\n",[66,79157,79158],{"class":68,"line":392},[66,79159,79160],{"class":76},";[b,a]=[a,b]\n",[66,79162,79163],{"class":68,"line":405},[66,79164,109],{"emptyLinePlaceholder":108},[66,79166,79167],{"class":68,"line":418},[66,79168,79169],{"class":76},"②排序\n",[66,79171,79172],{"class":68,"line":430},[66,79173,79174],{"class":76},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[66,79176,79177,79180,79183],{"class":68,"line":438},[66,79178,79179],{"class":76},"for (let i = 0; i ",[66,79181,413],{"class":79182},"s7hpK",[66,79184,79185],{"class":76}," arr1.length; i++) {\n",[66,79187,79188,79191,79193],{"class":68,"line":465},[66,79189,79190],{"class":76},"   for (let j = 0; j ",[66,79192,413],{"class":79182},[66,79194,79195],{"class":76}," arr1.length - 1; j++) {\n",[66,79197,79198],{"class":68,"line":1805},[66,79199,79200],{"class":76},"      if (arr1[j] > arr1[j + 1]) {\n",[66,79202,79203],{"class":68,"line":1817},[66,79204,79205],{"class":76},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[66,79207,79208],{"class":68,"line":1822},[66,79209,79210],{"class":76},"       }\n",[66,79212,79213],{"class":68,"line":1829},[66,79214,6125],{"class":76},[66,79216,79217],{"class":68,"line":3529},[66,79218,3407],{"class":76},[66,79220,79221],{"class":68,"line":3557},[66,79222,79223],{"class":76},"console.log(arr1)\n",[19,79225,79226],{},"数组解构的细节：",[19,79228,79229],{},"①变量多，单元值少",[19,79231,79232],{},[3304,79233],{"alt":62,"src":79234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,79236,79237],{},"防止出现undefined的方法：",[19,79239,79240],{},"const [a=0,b=0] =[1]",[19,79242,79243],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,79245,79246],{},"②变量少，单元值多",[19,79248,79249],{},[3304,79250],{"alt":62,"src":79251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,79253,79254],{},"此时可以使用剩余参数来接收多余的值",[19,79256,79257],{},"const [a,b,...c]=[1,2,3,4]",[19,79259,79260],{},"console.log(c) 输出[3,4]",[19,79262,79263],{},"③可以按需导入，忽略某些返回值",[19,79265,79266],{},[3304,79267],{"alt":62,"src":79268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,79270,79271],{},"④支持多维数组的结构",[57,79273,79277],{"className":79274,"code":79275,"language":79276,"meta":62,"style":62},"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",[23,79278,79279,79307,79323,79338,79353],{"__ignoreMap":62},[66,79280,79281,79283,79285,79287,79289,79291,79293,79295,79298,79300,79302,79304],{"class":68,"line":69},[66,79282,8603],{"class":72},[66,79284,53617],{"class":76},[66,79286,99],{"class":72},[66,79288,688],{"class":76},[66,79290,304],{"class":102},[66,79292,307],{"class":76},[66,79294,795],{"class":102},[66,79296,79297],{"class":76},", [",[66,79299,1520],{"class":102},[66,79301,307],{"class":76},[66,79303,1076],{"class":102},[66,79305,79306],{"class":76},"]]\n",[66,79308,79309,79312,79314,79316,79318,79320],{"class":68,"line":80},[66,79310,79311],{"class":76},"console.",[66,79313,60027],{"class":3793},[66,79315,5668],{"class":76},[66,79317,2183],{"class":102},[66,79319,6032],{"class":76},[66,79321,79322],{"class":758},"  \u002F\u002F1\n",[66,79324,79325,79327,79329,79331,79333,79335],{"class":68,"line":112},[66,79326,79311],{"class":76},[66,79328,60027],{"class":3793},[66,79330,5668],{"class":76},[66,79332,304],{"class":102},[66,79334,6032],{"class":76},[66,79336,79337],{"class":758},"  \u002F\u002F2\n",[66,79339,79340,79342,79344,79346,79348,79350],{"class":68,"line":129},[66,79341,79311],{"class":76},[66,79343,60027],{"class":3793},[66,79345,5668],{"class":76},[66,79347,795],{"class":102},[66,79349,6032],{"class":76},[66,79351,79352],{"class":758},"  \u002F\u002F[3,4]\n",[66,79354,79355,79357,79359,79361,79363,79365,79367,79369],{"class":68,"line":138},[66,79356,79311],{"class":76},[66,79358,60027],{"class":3793},[66,79360,5668],{"class":76},[66,79362,795],{"class":102},[66,79364,6717],{"class":76},[66,79366,2183],{"class":102},[66,79368,6032],{"class":76},[66,79370,79371],{"class":758},"  \u002F\u002F3\n",[57,79373,79375],{"className":79274,"code":79374,"language":79276,"meta":62,"style":62},"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",[23,79376,79377,79404,79415,79426],{"__ignoreMap":62},[66,79378,79379,79381,79384,79386,79388,79390,79392,79394,79396,79398,79400,79402],{"class":68,"line":69},[66,79380,8603],{"class":72},[66,79382,79383],{"class":76}," [a, b, c] ",[66,79385,99],{"class":72},[66,79387,688],{"class":76},[66,79389,304],{"class":102},[66,79391,307],{"class":76},[66,79393,795],{"class":102},[66,79395,79297],{"class":76},[66,79397,1520],{"class":102},[66,79399,307],{"class":76},[66,79401,1076],{"class":102},[66,79403,79306],{"class":76},[66,79405,79406,79408,79410,79413],{"class":68,"line":80},[66,79407,79311],{"class":76},[66,79409,60027],{"class":3793},[66,79411,79412],{"class":76},"(a)",[66,79414,79322],{"class":758},[66,79416,79417,79419,79421,79424],{"class":68,"line":112},[66,79418,79311],{"class":76},[66,79420,60027],{"class":3793},[66,79422,79423],{"class":76},"(b)",[66,79425,79337],{"class":758},[66,79427,79428,79430,79432,79435],{"class":68,"line":129},[66,79429,79311],{"class":76},[66,79431,60027],{"class":3793},[66,79433,79434],{"class":76},"(c)",[66,79436,79352],{"class":758},[57,79438,79440],{"className":79274,"code":79439,"language":79276,"meta":62,"style":62},"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",[23,79441,79442,79469,79479,79489,79499],{"__ignoreMap":62},[66,79443,79444,79446,79449,79451,79453,79455,79457,79459,79461,79463,79465,79467],{"class":68,"line":69},[66,79445,8603],{"class":72},[66,79447,79448],{"class":76}," [a, b, [c, d]] ",[66,79450,99],{"class":72},[66,79452,688],{"class":76},[66,79454,304],{"class":102},[66,79456,307],{"class":76},[66,79458,795],{"class":102},[66,79460,79297],{"class":76},[66,79462,1520],{"class":102},[66,79464,307],{"class":76},[66,79466,1076],{"class":102},[66,79468,79306],{"class":76},[66,79470,79471,79473,79475,79477],{"class":68,"line":80},[66,79472,79311],{"class":76},[66,79474,60027],{"class":3793},[66,79476,79412],{"class":76},[66,79478,79322],{"class":758},[66,79480,79481,79483,79485,79487],{"class":68,"line":112},[66,79482,79311],{"class":76},[66,79484,60027],{"class":3793},[66,79486,79423],{"class":76},[66,79488,79337],{"class":758},[66,79490,79491,79493,79495,79497],{"class":68,"line":129},[66,79492,79311],{"class":76},[66,79494,60027],{"class":3793},[66,79496,79434],{"class":76},[66,79498,79371],{"class":758},[66,79500,79501,79503,79505,79508],{"class":68,"line":138},[66,79502,79311],{"class":76},[66,79504,60027],{"class":3793},[66,79506,79507],{"class":76},"(d)",[66,79509,79510],{"class":758},"  \u002F\u002F4\n",[484,79512,79514],{"id":79513},"_462-对象解构","4.6.2 对象解构",[19,79516,79517],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,79519,79520],{},"用的非常非常多！！！！！！",[23801,79522,79524],{"id":79523},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,79526,79527],{},"基本语法：",[31,79529,79530,79533,79536,79539],{},[34,79531,79532],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[34,79534,79535],{},"对象属性的值将被赋值给与属性名相同的变量",[34,79537,79538],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[34,79540,79541],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[57,79543,79545],{"className":52417,"code":79544,"language":52419,"meta":62,"style":62},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[23,79546,79547,79552,79557,79562,79566],{"__ignoreMap":62},[66,79548,79549],{"class":68,"line":69},[66,79550,79551],{"class":76},"const obj = {\n",[66,79553,79554],{"class":68,"line":80},[66,79555,79556],{"class":76},"   uname: 'pink老师',\n",[66,79558,79559],{"class":68,"line":112},[66,79560,79561],{"class":76},"   age: 18,\n",[66,79563,79564],{"class":68,"line":129},[66,79565,3407],{"class":76},[66,79567,79568],{"class":68,"line":138},[66,79569,79570],{"class":76},"const { uname, age } = obj\n",[19,79572,79573],{},"上方代码这样写等价于：",[19,79575,79576],{},"const uname等价于obj.uname",[19,79578,79579],{},"变量名可以重新改名：",[19,79581,79582],{},"const uname='red老师'",[19,79584,79585],{},"const user={",[19,79587,79588],{},"  uname:'pink老师',",[19,79590,79591],{},"  age:18",[19,79593,457],{},[19,79595,79596],{},"const {uname,age}=user",[19,79598,79599],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,79601,79602],{},"const {旧变量名：新变量名}=对象",[19,79604,79605],{},"const {uname:username,age}=user",[23801,79607,79609],{"id":79608},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,79611,79612],{},[3304,79613],{"alt":62,"src":79614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[23801,79616,79618],{"id":79617},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,79620,79621],{},[3304,79622],{"alt":62,"src":79623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[57,79625,79627],{"className":54849,"code":79626,"language":54851,"meta":62,"style":62},"  \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",[23,79628,79629,79637,79642,79647,79652,79657,79662,79667,79672,79677,79681,79686,79691],{"__ignoreMap":62},[66,79630,79631,79633,79635],{"class":68,"line":69},[66,79632,53928],{"class":76},[66,79634,53597],{"class":53084},[66,79636,53091],{"class":76},[66,79638,79639],{"class":68,"line":80},[66,79640,79641],{"class":76},"    const pig = {\n",[66,79643,79644],{"class":68,"line":112},[66,79645,79646],{"class":76},"      name: '佩奇',\n",[66,79648,79649],{"class":68,"line":129},[66,79650,79651],{"class":76},"      family: {\n",[66,79653,79654],{"class":68,"line":138},[66,79655,79656],{"class":76},"        mother: '猪妈妈',\n",[66,79658,79659],{"class":68,"line":227},[66,79660,79661],{"class":76},"        father: '猪爸爸',\n",[66,79663,79664],{"class":68,"line":236},[66,79665,79666],{"class":76},"        sister: '乔治'\n",[66,79668,79669],{"class":68,"line":241},[66,79670,79671],{"class":76},"      },\n",[66,79673,79674],{"class":68,"line":372},[66,79675,79676],{"class":76},"      age: 6\n",[66,79678,79679],{"class":68,"line":377},[66,79680,4013],{"class":76},[66,79682,79683],{"class":68,"line":392},[66,79684,79685],{"class":76},"    \u002F\u002F 多级对象解构\n",[66,79687,79688],{"class":68,"line":405},[66,79689,79690],{"class":76},"    const { name, family: { mother, father, sister }, age } = pig\n",[66,79692,79693,79695,79697],{"class":68,"line":418},[66,79694,54199],{"class":76},[66,79696,53597],{"class":53084},[66,79698,53091],{"class":76},[19,79700,79701],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[57,79703,79706],{"className":79704,"code":79705,"language":78226,"meta":62,"style":62},"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",[23,79707,79708,79713,79724,79736,79748,79757,79761,79772,79784,79794,79799,79803,79813,79824,79833,79837,79841,79851,79862,79871,79875,79880],{"__ignoreMap":62},[66,79709,79710],{"class":68,"line":69},[66,79711,79712],{"class":758},"    \u002F\u002F 这是后台传递过来的数据\n",[66,79714,79715,79717,79720,79722],{"class":68,"line":80},[66,79716,13027],{"class":72},[66,79718,79719],{"class":76}," msg ",[66,79721,99],{"class":72},[66,79723,17375],{"class":76},[66,79725,79726,79729,79731,79734],{"class":68,"line":112},[66,79727,79728],{"class":356},"      \"code\"",[66,79730,2838],{"class":72},[66,79732,79733],{"class":102}," 200",[66,79735,33259],{"class":76},[66,79737,79738,79741,79743,79746],{"class":68,"line":129},[66,79739,79740],{"class":356},"      \"msg\"",[66,79742,2838],{"class":72},[66,79744,79745],{"class":356}," \"获取新闻列表成功\"",[66,79747,33259],{"class":76},[66,79749,79750,79753,79755],{"class":68,"line":138},[66,79751,79752],{"class":356},"      \"data\"",[66,79754,2838],{"class":72},[66,79756,57228],{"class":76},[66,79758,79759],{"class":68,"line":227},[66,79760,4334],{"class":76},[66,79762,79763,79766,79768,79770],{"class":68,"line":236},[66,79764,79765],{"class":356},"          \"id\"",[66,79767,2838],{"class":72},[66,79769,1187],{"class":102},[66,79771,33259],{"class":76},[66,79773,79774,79777,79779,79782],{"class":68,"line":241},[66,79775,79776],{"class":356},"          \"title\"",[66,79778,2838],{"class":72},[66,79780,79781],{"class":356}," \"5G商用自己，三大运用商收入下降\"",[66,79783,33259],{"class":76},[66,79785,79786,79789,79791],{"class":68,"line":372},[66,79787,79788],{"class":356},"          \"count\"",[66,79790,2838],{"class":72},[66,79792,79793],{"class":102}," 58\n",[66,79795,79796],{"class":68,"line":377},[66,79797,79798],{"class":76},"        },\n",[66,79800,79801],{"class":68,"line":392},[66,79802,4334],{"class":76},[66,79804,79805,79807,79809,79811],{"class":68,"line":405},[66,79806,79765],{"class":356},[66,79808,2838],{"class":72},[66,79810,956],{"class":102},[66,79812,33259],{"class":76},[66,79814,79815,79817,79819,79822],{"class":68,"line":418},[66,79816,79776],{"class":356},[66,79818,2838],{"class":72},[66,79820,79821],{"class":356}," \"国际媒体头条速览\"",[66,79823,33259],{"class":76},[66,79825,79826,79828,79830],{"class":68,"line":430},[66,79827,79788],{"class":356},[66,79829,2838],{"class":72},[66,79831,79832],{"class":102}," 56\n",[66,79834,79835],{"class":68,"line":438},[66,79836,79798],{"class":76},[66,79838,79839],{"class":68,"line":465},[66,79840,4334],{"class":76},[66,79842,79843,79845,79847,79849],{"class":68,"line":1805},[66,79844,79765],{"class":356},[66,79846,2838],{"class":72},[66,79848,534],{"class":102},[66,79850,33259],{"class":76},[66,79852,79853,79855,79857,79860],{"class":68,"line":1817},[66,79854,79776],{"class":356},[66,79856,2838],{"class":72},[66,79858,79859],{"class":356}," \"乌克兰和俄罗斯持续冲突\"",[66,79861,33259],{"class":76},[66,79863,79864,79866,79868],{"class":68,"line":1822},[66,79865,79788],{"class":356},[66,79867,2838],{"class":72},[66,79869,79870],{"class":102}," 1669\n",[66,79872,79873],{"class":68,"line":1829},[66,79874,79798],{"class":76},[66,79876,79877],{"class":68,"line":3529},[66,79878,79879],{"class":76},"      ]\n",[66,79881,79882],{"class":68,"line":3557},[66,79883,4013],{"class":76},[19,79885,79886],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,79888,79889],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,79891,79892],{},"\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,79894,79895],{},"function({data}) {",[19,79897,79898],{},"console.log(data)",[19,79900,457],{},[19,79902,79903],{},"render(msg)",[19,79905,79906],{},"实参传递给形参的时候解构了",[19,79908,79909],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,79911,79912],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,79914,79915],{},"function render({data:mydata}) {",[19,79917,79918],{},"  console.log(data)",[19,79920,457],{},[484,79922,79924],{"id":79923},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,79926,79927],{},"有两种情况：一个是数组结构，一个是立即执行函数",[31,79929,79930],{},[34,79931,79932],{},"如果对一个数组进行遍历，有两种方式：",[19,79934,79935],{},"①法1",[19,79937,79938],{},"const arr=[1,2,3]",[19,79940,79941],{},"arr.map(function(item,index) {",[19,79943,79944],{},"  console.log(item)",[19,79946,54246],{},[19,79948,79949],{},[3304,79950],{"alt":62,"src":79951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,79953,79954],{},"②法2",[19,79956,79957],{},"const str='pink'",[19,79959,79960],{},"[1,2,3].map(function(item,index) {",[19,79962,79963],{},"console.log(item)",[19,79965,54246],{},[19,79967,79968],{},[3304,79969],{"alt":62,"src":79970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,79972,79973],{},"此时会报错",[19,79975,79976],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,79978,79963],{},[19,79980,54246],{},[19,79982,79983],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,79985,79987],{"id":79986},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,79989,79990],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,79992,79993],{},"可以理解为加强版的for循环",[19,79995,79996],{},[3304,79997],{"alt":62,"src":79998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,80000,80001],{},"里边不写return，不返回数组，只遍历不返回",[19,80003,80004],{},"map是返回数组",[19,80006,80007],{},"forEach主要用于遍历数组对象",[57,80009,80011],{"className":54849,"code":80010,"language":54851,"meta":62,"style":62},"  \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",[23,80012,80013,80021,80026,80031,80036,80041,80045,80050],{"__ignoreMap":62},[66,80014,80015,80017,80019],{"class":68,"line":69},[66,80016,53928],{"class":76},[66,80018,53597],{"class":53084},[66,80020,53091],{"class":76},[66,80022,80023],{"class":68,"line":80},[66,80024,80025],{"class":76},"    const arr = ['red', 'green', 'pink']\n",[66,80027,80028],{"class":68,"line":112},[66,80029,80030],{"class":76},"    const result = arr.forEach(function (item, index) {\n",[66,80032,80033],{"class":68,"line":129},[66,80034,80035],{"class":76},"      console.log(item)\n",[66,80037,80038],{"class":68,"line":138},[66,80039,80040],{"class":76},"      console.log(index)\n",[66,80042,80043],{"class":68,"line":227},[66,80044,35249],{"class":76},[66,80046,80047],{"class":68,"line":236},[66,80048,80049],{"class":76},"    console.log(result)\n",[66,80051,80052,80054,80056],{"class":68,"line":241},[66,80053,54199],{"class":76},[66,80055,53597],{"class":53084},[66,80057,53091],{"class":76},[19,80059,80060],{},[3304,80061],{"alt":62,"src":80062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,80064,80066],{"id":80065},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,80068,80069],{},[3304,80070],{"alt":62,"src":80071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,80073,80074],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[57,80076,80078],{"className":54849,"code":80077,"language":54851,"meta":62,"style":62},"\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",[23,80079,80080,80088,80096,80101,80106,80110,80114,80119,80123,80128,80136],{"__ignoreMap":62},[66,80081,80082,80084,80086],{"class":68,"line":69},[66,80083,413],{"class":76},[66,80085,53584],{"class":53084},[66,80087,53091],{"class":76},[66,80089,80090,80092,80094],{"class":68,"line":80},[66,80091,53928],{"class":76},[66,80093,53597],{"class":53084},[66,80095,53091],{"class":76},[66,80097,80098],{"class":68,"line":112},[66,80099,80100],{"class":76},"    const arr = [10, 20, 30]\n",[66,80102,80103],{"class":68,"line":129},[66,80104,80105],{"class":76},"    const newArr = arr.filter(function (item, index) {\n",[66,80107,80108],{"class":68,"line":138},[66,80109,80035],{"class":76},[66,80111,80112],{"class":68,"line":227},[66,80113,80040],{"class":76},[66,80115,80116],{"class":68,"line":236},[66,80117,80118],{"class":76},"      return item >= 20\n",[66,80120,80121],{"class":68,"line":241},[66,80122,35249],{"class":76},[66,80124,80125],{"class":68,"line":372},[66,80126,80127],{"class":76},"    console.log(newArr)\n",[66,80129,80130,80132,80134],{"class":68,"line":377},[66,80131,54199],{"class":76},[66,80133,53597],{"class":53084},[66,80135,53091],{"class":76},[66,80137,80138,80140,80142],{"class":68,"line":392},[66,80139,53569],{"class":76},[66,80141,53584],{"class":53084},[66,80143,53091],{"class":76},[19,80145,80146],{},"这个也可以写成箭头函数：",[57,80148,80150],{"className":52417,"code":80149,"language":52419,"meta":62,"style":62},"const newArr = arr.filter(item => item >= 20)\n",[23,80151,80152],{"__ignoreMap":62},[66,80153,80154],{"class":68,"line":69},[66,80155,80149],{"class":76},[14,80157,80159],{"id":80158},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,80161,80162],{},[3304,80163],{"alt":62,"src":80164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,80166,80167],{},"步骤：",[19,80169,80170],{},"①：渲染页面模块",[2982,80172,80173,80176],{},[34,80174,80175],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[34,80177,80178],{},"用forEach+字符串的形式",[19,80180,80181],{},"②：点击不同需求，显示不同页面内容",[2982,80183,80184,80187,80190,80193,80196],{},[34,80185,80186],{},"点击采取事件委托方式 .filter",[34,80188,80189],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[34,80191,80192],{},"筛选条件是根据点击的 data-index 来判断",[34,80194,80195],{},"可以使用对象解构，把事件对象解构",[34,80197,80198],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[57,80200,80202],{"className":52417,"code":80201,"language":52419,"meta":62,"style":62},"\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",[23,80203,80204,80214,80228,80232,80240,80254,80274,80286,80294,80300,80310,80320,80330,80334,80338,80344,80357,80369,80379,80391,80395,80399,80406,80419,80431,80448,80466,80479,80483,80487,80499,80509,80513,80517,80524,80565,80592,80602,80606,80610,80618,80630,80634,80638,80646,80658,80670,80681,80685,80689,80698,80710,80721,80725,80729,80738,80750,80762,80766,80770,80777,80787,80799,80811,80826,80830,80834,80842,80858,80868,80878,80888,80900,80904,80908,80918,80929,80939,80943,80951,80959,80963,80971,80986,81012,81037,81062,81081,81089,81103,81108,81113,81118,81123,81128,81136,81144,81149,81160,81165,81175,81185,81195,81205,81209,81213,81222,81231,81240,81249,81253,81257,81266,81275,81284,81293,81297,81301,81310,81319,81328,81337,81341,81345,81354,81363,81372,81381,81385,81389,81398,81407,81416,81425,81429,81433,81442,81451,81460,81469,81473,81477,81486,81495,81503,81512,81516,81520,81524,81529,81541,81546,81558,81562,81579,81607,81616,81621,81631,81641,81650,81655,81660,81664,81669,81686,81690,81695,81703,81708,81735,81740,81760,81765,81777,81782,81787,81792,81803,81817,81854,81872,81905,81922,81946,81950,81955,81961,81965,81969,81973,81981,81989,81993],{"__ignoreMap":62},[66,80205,80206,80208,80210,80212],{"class":68,"line":69},[66,80207,53081],{"class":76},[66,80209,53085],{"class":53084},[66,80211,53088],{"class":3793},[66,80213,53091],{"class":76},[66,80215,80216,80218,80220,80222,80224,80226],{"class":68,"line":80},[66,80217,413],{"class":76},[66,80219,52419],{"class":53084},[66,80221,53100],{"class":3793},[66,80223,99],{"class":76},[66,80225,53105],{"class":356},[66,80227,53091],{"class":76},[66,80229,80230],{"class":68,"line":112},[66,80231,109],{"emptyLinePlaceholder":108},[66,80233,80234,80236,80238],{"class":68,"line":129},[66,80235,413],{"class":76},[66,80237,53118],{"class":53084},[66,80239,53091],{"class":76},[66,80241,80242,80244,80246,80248,80250,80252],{"class":68,"line":138},[66,80243,53928],{"class":76},[66,80245,53128],{"class":53084},[66,80247,53131],{"class":3793},[66,80249,99],{"class":76},[66,80251,53136],{"class":356},[66,80253,53091],{"class":76},[66,80255,80256,80258,80260,80262,80264,80266,80268,80270,80272],{"class":68,"line":227},[66,80257,53928],{"class":76},[66,80259,53128],{"class":53084},[66,80261,16724],{"class":3793},[66,80263,99],{"class":76},[66,80265,53175],{"class":356},[66,80267,53155],{"class":3793},[66,80269,99],{"class":76},[66,80271,53182],{"class":356},[66,80273,53091],{"class":76},[66,80275,80276,80278,80280,80282,80284],{"class":68,"line":236},[66,80277,53928],{"class":76},[66,80279,53191],{"class":53084},[66,80281,53194],{"class":76},[66,80283,53191],{"class":53084},[66,80285,53091],{"class":76},[66,80287,80288,80290,80292],{"class":68,"line":241},[66,80289,53928],{"class":76},[66,80291,1903],{"class":53084},[66,80293,53091],{"class":76},[66,80295,80296,80298],{"class":68,"line":372},[66,80297,8214],{"class":53084},[66,80299,17375],{"class":76},[66,80301,80302,80304,80306,80308],{"class":68,"line":377},[66,80303,56476],{"class":102},[66,80305,53221],{"class":76},[66,80307,2183],{"class":102},[66,80309,3135],{"class":76},[66,80311,80312,80314,80316,80318],{"class":68,"line":392},[66,80313,56487],{"class":102},[66,80315,53221],{"class":76},[66,80317,2183],{"class":102},[66,80319,3135],{"class":76},[66,80321,80322,80324,80326,80328],{"class":68,"line":405},[66,80323,74375],{"class":102},[66,80325,53221],{"class":76},[66,80327,62285],{"class":102},[66,80329,3135],{"class":76},[66,80331,80332],{"class":68,"line":418},[66,80333,4013],{"class":76},[66,80335,80336],{"class":68,"line":430},[66,80337,109],{"emptyLinePlaceholder":108},[66,80339,80340,80342],{"class":68,"line":438},[66,80341,63902],{"class":3793},[66,80343,17375],{"class":76},[66,80345,80346,80348,80350,80353,80355],{"class":68,"line":465},[66,80347,56552],{"class":102},[66,80349,53221],{"class":76},[66,80351,80352],{"class":102},"990",[66,80354,53276],{"class":72},[66,80356,3135],{"class":76},[66,80358,80359,80361,80363,80365,80367],{"class":68,"line":1805},[66,80360,56487],{"class":102},[66,80362,53221],{"class":76},[66,80364,2183],{"class":102},[66,80366,53340],{"class":102},[66,80368,3135],{"class":76},[66,80370,80371,80373,80375,80377],{"class":68,"line":1817},[66,80372,56790],{"class":102},[66,80374,53221],{"class":76},[66,80376,53261],{"class":102},[66,80378,3135],{"class":76},[66,80380,80381,80384,80386,80389],{"class":68,"line":1822},[66,80382,80383],{"class":102},"      flex-wrap",[66,80385,53221],{"class":76},[66,80387,80388],{"class":102},"wrap",[66,80390,3135],{"class":76},[66,80392,80393],{"class":68,"line":1829},[66,80394,4013],{"class":76},[66,80396,80397],{"class":68,"line":3529},[66,80398,109],{"emptyLinePlaceholder":108},[66,80400,80401,80404],{"class":68,"line":3557},[66,80402,80403],{"class":3793},"    .item",[66,80405,17375],{"class":76},[66,80407,80408,80410,80412,80415,80417],{"class":68,"line":3562},[66,80409,56552],{"class":102},[66,80411,53221],{"class":76},[66,80413,80414],{"class":102},"240",[66,80416,53276],{"class":72},[66,80418,3135],{"class":76},[66,80420,80421,80423,80425,80427,80429],{"class":68,"line":3579},[66,80422,63779],{"class":102},[66,80424,53221],{"class":76},[66,80426,790],{"class":102},[66,80428,53276],{"class":72},[66,80430,3135],{"class":76},[66,80432,80433,80435,80437,80439,80441,80444,80446],{"class":68,"line":3584},[66,80434,56476],{"class":102},[66,80436,53221],{"class":76},[66,80438,2679],{"class":102},[66,80440,53276],{"class":72},[66,80442,80443],{"class":102}," 30",[66,80445,53276],{"class":72},[66,80447,3135],{"class":76},[66,80449,80450,80452,80454,80456,80459,80462,80464],{"class":68,"line":3589},[66,80451,63639],{"class":102},[66,80453,53221],{"class":76},[66,80455,29922],{"class":102},[66,80457,80458],{"class":102}," ease",[66,80460,80461],{"class":102}," .5",[66,80463,2674],{"class":72},[66,80465,3135],{"class":76},[66,80467,80468,80471,80473,80475,80477],{"class":68,"line":3594},[66,80469,80470],{"class":102},"      margin-bottom",[66,80472,53221],{"class":76},[66,80474,2679],{"class":102},[66,80476,53276],{"class":72},[66,80478,3135],{"class":76},[66,80480,80481],{"class":68,"line":3608},[66,80482,4013],{"class":76},[66,80484,80485],{"class":68,"line":3613},[66,80486,109],{"emptyLinePlaceholder":108},[66,80488,80489,80492,80494,80497],{"class":68,"line":4401},[66,80490,80491],{"class":3793},"    .item:nth-child",[66,80493,348],{"class":76},[66,80495,80496],{"class":102},"4n",[66,80498,14247],{"class":76},[66,80500,80501,80503,80505,80507],{"class":68,"line":4415},[66,80502,63779],{"class":102},[66,80504,53221],{"class":76},[66,80506,2183],{"class":102},[66,80508,3135],{"class":76},[66,80510,80511],{"class":68,"line":4423},[66,80512,4013],{"class":76},[66,80514,80515],{"class":68,"line":4428},[66,80516,109],{"emptyLinePlaceholder":108},[66,80518,80519,80522],{"class":68,"line":4434},[66,80520,80521],{"class":3793},"    .item:hover",[66,80523,17375],{"class":76},[66,80525,80526,80529,80531,80533,80535,80537,80539,80541,80543,80546,80548,80550,80552,80554,80556,80558,80560,80563],{"class":68,"line":4440},[66,80527,80528],{"class":102},"      box-shadow",[66,80530,53221],{"class":76},[66,80532,2183],{"class":102},[66,80534,53276],{"class":72},[66,80536,962],{"class":102},[66,80538,53276],{"class":72},[66,80540,123],{"class":102},[66,80542,53276],{"class":72},[66,80544,80545],{"class":102}," rgba",[66,80547,348],{"class":76},[66,80549,2183],{"class":102},[66,80551,307],{"class":76},[66,80553,2183],{"class":102},[66,80555,307],{"class":76},[66,80557,2183],{"class":102},[66,80559,307],{"class":76},[66,80561,80562],{"class":102},".2",[66,80564,4543],{"class":76},[66,80566,80567,80570,80572,80575,80577,80579,80581,80584,80586,80588,80590],{"class":68,"line":4445},[66,80568,80569],{"class":102},"      transform",[66,80571,53221],{"class":76},[66,80573,80574],{"class":102},"translate3d",[66,80576,348],{"class":76},[66,80578,2183],{"class":102},[66,80580,307],{"class":76},[66,80582,80583],{"class":102},"-4",[66,80585,53276],{"class":72},[66,80587,307],{"class":76},[66,80589,2183],{"class":102},[66,80591,4543],{"class":76},[66,80593,80594,80596,80598,80600],{"class":68,"line":9759},[66,80595,63804],{"class":102},[66,80597,53221],{"class":76},[66,80599,63809],{"class":102},[66,80601,3135],{"class":76},[66,80603,80604],{"class":68,"line":9783},[66,80605,4013],{"class":76},[66,80607,80608],{"class":68,"line":9788},[66,80609,109],{"emptyLinePlaceholder":108},[66,80611,80612,80614,80616],{"class":68,"line":9794},[66,80613,80403],{"class":3793},[66,80615,57396],{"class":53084},[66,80617,17375],{"class":76},[66,80619,80620,80622,80624,80626,80628],{"class":68,"line":9821},[66,80621,56552],{"class":102},[66,80623,53221],{"class":76},[66,80625,310],{"class":102},[66,80627,953],{"class":72},[66,80629,3135],{"class":76},[66,80631,80632],{"class":68,"line":9826},[66,80633,4013],{"class":76},[66,80635,80636],{"class":68,"line":9832},[66,80637,109],{"emptyLinePlaceholder":108},[66,80639,80640,80642,80644],{"class":68,"line":9844},[66,80641,80403],{"class":3793},[66,80643,64083],{"class":3793},[66,80645,17375],{"class":76},[66,80647,80648,80650,80652,80654,80656],{"class":68,"line":9856},[66,80649,56703],{"class":102},[66,80651,53221],{"class":76},[66,80653,2629],{"class":102},[66,80655,53276],{"class":72},[66,80657,3135],{"class":76},[66,80659,80660,80662,80664,80666,80668],{"class":68,"line":9868},[66,80661,80470],{"class":102},[66,80663,53221],{"class":76},[66,80665,790],{"class":102},[66,80667,53276],{"class":72},[66,80669,3135],{"class":76},[66,80671,80672,80674,80676,80679],{"class":68,"line":11523},[66,80673,59196],{"class":102},[66,80675,53221],{"class":76},[66,80677,80678],{"class":102},"#666",[66,80680,3135],{"class":76},[66,80682,80683],{"class":68,"line":11548},[66,80684,4013],{"class":76},[66,80686,80687],{"class":68,"line":11571},[66,80688,109],{"emptyLinePlaceholder":108},[66,80690,80691,80693,80696],{"class":68,"line":11595},[66,80692,80403],{"class":3793},[66,80694,80695],{"class":3793}," .price",[66,80697,17375],{"class":76},[66,80699,80700,80702,80704,80706,80708],{"class":68,"line":11600},[66,80701,56703],{"class":102},[66,80703,53221],{"class":76},[66,80705,2729],{"class":102},[66,80707,53276],{"class":72},[66,80709,3135],{"class":76},[66,80711,80712,80714,80716,80719],{"class":68,"line":11605},[66,80713,59196],{"class":102},[66,80715,53221],{"class":76},[66,80717,80718],{"class":102},"firebrick",[66,80720,3135],{"class":76},[66,80722,80723],{"class":68,"line":11610},[66,80724,4013],{"class":76},[66,80726,80727],{"class":68,"line":11619},[66,80728,109],{"emptyLinePlaceholder":108},[66,80730,80731,80733,80736],{"class":68,"line":11624},[66,80732,80403],{"class":3793},[66,80734,80735],{"class":3793}," .price::before",[66,80737,17375],{"class":76},[66,80739,80740,80743,80745,80748],{"class":68,"line":11630},[66,80741,80742],{"class":102},"      content",[66,80744,53221],{"class":76},[66,80746,80747],{"class":356},"'￥'",[66,80749,3135],{"class":76},[66,80751,80752,80754,80756,80758,80760],{"class":68,"line":11651},[66,80753,56703],{"class":102},[66,80755,53221],{"class":76},[66,80757,2528],{"class":102},[66,80759,53276],{"class":72},[66,80761,3135],{"class":76},[66,80763,80764],{"class":68,"line":11657},[66,80765,4013],{"class":76},[66,80767,80768],{"class":68,"line":11671},[66,80769,109],{"emptyLinePlaceholder":108},[66,80771,80772,80775],{"class":68,"line":11677},[66,80773,80774],{"class":3793},"    .filter",[66,80776,17375],{"class":76},[66,80778,80779,80781,80783,80785],{"class":68,"line":11704},[66,80780,56790],{"class":102},[66,80782,53221],{"class":76},[66,80784,53261],{"class":102},[66,80786,3135],{"class":76},[66,80788,80789,80791,80793,80795,80797],{"class":68,"line":11713},[66,80790,56552],{"class":102},[66,80792,53221],{"class":76},[66,80794,80352],{"class":102},[66,80796,53276],{"class":72},[66,80798,3135],{"class":76},[66,80800,80801,80803,80805,80807,80809],{"class":68,"line":11719},[66,80802,56487],{"class":102},[66,80804,53221],{"class":76},[66,80806,2183],{"class":102},[66,80808,53340],{"class":102},[66,80810,3135],{"class":76},[66,80812,80813,80815,80817,80819,80821,80823],{"class":68,"line":11727},[66,80814,56476],{"class":102},[66,80816,53221],{"class":76},[66,80818,2635],{"class":102},[66,80820,53276],{"class":72},[66,80822,80443],{"class":102},[66,80824,80825],{"class":72},"px\n",[66,80827,80828],{"class":68,"line":11732},[66,80829,4013],{"class":76},[66,80831,80832],{"class":68,"line":18407},[66,80833,109],{"emptyLinePlaceholder":108},[66,80835,80836,80838,80840],{"class":68,"line":18413},[66,80837,80774],{"class":3793},[66,80839,3240],{"class":53084},[66,80841,17375],{"class":76},[66,80843,80844,80846,80848,80850,80852,80854,80856],{"class":68,"line":18436},[66,80845,56476],{"class":102},[66,80847,53221],{"class":76},[66,80849,790],{"class":102},[66,80851,53276],{"class":72},[66,80853,10761],{"class":102},[66,80855,53276],{"class":72},[66,80857,3135],{"class":76},[66,80859,80860,80862,80864,80866],{"class":68,"line":18442},[66,80861,63500],{"class":102},[66,80863,53221],{"class":76},[66,80865,63597],{"class":102},[66,80867,3135],{"class":76},[66,80869,80870,80872,80874,80876],{"class":68,"line":18465},[66,80871,59196],{"class":102},[66,80873,53221],{"class":76},[66,80875,80678],{"class":102},[66,80877,3135],{"class":76},[66,80879,80880,80882,80884,80886],{"class":68,"line":18479},[66,80881,65749],{"class":102},[66,80883,53221],{"class":76},[66,80885,56518],{"class":102},[66,80887,3135],{"class":76},[66,80889,80890,80892,80894,80896,80898],{"class":68,"line":18499},[66,80891,63529],{"class":102},[66,80893,53221],{"class":76},[66,80895,2679],{"class":102},[66,80897,53276],{"class":72},[66,80899,3135],{"class":76},[66,80901,80902],{"class":68,"line":18505},[66,80903,4013],{"class":76},[66,80905,80906],{"class":68,"line":18516},[66,80907,109],{"emptyLinePlaceholder":108},[66,80909,80910,80912,80914,80916],{"class":68,"line":18539},[66,80911,80774],{"class":3793},[66,80913,3240],{"class":53084},[66,80915,63679],{"class":3793},[66,80917,17375],{"class":76},[66,80919,80920,80922,80924,80927],{"class":68,"line":18561},[66,80921,56665],{"class":102},[66,80923,53221],{"class":76},[66,80925,80926],{"class":102},"#05943c",[66,80928,3135],{"class":76},[66,80930,80931,80933,80935,80937],{"class":68,"line":18566},[66,80932,59196],{"class":102},[66,80934,53221],{"class":76},[66,80936,62621],{"class":102},[66,80938,3135],{"class":76},[66,80940,80941],{"class":68,"line":18572},[66,80942,4013],{"class":76},[66,80944,80945,80947,80949],{"class":68,"line":18586},[66,80946,54199],{"class":76},[66,80948,1903],{"class":53084},[66,80950,53091],{"class":76},[66,80952,80953,80955,80957],{"class":68,"line":18599},[66,80954,53569],{"class":76},[66,80956,53118],{"class":53084},[66,80958,53091],{"class":76},[66,80960,80961],{"class":68,"line":18604},[66,80962,109],{"emptyLinePlaceholder":108},[66,80964,80965,80967,80969],{"class":68,"line":18618},[66,80966,413],{"class":76},[66,80968,53584],{"class":53084},[66,80970,53091],{"class":76},[66,80972,80973,80975,80977,80979,80981,80984],{"class":68,"line":18623},[66,80974,53928],{"class":76},[66,80976,53395],{"class":53084},[66,80978,55268],{"class":3793},[66,80980,99],{"class":76},[66,80982,80983],{"class":356},"\"filter\"",[66,80985,53091],{"class":76},[66,80987,80988,80990,80992,80994,80996,80998,81001,81003,81005,81008,81010],{"class":68,"line":18629},[66,80989,53125],{"class":76},[66,80991,2229],{"class":53084},[66,80993,62836],{"class":3793},[66,80995,99],{"class":76},[66,80997,62841],{"class":356},[66,80999,81000],{"class":3793}," data-index",[66,81002,99],{"class":76},[66,81004,5496],{"class":356},[66,81006,81007],{"class":76},">0-100元\u003C\u002F",[66,81009,2229],{"class":53084},[66,81011,53091],{"class":76},[66,81013,81014,81016,81018,81020,81022,81024,81026,81028,81030,81033,81035],{"class":68,"line":18634},[66,81015,53125],{"class":76},[66,81017,2229],{"class":53084},[66,81019,62836],{"class":3793},[66,81021,99],{"class":76},[66,81023,62841],{"class":356},[66,81025,81000],{"class":3793},[66,81027,99],{"class":76},[66,81029,5519],{"class":356},[66,81031,81032],{"class":76},">100-300元\u003C\u002F",[66,81034,2229],{"class":53084},[66,81036,53091],{"class":76},[66,81038,81039,81041,81043,81045,81047,81049,81051,81053,81055,81058,81060],{"class":68,"line":18648},[66,81040,53125],{"class":76},[66,81042,2229],{"class":53084},[66,81044,62836],{"class":3793},[66,81046,99],{"class":76},[66,81048,62841],{"class":356},[66,81050,81000],{"class":3793},[66,81052,99],{"class":76},[66,81054,5532],{"class":356},[66,81056,81057],{"class":76},">300元以上\u003C\u002F",[66,81059,2229],{"class":53084},[66,81061,53091],{"class":76},[66,81063,81064,81066,81068,81070,81072,81074,81077,81079],{"class":68,"line":18653},[66,81065,53125],{"class":76},[66,81067,2229],{"class":53084},[66,81069,62836],{"class":3793},[66,81071,99],{"class":76},[66,81073,62841],{"class":356},[66,81075,81076],{"class":76},">全部区间\u003C\u002F",[66,81078,2229],{"class":53084},[66,81080,53091],{"class":76},[66,81082,81083,81085,81087],{"class":68,"line":18658},[66,81084,54199],{"class":76},[66,81086,53395],{"class":53084},[66,81088,53091],{"class":76},[66,81090,81091,81093,81095,81097,81099,81101],{"class":68,"line":18672},[66,81092,53928],{"class":76},[66,81094,53395],{"class":53084},[66,81096,55268],{"class":3793},[66,81098,99],{"class":76},[66,81100,64387],{"class":356},[66,81102,53091],{"class":76},[66,81104,81105],{"class":68,"line":18684},[66,81106,81107],{"class":758},"    \u003C!-- \u003Cdiv class=\"item\">\n",[66,81109,81110],{"class":68,"line":18689},[66,81111,81112],{"class":758},"      \u003Cimg src=\"\" alt=\"\">\n",[66,81114,81115],{"class":68,"line":18702},[66,81116,81117],{"class":758},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[66,81119,81120],{"class":68,"line":18707},[66,81121,81122],{"class":758},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[66,81124,81125],{"class":68,"line":18712},[66,81126,81127],{"class":758},"    \u003C\u002Fdiv> -->\n",[66,81129,81130,81132,81134],{"class":68,"line":18717},[66,81131,54199],{"class":76},[66,81133,53395],{"class":53084},[66,81135,53091],{"class":76},[66,81137,81138,81140,81142],{"class":68,"line":18730},[66,81139,53928],{"class":76},[66,81141,53597],{"class":53084},[66,81143,53091],{"class":76},[66,81145,81146],{"class":68,"line":18735},[66,81147,81148],{"class":758},"    \u002F\u002F 2. 初始化数据\n",[66,81150,81151,81153,81156,81158],{"class":68,"line":34423},[66,81152,13027],{"class":72},[66,81154,81155],{"class":102}," goodsList",[66,81157,15369],{"class":72},[66,81159,57228],{"class":76},[66,81161,81162],{"class":68,"line":34429},[66,81163,81164],{"class":76},"      {\n",[66,81166,81167,81170,81173],{"class":68,"line":34435},[66,81168,81169],{"class":76},"        id: ",[66,81171,81172],{"class":356},"'4001172'",[66,81174,33259],{"class":76},[66,81176,81177,81180,81183],{"class":68,"line":34441},[66,81178,81179],{"class":76},"        name: ",[66,81181,81182],{"class":356},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[66,81184,33259],{"class":76},[66,81186,81187,81190,81193],{"class":68,"line":34447},[66,81188,81189],{"class":76},"        price: ",[66,81191,81192],{"class":356},"'289.00'",[66,81194,33259],{"class":76},[66,81196,81197,81200,81203],{"class":68,"line":34458},[66,81198,81199],{"class":76},"        picture: ",[66,81201,81202],{"class":356},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[66,81204,33259],{"class":76},[66,81206,81207],{"class":68,"line":34464},[66,81208,79671],{"class":76},[66,81210,81211],{"class":68,"line":34484},[66,81212,81164],{"class":76},[66,81214,81215,81217,81220],{"class":68,"line":34490},[66,81216,81169],{"class":76},[66,81218,81219],{"class":356},"'4001594'",[66,81221,33259],{"class":76},[66,81223,81224,81226,81229],{"class":68,"line":34501},[66,81225,81179],{"class":76},[66,81227,81228],{"class":356},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[66,81230,33259],{"class":76},[66,81232,81233,81235,81238],{"class":68,"line":34507},[66,81234,81189],{"class":76},[66,81236,81237],{"class":356},"'288.00'",[66,81239,33259],{"class":76},[66,81241,81242,81244,81247],{"class":68,"line":34513},[66,81243,81199],{"class":76},[66,81245,81246],{"class":356},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[66,81248,33259],{"class":76},[66,81250,81251],{"class":68,"line":34519},[66,81252,79671],{"class":76},[66,81254,81255],{"class":68,"line":34525},[66,81256,81164],{"class":76},[66,81258,81259,81261,81264],{"class":68,"line":34531},[66,81260,81169],{"class":76},[66,81262,81263],{"class":356},"'4001009'",[66,81265,33259],{"class":76},[66,81267,81268,81270,81273],{"class":68,"line":34537},[66,81269,81179],{"class":76},[66,81271,81272],{"class":356},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[66,81274,33259],{"class":76},[66,81276,81277,81279,81282],{"class":68,"line":34543},[66,81278,81189],{"class":76},[66,81280,81281],{"class":356},"'109.00'",[66,81283,33259],{"class":76},[66,81285,81286,81288,81291],{"class":68,"line":34563},[66,81287,81199],{"class":76},[66,81289,81290],{"class":356},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[66,81292,33259],{"class":76},[66,81294,81295],{"class":68,"line":34569},[66,81296,79671],{"class":76},[66,81298,81299],{"class":68,"line":34585},[66,81300,81164],{"class":76},[66,81302,81303,81305,81308],{"class":68,"line":34591},[66,81304,81169],{"class":76},[66,81306,81307],{"class":356},"'4001874'",[66,81309,33259],{"class":76},[66,81311,81312,81314,81317],{"class":68,"line":34605},[66,81313,81179],{"class":76},[66,81315,81316],{"class":356},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[66,81318,33259],{"class":76},[66,81320,81321,81323,81326],{"class":68,"line":34611},[66,81322,81189],{"class":76},[66,81324,81325],{"class":356},"'488.00'",[66,81327,33259],{"class":76},[66,81329,81330,81332,81335],{"class":68,"line":34626},[66,81331,81199],{"class":76},[66,81333,81334],{"class":356},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[66,81336,33259],{"class":76},[66,81338,81339],{"class":68,"line":34632},[66,81340,79671],{"class":76},[66,81342,81343],{"class":68,"line":34641},[66,81344,81164],{"class":76},[66,81346,81347,81349,81352],{"class":68,"line":34647},[66,81348,81169],{"class":76},[66,81350,81351],{"class":356},"'4001649'",[66,81353,33259],{"class":76},[66,81355,81356,81358,81361],{"class":68,"line":34656},[66,81357,81179],{"class":76},[66,81359,81360],{"class":356},"'大师监制龙泉青瓷茶叶罐'",[66,81362,33259],{"class":76},[66,81364,81365,81367,81370],{"class":68,"line":34662},[66,81366,81189],{"class":76},[66,81368,81369],{"class":356},"'139.00'",[66,81371,33259],{"class":76},[66,81373,81374,81376,81379],{"class":68,"line":34668},[66,81375,81199],{"class":76},[66,81377,81378],{"class":356},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[66,81380,33259],{"class":76},[66,81382,81383],{"class":68,"line":34677},[66,81384,79671],{"class":76},[66,81386,81387],{"class":68,"line":34683},[66,81388,81164],{"class":76},[66,81390,81391,81393,81396],{"class":68,"line":34694},[66,81392,81169],{"class":76},[66,81394,81395],{"class":356},"'3997185'",[66,81397,33259],{"class":76},[66,81399,81400,81402,81405],{"class":68,"line":34700},[66,81401,81179],{"class":76},[66,81403,81404],{"class":356},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[66,81406,33259],{"class":76},[66,81408,81409,81411,81414],{"class":68,"line":34719},[66,81410,81189],{"class":76},[66,81412,81413],{"class":356},"'108.00'",[66,81415,33259],{"class":76},[66,81417,81418,81420,81423],{"class":68,"line":34725},[66,81419,81199],{"class":76},[66,81421,81422],{"class":356},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[66,81424,33259],{"class":76},[66,81426,81427],{"class":68,"line":34736},[66,81428,79671],{"class":76},[66,81430,81431],{"class":68,"line":34742},[66,81432,81164],{"class":76},[66,81434,81435,81437,81440],{"class":68,"line":34762},[66,81436,81169],{"class":76},[66,81438,81439],{"class":356},"'3997403'",[66,81441,33259],{"class":76},[66,81443,81444,81446,81449],{"class":68,"line":34778},[66,81445,81179],{"class":76},[66,81447,81448],{"class":356},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[66,81450,33259],{"class":76},[66,81452,81453,81455,81458],{"class":68,"line":34784},[66,81454,81189],{"class":76},[66,81456,81457],{"class":356},"'100.00'",[66,81459,33259],{"class":76},[66,81461,81462,81464,81467],{"class":68,"line":34798},[66,81463,81199],{"class":76},[66,81465,81466],{"class":356},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[66,81468,33259],{"class":76},[66,81470,81471],{"class":68,"line":34804},[66,81472,79671],{"class":76},[66,81474,81475],{"class":68,"line":34810},[66,81476,81164],{"class":76},[66,81478,81479,81481,81484],{"class":68,"line":34821},[66,81480,81169],{"class":76},[66,81482,81483],{"class":356},"'3998274'",[66,81485,33259],{"class":76},[66,81487,81488,81490,81493],{"class":68,"line":34827},[66,81489,81179],{"class":76},[66,81491,81492],{"class":356},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[66,81494,33259],{"class":76},[66,81496,81497,81499,81501],{"class":68,"line":34833},[66,81498,81189],{"class":76},[66,81500,81369],{"class":356},[66,81502,33259],{"class":76},[66,81504,81505,81507,81510],{"class":68,"line":34843},[66,81506,81199],{"class":76},[66,81508,81509],{"class":356},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[66,81511,33259],{"class":76},[66,81513,81514],{"class":68,"line":34849},[66,81515,79671],{"class":76},[66,81517,81518],{"class":68,"line":34860},[66,81519,54891],{"class":76},[66,81521,81522],{"class":68,"line":34866},[66,81523,109],{"emptyLinePlaceholder":108},[66,81525,81526],{"class":68,"line":34876},[66,81527,81528],{"class":758},"    \u002F\u002F 1.渲染函数\n",[66,81530,81531,81533,81535,81537,81539],{"class":68,"line":34881},[66,81532,71863],{"class":72},[66,81534,71866],{"class":3793},[66,81536,348],{"class":76},[66,81538,5697],{"class":1234},[66,81540,14247],{"class":76},[66,81542,81543],{"class":68,"line":34887},[66,81544,81545],{"class":758},"      \u002F\u002F 声明空字符串\n",[66,81547,81548,81551,81554,81556],{"class":68,"line":34936},[66,81549,81550],{"class":72},"      let",[66,81552,81553],{"class":76}," str ",[66,81555,99],{"class":72},[66,81557,71883],{"class":356},[66,81559,81560],{"class":68,"line":34983},[66,81561,71888],{"class":758},[66,81563,81564,81566,81569,81571,81574,81577],{"class":68,"line":34988},[66,81565,59787],{"class":76},[66,81567,81568],{"class":3793},"forEach",[66,81570,348],{"class":76},[66,81572,81573],{"class":1234},"item",[66,81575,81576],{"class":72}," =>",[66,81578,17375],{"class":76},[66,81580,81581,81583,81586,81589,81591,81594,81596,81599,81602,81604],{"class":68,"line":34994},[66,81582,63049],{"class":72},[66,81584,81585],{"class":76}," { ",[66,81587,81588],{"class":102},"name",[66,81590,307],{"class":76},[66,81592,81593],{"class":102},"price",[66,81595,307],{"class":76},[66,81597,81598],{"class":102},"picture",[66,81600,81601],{"class":76}," } ",[66,81603,99],{"class":72},[66,81605,81606],{"class":76}," item\n",[66,81608,81609,81612,81614],{"class":68,"line":35013},[66,81610,81611],{"class":76},"        str ",[66,81613,144],{"class":72},[66,81615,71947],{"class":356},[66,81617,81618],{"class":68,"line":35019},[66,81619,81620],{"class":356},"          \u003Cdiv class=\"item\">\n",[66,81622,81623,81626,81628],{"class":68,"line":35038},[66,81624,81625],{"class":356},"            \u003Cimg src=\"${",[66,81627,81598],{"class":76},[66,81629,81630],{"class":356},"}\" alt=\"\">\n",[66,81632,81633,81636,81638],{"class":68,"line":35044},[66,81634,81635],{"class":356},"            \u003Cp class=\"name\">${",[66,81637,81588],{"class":76},[66,81639,81640],{"class":356},"}\u003C\u002Fp>\n",[66,81642,81643,81646,81648],{"class":68,"line":35050},[66,81644,81645],{"class":356},"            \u003Cp class=\"price\">${",[66,81647,81593],{"class":76},[66,81649,81640],{"class":356},[66,81651,81652],{"class":68,"line":35060},[66,81653,81654],{"class":356},"          \u003C\u002Fdiv>\n",[66,81656,81657],{"class":68,"line":35065},[66,81658,81659],{"class":356},"        `\n",[66,81661,81662],{"class":68,"line":35071},[66,81663,66594],{"class":76},[66,81665,81666],{"class":68,"line":35087},[66,81667,81668],{"class":758},"      \u002F\u002F 追加给List\n",[66,81670,81671,81673,81675,81677,81680,81682,81684],{"class":68,"line":35132},[66,81672,57551],{"class":76},[66,81674,56180],{"class":3793},[66,81676,348],{"class":76},[66,81678,81679],{"class":356},"'.list'",[66,81681,76028],{"class":76},[66,81683,99],{"class":72},[66,81685,75764],{"class":76},[66,81687,81688],{"class":68,"line":35138},[66,81689,4013],{"class":76},[66,81691,81692],{"class":68,"line":35144},[66,81693,81694],{"class":758},"    \u002F\u002F 页面一打开就需要渲染\n",[66,81696,81697,81700],{"class":68,"line":35150},[66,81698,81699],{"class":3793},"    render",[66,81701,81702],{"class":76},"(goodsList)\n",[66,81704,81705],{"class":68,"line":35161},[66,81706,81707],{"class":758},"    \u002F\u002F 2.过滤筛选\n",[66,81709,81710,81712,81714,81716,81719,81721,81723,81725,81727,81729,81731,81733],{"class":68,"line":35167},[66,81711,54189],{"class":76},[66,81713,56180],{"class":3793},[66,81715,348],{"class":76},[66,81717,81718],{"class":356},"'.filter'",[66,81720,32620],{"class":76},[66,81722,59593],{"class":3793},[66,81724,348],{"class":76},[66,81726,59598],{"class":356},[66,81728,307],{"class":76},[66,81730,2068],{"class":1234},[66,81732,81576],{"class":72},[66,81734,17375],{"class":76},[66,81736,81737],{"class":68,"line":35173},[66,81738,81739],{"class":758},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[66,81741,81742,81744,81746,81749,81751,81753,81755,81757],{"class":68,"line":35179},[66,81743,60008],{"class":72},[66,81745,81585],{"class":76},[66,81747,81748],{"class":102},"tagName",[66,81750,307],{"class":76},[66,81752,33330],{"class":102},[66,81754,81601],{"class":76},[66,81756,99],{"class":72},[66,81758,81759],{"class":76}," e.target\n",[66,81761,81762],{"class":68,"line":35197},[66,81763,81764],{"class":758},"      \u002F\u002F 判断\n",[66,81766,81767,81769,81771,81773,81775],{"class":68,"line":35210},[66,81768,56261],{"class":72},[66,81770,68813],{"class":76},[66,81772,56267],{"class":72},[66,81774,70035],{"class":356},[66,81776,14247],{"class":76},[66,81778,81779],{"class":68,"line":35219},[66,81780,81781],{"class":758},"        \u002F\u002F console.log(11)\n",[66,81783,81784],{"class":68,"line":35228},[66,81785,81786],{"class":758},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[66,81788,81789],{"class":68,"line":35237},[66,81790,81791],{"class":758},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[66,81793,81794,81796,81798,81800],{"class":68,"line":35246},[66,81795,53614],{"class":72},[66,81797,53617],{"class":76},[66,81799,99],{"class":72},[66,81801,81802],{"class":76}," goodsList\n",[66,81804,81805,81807,81810,81812,81815],{"class":68,"line":35252},[66,81806,4321],{"class":72},[66,81808,81809],{"class":76}," (dataset.index ",[66,81811,56267],{"class":72},[66,81813,81814],{"class":356}," '1'",[66,81816,14247],{"class":76},[66,81818,81819,81822,81824,81827,81830,81832,81834,81836,81839,81841,81843,81846,81848,81850,81852],{"class":68,"line":35258},[66,81820,81821],{"class":76},"          arr ",[66,81823,99],{"class":72},[66,81825,81826],{"class":76}," goodsList.",[66,81828,81829],{"class":3793},"filter",[66,81831,348],{"class":76},[66,81833,81573],{"class":1234},[66,81835,81576],{"class":72},[66,81837,81838],{"class":76}," item.price ",[66,81840,3540],{"class":72},[66,81842,962],{"class":102},[66,81844,81845],{"class":72}," &&",[66,81847,81838],{"class":76},[66,81849,120],{"class":72},[66,81851,212],{"class":102},[66,81853,313],{"class":76},[66,81855,81856,81859,81861,81863,81865,81867,81870],{"class":68,"line":35266},[66,81857,81858],{"class":76},"        } ",[66,81860,1292],{"class":72},[66,81862,3534],{"class":72},[66,81864,81809],{"class":76},[66,81866,56267],{"class":72},[66,81868,81869],{"class":356}," '2'",[66,81871,14247],{"class":76},[66,81873,81874,81876,81878,81880,81882,81884,81886,81888,81890,81892,81894,81896,81898,81900,81903],{"class":68,"line":35271},[66,81875,81821],{"class":76},[66,81877,99],{"class":72},[66,81879,81826],{"class":76},[66,81881,81829],{"class":3793},[66,81883,348],{"class":76},[66,81885,81573],{"class":1234},[66,81887,81576],{"class":72},[66,81889,81838],{"class":76},[66,81891,3540],{"class":72},[66,81893,212],{"class":102},[66,81895,81845],{"class":72},[66,81897,81838],{"class":76},[66,81899,120],{"class":72},[66,81901,81902],{"class":102}," 300",[66,81904,313],{"class":76},[66,81906,81907,81909,81911,81913,81915,81917,81920],{"class":68,"line":35277},[66,81908,81858],{"class":76},[66,81910,1292],{"class":72},[66,81912,3534],{"class":72},[66,81914,81809],{"class":76},[66,81916,56267],{"class":72},[66,81918,81919],{"class":356}," '3'",[66,81921,14247],{"class":76},[66,81923,81924,81926,81928,81930,81932,81934,81936,81938,81940,81942,81944],{"class":68,"line":35288},[66,81925,81821],{"class":76},[66,81927,99],{"class":72},[66,81929,81826],{"class":76},[66,81931,81829],{"class":3793},[66,81933,348],{"class":76},[66,81935,81573],{"class":1234},[66,81937,81576],{"class":72},[66,81939,81838],{"class":76},[66,81941,3540],{"class":72},[66,81943,81902],{"class":102},[66,81945,313],{"class":76},[66,81947,81948],{"class":68,"line":35294},[66,81949,4353],{"class":76},[66,81951,81952],{"class":68,"line":35314},[66,81953,81954],{"class":758},"        \u002F\u002F 渲染函数\n",[66,81956,81957,81959],{"class":68,"line":35320},[66,81958,72187],{"class":3793},[66,81960,54194],{"class":76},[66,81962,81963],{"class":68,"line":35326},[66,81964,54180],{"class":76},[66,81966,81967],{"class":68,"line":35332},[66,81968,109],{"emptyLinePlaceholder":108},[66,81970,81971],{"class":68,"line":35349},[66,81972,35249],{"class":76},[66,81974,81975,81977,81979],{"class":68,"line":35355},[66,81976,54199],{"class":76},[66,81978,53597],{"class":53084},[66,81980,53091],{"class":76},[66,81982,81983,81985,81987],{"class":68,"line":35361},[66,81984,53569],{"class":76},[66,81986,53584],{"class":53084},[66,81988,53091],{"class":76},[66,81990,81991],{"class":68,"line":35367},[66,81992,109],{"emptyLinePlaceholder":108},[66,81994,81995,81997,81999],{"class":68,"line":35373},[66,81996,53569],{"class":76},[66,81998,52419],{"class":53084},[66,82000,53091],{"class":76},[14,82002,82004],{"id":82003},"_410-深入了解对象","4.10 深入了解对象",[484,82006,82008],{"id":82007},"_4101-创建对象","4.10.1 创建对象",[19,82010,82011],{},[3304,82012],{"alt":62,"src":82013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,82015,82016],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[484,82018,82020],{"id":82019},"_4102-构造函数","4.10.2 构造函数",[19,82022,82023,82026],{},[2141,82024,82025],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,82028,82029,82032],{},[2141,82030,82031],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[57,82034,82036],{"className":52417,"code":82035,"language":52419,"meta":62,"style":62},"\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",[23,82037,82038,82046,82051,82072,82085,82097,82109,82113,82118,82145,82150,82177],{"__ignoreMap":62},[66,82039,82040,82042,82044],{"class":68,"line":69},[66,82041,413],{"class":76},[66,82043,53597],{"class":53084},[66,82045,53091],{"class":76},[66,82047,82048],{"class":68,"line":80},[66,82049,82050],{"class":758},"\u002F\u002F例：\n",[66,82052,82053,82055,82058,82060,82062,82064,82066,82068,82070],{"class":68,"line":112},[66,82054,56230],{"class":72},[66,82056,82057],{"class":3793}," Pig",[66,82059,348],{"class":76},[66,82061,81588],{"class":1234},[66,82063,2362],{"class":76},[66,82065,72000],{"class":1234},[66,82067,2362],{"class":76},[66,82069,72017],{"class":1234},[66,82071,14247],{"class":76},[66,82073,82074,82077,82080,82082],{"class":68,"line":129},[66,82075,82076],{"class":102},"    this",[66,82078,82079],{"class":76},".name",[66,82081,99],{"class":72},[66,82083,82084],{"class":76},"name\n",[66,82086,82087,82089,82092,82094],{"class":68,"line":138},[66,82088,82076],{"class":102},[66,82090,82091],{"class":76},".age",[66,82093,99],{"class":72},[66,82095,82096],{"class":76},"age\n",[66,82098,82099,82101,82104,82106],{"class":68,"line":227},[66,82100,82076],{"class":102},[66,82102,82103],{"class":76},".gender",[66,82105,99],{"class":72},[66,82107,82108],{"class":76},"gender    \n",[66,82110,82111],{"class":68,"line":236},[66,82112,3407],{"class":76},[66,82114,82115],{"class":68,"line":241},[66,82116,82117],{"class":758},"\u002F\u002F创建佩奇对象\n",[66,82119,82120,82122,82125,82127,82129,82131,82134,82136,82138,82140,82143],{"class":68,"line":372},[66,82121,8603],{"class":72},[66,82123,82124],{"class":102}," Peppa",[66,82126,13523],{"class":72},[66,82128,82057],{"class":3793},[66,82130,348],{"class":76},[66,82132,82133],{"class":356},"'佩奇'",[66,82135,2362],{"class":76},[66,82137,519],{"class":102},[66,82139,2362],{"class":76},[66,82141,82142],{"class":356},"'女'",[66,82144,313],{"class":76},[66,82146,82147],{"class":68,"line":377},[66,82148,82149],{"class":758},"\u002F\u002F创建乔治对象\n",[66,82151,82152,82154,82157,82159,82161,82163,82166,82168,82170,82172,82175],{"class":68,"line":392},[66,82153,8603],{"class":72},[66,82155,82156],{"class":102}," George",[66,82158,13523],{"class":72},[66,82160,82057],{"class":3793},[66,82162,348],{"class":76},[66,82164,82165],{"class":356},"'乔治'",[66,82167,2362],{"class":76},[66,82169,1520],{"class":102},[66,82171,2362],{"class":76},[66,82173,82174],{"class":356},"'男'",[66,82176,313],{"class":76},[66,82178,82179,82181,82183],{"class":68,"line":405},[66,82180,53569],{"class":76},[66,82182,53597],{"class":53084},[66,82184,53091],{"class":76},[19,82186,82187],{},[3304,82188],{"alt":62,"src":82189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,82191,82192],{},[3304,82193],{"alt":62,"src":82194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,82196,82197],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,82199,82200],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,82202,82203],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,82205,82206],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,82208,82209],{},"这里用等号是因为：对象.属性=值",[19,82211,82212],{},"①利用对象字面量创建对象",[19,82214,82215],{},"const o={",[19,82217,82218],{},"name:'pink'",[19,82220,82221],{},"} ②利用new Object创建对象",[19,82223,82224],{},"const o=new Object({name:'pink'})",[19,82226,82227],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,82229,82230],{},"构造函数创建对象的执行过程：",[19,82232,82233],{},[3304,82234],{"alt":62,"src":82235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[484,82237,82239],{"id":82238},"_4103-实例成员","4.10.3 实例成员",[19,82241,82242],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[31,82244,82245,82248,82251],{},[34,82246,82247],{},"实例对象的属性和方法即为实例成员",[34,82249,82250],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[34,82252,82253],{},"构造函数创建的实例对象彼此独立互不影响",[484,82255,82257],{"id":82256},"_4104-静态成员","4.10.4 静态成员",[19,82259,82260],{},[3304,82261],{"alt":62,"src":82262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,82264,82265],{},"静态成员有Date.now() Math.PI Math.random()",[19,82267,82268],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,82270,82271],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,82273,82274],{},"function Pig(name) n {",[19,82276,82277],{},"this.name=name",[19,82279,457],{},[19,82281,82282],{},"Pig.eyes=2",[19,82284,82285],{},"Pig.sayHai=function () { console.log(this) }",[19,82287,82288],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,82290,82291],{},"console.log(Pig.eyes) \u002F\u002F2",[19,82293,13138],{},[31,82295,82296,82299,82302,82305,82308],{},[34,82297,82298],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[34,82300,82301],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[34,82303,82304],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[34,82306,82307],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[34,82309,82310],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,82312,82313],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[484,82315,82317],{"id":82316},"_4105-内置构造函数","4.10.5 内置构造函数",[19,82319,82320],{},"内置构造函数包含：",[19,82322,82323],{},[3304,82324],{"alt":62,"src":82325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,82327,82328],{},[3304,82329],{"alt":62,"src":82330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,82332,82333],{},"这些基本数据类型，js对他们进行了包装",[53597,82335,82336],{},"\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",[23801,82338,82340],{"id":82339},"_41051-object","4.10.5.1 Object",[19,82342,82343],{},"Object 是内置的构造函数，用于创建普通对象",[19,82345,82346],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[57,82348,82350],{"className":52417,"code":82349,"language":52419,"meta":62,"style":62},"const user=new Object({name:'小明',age:15})\n",[23,82351,82352],{"__ignoreMap":62},[66,82353,82354],{"class":68,"line":69},[66,82355,82349],{"class":76},[19,82357,82358],{},"三个常用的静态方法：",[24713,82360,82362],{"id":82361},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,82364,82365],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,82367,82368],{},[3304,82369],{"alt":62,"src":82370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,82372,82373],{},[3304,82374],{"alt":62,"src":82375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[57,82377,82379],{"className":54849,"code":82378,"language":54851,"meta":62,"style":62},"\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",[23,82380,82381,82389,82397,82402,82407,82412,82417,82422,82427,82435],{"__ignoreMap":62},[66,82382,82383,82385,82387],{"class":68,"line":69},[66,82384,413],{"class":76},[66,82386,53584],{"class":53084},[66,82388,53091],{"class":76},[66,82390,82391,82393,82395],{"class":68,"line":80},[66,82392,53928],{"class":76},[66,82394,53597],{"class":53084},[66,82396,53091],{"class":76},[66,82398,82399],{"class":68,"line":112},[66,82400,82401],{"class":76},"    const o = { name: 'pink', age: 6 }\n",[66,82403,82404],{"class":68,"line":129},[66,82405,82406],{"class":76},"    \u002F\u002F 获得所有属性名\n",[66,82408,82409],{"class":68,"line":138},[66,82410,82411],{"class":76},"    const arr = Object.keys(o)\n",[66,82413,82414],{"class":68,"line":227},[66,82415,82416],{"class":76},"    console.log(arr)\n",[66,82418,82419],{"class":68,"line":236},[66,82420,82421],{"class":76},"    \u002F\u002F 获得所有属性值\n",[66,82423,82424],{"class":68,"line":241},[66,82425,82426],{"class":76},"    console.log(Object.values(o))\n",[66,82428,82429,82431,82433],{"class":68,"line":372},[66,82430,54199],{"class":76},[66,82432,53597],{"class":53084},[66,82434,53091],{"class":76},[66,82436,82437,82439,82441],{"class":68,"line":377},[66,82438,53569],{"class":76},[66,82440,53584],{"class":53084},[66,82442,53091],{"class":76},[24713,82444,82446],{"id":82445},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,82448,82449],{},"Object.assign(oo,o)",[19,82451,82452],{},"后的东西添加给前 是追加",[19,82454,82455],{},[3304,82456],{"alt":62,"src":82457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,82459,82460],{},[3304,82461],{"alt":62,"src":82462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[57,82464,82466],{"className":54849,"code":82465,"language":54851,"meta":62,"style":62},"\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",[23,82467,82468,82476,82484,82488,82492,82496,82500,82504,82508,82513,82518,82523,82528,82533,82541],{"__ignoreMap":62},[66,82469,82470,82472,82474],{"class":68,"line":69},[66,82471,413],{"class":76},[66,82473,53584],{"class":53084},[66,82475,53091],{"class":76},[66,82477,82478,82480,82482],{"class":68,"line":80},[66,82479,53928],{"class":76},[66,82481,53597],{"class":53084},[66,82483,53091],{"class":76},[66,82485,82486],{"class":68,"line":112},[66,82487,82401],{"class":76},[66,82489,82490],{"class":68,"line":129},[66,82491,82406],{"class":76},[66,82493,82494],{"class":68,"line":138},[66,82495,82411],{"class":76},[66,82497,82498],{"class":68,"line":227},[66,82499,82416],{"class":76},[66,82501,82502],{"class":68,"line":236},[66,82503,82421],{"class":76},[66,82505,82506],{"class":68,"line":241},[66,82507,82426],{"class":76},[66,82509,82510],{"class":68,"line":372},[66,82511,82512],{"class":76},"    const oo = {}\n",[66,82514,82515],{"class":68,"line":377},[66,82516,82517],{"class":76},"    Object.assign(oo, o)\n",[66,82519,82520],{"class":68,"line":392},[66,82521,82522],{"class":76},"    console.log(oo)\n",[66,82524,82525],{"class":68,"line":405},[66,82526,82527],{"class":76},"    Object.assign(o, { gender: '女' })\n",[66,82529,82530],{"class":68,"line":418},[66,82531,82532],{"class":76},"    console.log(o)\n",[66,82534,82535,82537,82539],{"class":68,"line":430},[66,82536,54199],{"class":76},[66,82538,53597],{"class":53084},[66,82540,53091],{"class":76},[66,82542,82543,82545,82547],{"class":68,"line":438},[66,82544,53569],{"class":76},[66,82546,53584],{"class":53084},[66,82548,53091],{"class":76},[19,82550,82551],{},[3304,82552],{"alt":62,"src":82553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[23801,82555,82557],{"id":82556},"_41052-array","4.10.5.2 Array",[19,82559,82560],{},"Array 是内置的构造函数，用于创建数组",[19,82562,82563],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[57,82565,82567],{"className":52417,"code":82566,"language":52419,"meta":62,"style":62},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[23,82568,82569,82574],{"__ignoreMap":62},[66,82570,82571],{"class":68,"line":69},[66,82572,82573],{"class":76},"const arr=new Array(3,5)\n",[66,82575,82576],{"class":68,"line":80},[66,82577,82578],{"class":76},"console.log(arr)  \u002F\u002F[3,5]\n",[19,82580,82581],{},"Array的实例方法，这个方法是实例成员",[19,82583,82584],{},[3304,82585],{"alt":62,"src":82586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[24713,82588,82590],{"id":82589},"_410521-reduce","4.10.5.2.1 reduce",[19,82592,82593],{},[3304,82594],{"alt":62,"src":82595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[57,82597,82599],{"className":54849,"code":82598,"language":54851,"meta":62,"style":62},"\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",[23,82600,82601,82609,82617,82622,82627,82632,82637,82641,82646,82651,82656,82660,82665,82670,82674,82679,82684,82689,82697],{"__ignoreMap":62},[66,82602,82603,82605,82607],{"class":68,"line":69},[66,82604,413],{"class":76},[66,82606,53584],{"class":53084},[66,82608,53091],{"class":76},[66,82610,82611,82613,82615],{"class":68,"line":80},[66,82612,53928],{"class":76},[66,82614,53597],{"class":53084},[66,82616,53091],{"class":76},[66,82618,82619],{"class":68,"line":112},[66,82620,82621],{"class":76},"    const arr = [1, 5, 8]\n",[66,82623,82624],{"class":68,"line":129},[66,82625,82626],{"class":76},"    \u002F\u002F 1.没有初始值\n",[66,82628,82629],{"class":68,"line":138},[66,82630,82631],{"class":76},"    const total = arr.reduce(function (prev, current) {\n",[66,82633,82634],{"class":68,"line":227},[66,82635,82636],{"class":76},"      return prev + current\n",[66,82638,82639],{"class":68,"line":236},[66,82640,35249],{"class":76},[66,82642,82643],{"class":68,"line":241},[66,82644,82645],{"class":76},"    console.log(total)   \u002F\u002F14\n",[66,82647,82648],{"class":68,"line":372},[66,82649,82650],{"class":76},"    \u002F\u002F 2.有初始值\n",[66,82652,82653],{"class":68,"line":377},[66,82654,82655],{"class":76},"    const total1 = arr.reduce(function (prev, current) {\n",[66,82657,82658],{"class":68,"line":392},[66,82659,82636],{"class":76},[66,82661,82662],{"class":68,"line":405},[66,82663,82664],{"class":76},"    }, 10)\n",[66,82666,82667],{"class":68,"line":418},[66,82668,82669],{"class":76},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[66,82671,82672],{"class":68,"line":430},[66,82673,109],{"emptyLinePlaceholder":108},[66,82675,82676],{"class":68,"line":438},[66,82677,82678],{"class":76},"    \u002F\u002F 3.箭头函数写法\n",[66,82680,82681],{"class":68,"line":465},[66,82682,82683],{"class":76},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[66,82685,82686],{"class":68,"line":1805},[66,82687,82688],{"class":76},"    console.log(total2)   \u002F\u002F24\n",[66,82690,82691,82693,82695],{"class":68,"line":1817},[66,82692,54199],{"class":76},[66,82694,53597],{"class":53084},[66,82696,53091],{"class":76},[66,82698,82699,82701,82703],{"class":68,"line":1822},[66,82700,53569],{"class":76},[66,82702,53584],{"class":53084},[66,82704,53091],{"class":76},[19,82706,149],{},[31,82708,82709,82712,82715],{},[34,82710,82711],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[34,82713,82714],{},"每一次循环，把返回值给作为下一次循环的上一次值",[34,82716,82717],{},"如果有起始值，则起始值作为上一次值",[57,82719,82721],{"className":54849,"code":82720,"language":54851,"meta":62,"style":62},"\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",[23,82722,82723,82731,82739,82743,82747,82751,82755,82759,82763,82768,82773,82778,82783,82788,82792,82796,82800,82804,82808,82812,82817,82821,82826,82830,82835,82840,82844,82848,82852,82860],{"__ignoreMap":62},[66,82724,82725,82727,82729],{"class":68,"line":69},[66,82726,413],{"class":76},[66,82728,53584],{"class":53084},[66,82730,53091],{"class":76},[66,82732,82733,82735,82737],{"class":68,"line":80},[66,82734,53928],{"class":76},[66,82736,53597],{"class":53084},[66,82738,53091],{"class":76},[66,82740,82741],{"class":68,"line":112},[66,82742,82621],{"class":76},[66,82744,82745],{"class":68,"line":129},[66,82746,82626],{"class":76},[66,82748,82749],{"class":68,"line":138},[66,82750,82631],{"class":76},[66,82752,82753],{"class":68,"line":227},[66,82754,82636],{"class":76},[66,82756,82757],{"class":68,"line":236},[66,82758,35249],{"class":76},[66,82760,82761],{"class":68,"line":241},[66,82762,82645],{"class":76},[66,82764,82765],{"class":68,"line":372},[66,82766,82767],{"class":76},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[66,82769,82770],{"class":68,"line":377},[66,82771,82772],{"class":76},"    \u002F\u002F     1              5                    6\n",[66,82774,82775],{"class":68,"line":392},[66,82776,82777],{"class":76},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[66,82779,82780],{"class":68,"line":405},[66,82781,82782],{"class":76},"    \u002F\u002F     6              8                    14\n",[66,82784,82785],{"class":68,"line":418},[66,82786,82787],{"class":76},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[66,82789,82790],{"class":68,"line":430},[66,82791,82650],{"class":76},[66,82793,82794],{"class":68,"line":438},[66,82795,82655],{"class":76},[66,82797,82798],{"class":68,"line":465},[66,82799,82636],{"class":76},[66,82801,82802],{"class":68,"line":1805},[66,82803,82664],{"class":76},[66,82805,82806],{"class":68,"line":1817},[66,82807,82669],{"class":76},[66,82809,82810],{"class":68,"line":1822},[66,82811,82767],{"class":76},[66,82813,82814],{"class":68,"line":1829},[66,82815,82816],{"class":76},"    \u002F\u002F     10             1                     11\n",[66,82818,82819],{"class":68,"line":3529},[66,82820,82777],{"class":76},[66,82822,82823],{"class":68,"line":3557},[66,82824,82825],{"class":76},"    \u002F\u002F     11             5                    16\n",[66,82827,82828],{"class":68,"line":3562},[66,82829,82777],{"class":76},[66,82831,82832],{"class":68,"line":3579},[66,82833,82834],{"class":76},"    \u002F\u002F     16             8                    24\n",[66,82836,82837],{"class":68,"line":3584},[66,82838,82839],{"class":76},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[66,82841,82842],{"class":68,"line":3589},[66,82843,82678],{"class":76},[66,82845,82846],{"class":68,"line":3594},[66,82847,82683],{"class":76},[66,82849,82850],{"class":68,"line":3608},[66,82851,82688],{"class":76},[66,82853,82854,82856,82858],{"class":68,"line":3613},[66,82855,54199],{"class":76},[66,82857,53597],{"class":53084},[66,82859,53091],{"class":76},[66,82861,82862,82864,82866],{"class":68,"line":4401},[66,82863,53569],{"class":76},[66,82865,53584],{"class":53084},[66,82867,53091],{"class":76},[24713,82869,82871],{"id":82870},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,82873,82874],{},[3304,82875],{"alt":62,"src":82876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[57,82878,82880],{"className":54849,"code":82879,"language":54851,"meta":62,"style":62},"\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",[23,82881,82882,82890,82898,82903,82908,82913,82918,82922,82927,82932,82937,82942,82947,82952,82956,82961,82965,82970,82978],{"__ignoreMap":62},[66,82883,82884,82886,82888],{"class":68,"line":69},[66,82885,413],{"class":76},[66,82887,53584],{"class":53084},[66,82889,53091],{"class":76},[66,82891,82892,82894,82896],{"class":68,"line":80},[66,82893,53928],{"class":76},[66,82895,53597],{"class":53084},[66,82897,53091],{"class":76},[66,82899,82900],{"class":68,"line":112},[66,82901,82902],{"class":76},"    const arr = [\n",[66,82904,82905],{"class":68,"line":129},[66,82906,82907],{"class":76},"      { name: '张三', salary: 10000 },\n",[66,82909,82910],{"class":68,"line":138},[66,82911,82912],{"class":76},"      { name: '李四', salary: 10000 },\n",[66,82914,82915],{"class":68,"line":227},[66,82916,82917],{"class":76},"      { name: '王五', salary: 10000 }\n",[66,82919,82920],{"class":68,"line":236},[66,82921,54891],{"class":76},[66,82923,82924],{"class":68,"line":241},[66,82925,82926],{"class":76},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[66,82928,82929],{"class":68,"line":372},[66,82930,82931],{"class":76},"    \u002F\u002F prev是累计值\n",[66,82933,82934],{"class":68,"line":377},[66,82935,82936],{"class":76},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[66,82938,82939],{"class":68,"line":392},[66,82940,82941],{"class":76},"    console.log(total)\n",[66,82943,82944],{"class":68,"line":405},[66,82945,82946],{"class":76},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[66,82948,82949],{"class":68,"line":418},[66,82950,82951],{"class":76},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[66,82953,82954],{"class":68,"line":430},[66,82955,82946],{"class":76},[66,82957,82958],{"class":68,"line":438},[66,82959,82960],{"class":76},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[66,82962,82963],{"class":68,"line":465},[66,82964,82946],{"class":76},[66,82966,82967],{"class":68,"line":1805},[66,82968,82969],{"class":76},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[66,82971,82972,82974,82976],{"class":68,"line":1817},[66,82973,54199],{"class":76},[66,82975,53597],{"class":53084},[66,82977,53091],{"class":76},[66,82979,82980,82982,82984],{"class":68,"line":1822},[66,82981,53569],{"class":76},[66,82983,53584],{"class":53084},[66,82985,53091],{"class":76},[24713,82987,82989],{"id":82988},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,82991,82992],{},[3304,82993],{"alt":62,"src":82994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,82996,82997],{},[3304,82998],{"alt":62,"src":82999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[31,83001,83002],{},[34,83003,83004],{},"find()",[19,83006,83007],{},"循环查找，找到第一个就ok",[19,83009,83010],{},[2229,83011,83014],{"href":83012,"rel":83013},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[25668],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[57,83016,83018],{"className":52417,"code":83017,"language":52419,"meta":62,"style":62},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[23,83019,83020,83025,83030],{"__ignoreMap":62},[66,83021,83022],{"class":68,"line":69},[66,83023,83024],{"class":76},"const array1 = [5, 12, 8, 130, 44]\n",[66,83026,83027],{"class":68,"line":80},[66,83028,83029],{"class":76},"const found = array1.find((element) => element > 10)\n",[66,83031,83032],{"class":68,"line":112},[66,83033,83034],{"class":76},"console.log(found)  \u002F\u002F12\n",[19,83036,83037,83039,83040,83045,83046,83049,83050,83052,83053,83058,83059,83061,83062,83064,83065,83067,83068],{},[23,83038,83004],{}," 方法是一个",[2229,83041,83044],{"href":83042,"rel":83043},"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",[25668],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[23,83047,83048],{},"callbackFn"," 函数，直到 ",[23,83051,83048],{}," 返回一个",[2229,83054,83057],{"href":83055,"rel":83056},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[25668],"真值","。然后 ",[23,83060,83004],{}," 返回该元素并停止迭代数组。如果 ",[23,83063,83048],{}," 从未返回真值，则 ",[23,83066,83004],{}," 返回 ",[23,83069,83070],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[57,83072,83074],{"className":54849,"code":83073,"language":54851,"meta":62,"style":62},"\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",[23,83075,83076,83084,83092,83097,83102,83107,83111,83116,83121,83125,83130,83135,83139,83143,83148,83153,83157,83161,83166,83171,83176,83181,83186,83190,83195,83200,83205,83210,83214,83219,83227],{"__ignoreMap":62},[66,83077,83078,83080,83082],{"class":68,"line":69},[66,83079,413],{"class":76},[66,83081,53584],{"class":53084},[66,83083,53091],{"class":76},[66,83085,83086,83088,83090],{"class":68,"line":80},[66,83087,53928],{"class":76},[66,83089,53597],{"class":53084},[66,83091,53091],{"class":76},[66,83093,83094],{"class":68,"line":112},[66,83095,83096],{"class":76},"    const arr = ['red', 'blue', 'green']\n",[66,83098,83099],{"class":68,"line":129},[66,83100,83101],{"class":76},"    const found = arr.find(item => item === 'pink')\n",[66,83103,83104],{"class":68,"line":138},[66,83105,83106],{"class":76},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[66,83108,83109],{"class":68,"line":227},[66,83110,109],{"emptyLinePlaceholder":108},[66,83112,83113],{"class":68,"line":236},[66,83114,83115],{"class":76},"    \u002F\u002F 使用场景，用于查找数据\n",[66,83117,83118],{"class":68,"line":241},[66,83119,83120],{"class":76},"    const arr1 = [\n",[66,83122,83123],{"class":68,"line":372},[66,83124,81164],{"class":76},[66,83126,83127],{"class":68,"line":377},[66,83128,83129],{"class":76},"        name: '小米',\n",[66,83131,83132],{"class":68,"line":392},[66,83133,83134],{"class":76},"        price: 1999\n",[66,83136,83137],{"class":68,"line":405},[66,83138,79671],{"class":76},[66,83140,83141],{"class":68,"line":418},[66,83142,81164],{"class":76},[66,83144,83145],{"class":68,"line":430},[66,83146,83147],{"class":76},"        name: '华为',\n",[66,83149,83150],{"class":68,"line":438},[66,83151,83152],{"class":76},"        price: 3999\n",[66,83154,83155],{"class":68,"line":465},[66,83156,54180],{"class":76},[66,83158,83159],{"class":68,"line":1805},[66,83160,54891],{"class":76},[66,83162,83163],{"class":68,"line":1817},[66,83164,83165],{"class":76},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[66,83167,83168],{"class":68,"line":1822},[66,83169,83170],{"class":76},"    \u002F\u002F const found1 = arr1.find(item => {\n",[66,83172,83173],{"class":68,"line":1829},[66,83174,83175],{"class":76},"    \u002F\u002F   if (item.name === '小米') {\n",[66,83177,83178],{"class":68,"line":3529},[66,83179,83180],{"class":76},"    \u002F\u002F     return item\n",[66,83182,83183],{"class":68,"line":3557},[66,83184,83185],{"class":76},"    \u002F\u002F   }\n",[66,83187,83188],{"class":68,"line":3562},[66,83189,65069],{"class":76},[66,83191,83192],{"class":68,"line":3579},[66,83193,83194],{"class":76},"    \u002F\u002F 另一种写法\n",[66,83196,83197],{"class":68,"line":3584},[66,83198,83199],{"class":76},"    const found1 = arr1.find(item => {\n",[66,83201,83202],{"class":68,"line":3589},[66,83203,83204],{"class":76},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[66,83206,83207],{"class":68,"line":3594},[66,83208,83209],{"class":76},"      return item.name = '小米'\n",[66,83211,83212],{"class":68,"line":3608},[66,83213,35249],{"class":76},[66,83215,83216],{"class":68,"line":3613},[66,83217,83218],{"class":76},"    console.log(found1)\n",[66,83220,83221,83223,83225],{"class":68,"line":4401},[66,83222,54199],{"class":76},[66,83224,53597],{"class":53084},[66,83226,53091],{"class":76},[66,83228,83229,83231,83233],{"class":68,"line":4415},[66,83230,53569],{"class":76},[66,83232,53584],{"class":53084},[66,83234,53091],{"class":76},[19,83236,83237],{},[3304,83238],{"alt":62,"src":83239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,83241,83242],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[31,83244,83245],{"start":80},[34,83246,83247],{},"every()返回的是布尔值",[19,83249,83250],{},[2229,83251,83254],{"href":83252,"rel":83253},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[25668],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,83256,83257],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,83259,83260],{},"some是只有有一个就没问题",[19,83262,83263],{},"every是必须全是才行",[57,83265,83269],{"className":83266,"code":83267,"language":83268,"meta":62,"style":62},"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",[23,83270,83271,83287,83301,83305,83314],{"__ignoreMap":62},[66,83272,83273,83275,83278,83280,83282,83285],{"class":68,"line":69},[66,83274,56230],{"class":72},[66,83276,83277],{"class":76}," isBigEnough(element, ",[66,83279,75837],{"class":72},[66,83281,307],{"class":76},[66,83283,83284],{"class":72},"array",[66,83286,14247],{"class":76},[66,83288,83289,83292,83295,83297,83299],{"class":68,"line":80},[66,83290,83291],{"class":72},"  return",[66,83293,83294],{"class":76}," element ",[66,83296,3540],{"class":72},[66,83298,1335],{"class":102},[66,83300,3135],{"class":76},[66,83302,83303],{"class":68,"line":112},[66,83304,3407],{"class":76},[66,83306,83307,83310,83312],{"class":68,"line":129},[66,83308,83309],{"class":76},"[12, 5, 8, 130, 44].every(isBigEnough); ",[66,83311,35118],{"class":72},[66,83313,56297],{"class":76},[66,83315,83316,83319,83321],{"class":68,"line":138},[66,83317,83318],{"class":76},"[12, 54, 18, 130, 44].every(isBigEnough); ",[66,83320,35118],{"class":72},[66,83322,59720],{"class":76},[57,83324,83326],{"className":54849,"code":83325,"language":54851,"meta":62,"style":62},"\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",[23,83327,83328,83336,83344,83349,83353,83358,83363,83371],{"__ignoreMap":62},[66,83329,83330,83332,83334],{"class":68,"line":69},[66,83331,413],{"class":76},[66,83333,53584],{"class":53084},[66,83335,53091],{"class":76},[66,83337,83338,83340,83342],{"class":68,"line":80},[66,83339,53928],{"class":76},[66,83341,53597],{"class":53084},[66,83343,53091],{"class":76},[66,83345,83346],{"class":68,"line":112},[66,83347,83348],{"class":76},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[66,83350,83351],{"class":68,"line":129},[66,83352,80100],{"class":76},[66,83354,83355],{"class":68,"line":138},[66,83356,83357],{"class":76},"    const flag = arr.every(item => item >= 10)\n",[66,83359,83360],{"class":68,"line":227},[66,83361,83362],{"class":76},"    console.log(flag)    \u002F\u002Ftrue\n",[66,83364,83365,83367,83369],{"class":68,"line":236},[66,83366,54199],{"class":76},[66,83368,53597],{"class":53084},[66,83370,53091],{"class":76},[66,83372,83373,83375,83377],{"class":68,"line":241},[66,83374,53569],{"class":76},[66,83376,53584],{"class":53084},[66,83378,53091],{"class":76},[57,83380,83382],{"className":54849,"code":83381,"language":54851,"meta":62,"style":62},"\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",[23,83383,83384,83392,83400,83404,83409,83414,83419,83427],{"__ignoreMap":62},[66,83385,83386,83388,83390],{"class":68,"line":69},[66,83387,413],{"class":76},[66,83389,53584],{"class":53084},[66,83391,53091],{"class":76},[66,83393,83394,83396,83398],{"class":68,"line":80},[66,83395,53928],{"class":76},[66,83397,53597],{"class":53084},[66,83399,53091],{"class":76},[66,83401,83402],{"class":68,"line":112},[66,83403,83348],{"class":76},[66,83405,83406],{"class":68,"line":129},[66,83407,83408],{"class":76},"    const arr = [10, 0, 5]\n",[66,83410,83411],{"class":68,"line":138},[66,83412,83413],{"class":76},"    const flag = arr.some(item => item >= 10)\n",[66,83415,83416],{"class":68,"line":227},[66,83417,83418],{"class":76},"    console.log(flag)   \u002F\u002Ftrue\n",[66,83420,83421,83423,83425],{"class":68,"line":236},[66,83422,54199],{"class":76},[66,83424,53597],{"class":53084},[66,83426,53091],{"class":76},[66,83428,83429,83431,83433],{"class":68,"line":241},[66,83430,53569],{"class":76},[66,83432,53584],{"class":53084},[66,83434,53091],{"class":76},[24713,83436,83438],{"id":83437},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,83440,83441],{},[3304,83442],{"alt":62,"src":83443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[57,83445,83447],{"className":52417,"code":83446,"language":52419,"meta":62,"style":62},"\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",[23,83448,83449,83459,83473,83477,83485,83499,83519,83531,83539,83546,83558,83570,83582,83594,83604,83614,83618,83626,83634,83638,83646,83658,83666,83688,83693,83698,83731,83739,83747,83751],{"__ignoreMap":62},[66,83450,83451,83453,83455,83457],{"class":68,"line":69},[66,83452,53081],{"class":76},[66,83454,53085],{"class":53084},[66,83456,53088],{"class":3793},[66,83458,53091],{"class":76},[66,83460,83461,83463,83465,83467,83469,83471],{"class":68,"line":80},[66,83462,413],{"class":76},[66,83464,52419],{"class":53084},[66,83466,53100],{"class":3793},[66,83468,99],{"class":76},[66,83470,53105],{"class":356},[66,83472,53091],{"class":76},[66,83474,83475],{"class":68,"line":112},[66,83476,109],{"emptyLinePlaceholder":108},[66,83478,83479,83481,83483],{"class":68,"line":129},[66,83480,413],{"class":76},[66,83482,53118],{"class":53084},[66,83484,53091],{"class":76},[66,83486,83487,83489,83491,83493,83495,83497],{"class":68,"line":138},[66,83488,53928],{"class":76},[66,83490,53128],{"class":53084},[66,83492,53131],{"class":3793},[66,83494,99],{"class":76},[66,83496,53136],{"class":356},[66,83498,53091],{"class":76},[66,83500,83501,83503,83505,83507,83509,83511,83513,83515,83517],{"class":68,"line":227},[66,83502,53928],{"class":76},[66,83504,53128],{"class":53084},[66,83506,16724],{"class":3793},[66,83508,99],{"class":76},[66,83510,53175],{"class":356},[66,83512,53155],{"class":3793},[66,83514,99],{"class":76},[66,83516,53182],{"class":356},[66,83518,53091],{"class":76},[66,83520,83521,83523,83525,83527,83529],{"class":68,"line":236},[66,83522,53928],{"class":76},[66,83524,53191],{"class":53084},[66,83526,53194],{"class":76},[66,83528,53191],{"class":53084},[66,83530,53091],{"class":76},[66,83532,83533,83535,83537],{"class":68,"line":241},[66,83534,53928],{"class":76},[66,83536,1903],{"class":53084},[66,83538,53091],{"class":76},[66,83540,83541,83544],{"class":68,"line":372},[66,83542,83543],{"class":53084},"    div",[66,83545,17375],{"class":76},[66,83547,83548,83550,83552,83554,83556],{"class":68,"line":377},[66,83549,56552],{"class":102},[66,83551,53221],{"class":76},[66,83553,3552],{"class":102},[66,83555,53276],{"class":72},[66,83557,3135],{"class":76},[66,83559,83560,83562,83564,83566,83568],{"class":68,"line":392},[66,83561,56566],{"class":102},[66,83563,53221],{"class":76},[66,83565,2385],{"class":102},[66,83567,53276],{"class":72},[66,83569,3135],{"class":76},[66,83571,83572,83574,83576,83578,83580],{"class":68,"line":405},[66,83573,59139],{"class":102},[66,83575,53221],{"class":76},[66,83577,2385],{"class":102},[66,83579,53276],{"class":72},[66,83581,3135],{"class":76},[66,83583,83584,83586,83588,83590,83592],{"class":68,"line":418},[66,83585,66912],{"class":102},[66,83587,53221],{"class":76},[66,83589,2477],{"class":102},[66,83591,53276],{"class":72},[66,83593,3135],{"class":76},[66,83595,83596,83598,83600,83602],{"class":68,"line":430},[66,83597,59066],{"class":102},[66,83599,53221],{"class":76},[66,83601,53376],{"class":102},[66,83603,3135],{"class":76},[66,83605,83606,83608,83610,83612],{"class":68,"line":438},[66,83607,56665],{"class":102},[66,83609,53221],{"class":76},[66,83611,53429],{"class":102},[66,83613,3135],{"class":76},[66,83615,83616],{"class":68,"line":465},[66,83617,4013],{"class":76},[66,83619,83620,83622,83624],{"class":68,"line":1805},[66,83621,54199],{"class":76},[66,83623,1903],{"class":53084},[66,83625,53091],{"class":76},[66,83627,83628,83630,83632],{"class":68,"line":1817},[66,83629,53569],{"class":76},[66,83631,53118],{"class":53084},[66,83633,53091],{"class":76},[66,83635,83636],{"class":68,"line":1822},[66,83637,109],{"emptyLinePlaceholder":108},[66,83639,83640,83642,83644],{"class":68,"line":1829},[66,83641,413],{"class":76},[66,83643,53584],{"class":53084},[66,83645,53091],{"class":76},[66,83647,83648,83650,83652,83654,83656],{"class":68,"line":3529},[66,83649,53928],{"class":76},[66,83651,53395],{"class":53084},[66,83653,57095],{"class":76},[66,83655,53395],{"class":53084},[66,83657,53091],{"class":76},[66,83659,83660,83662,83664],{"class":68,"line":3557},[66,83661,53928],{"class":76},[66,83663,53597],{"class":53084},[66,83665,53091],{"class":76},[66,83667,83668,83670,83673,83675,83678,83681,83683,83686],{"class":68,"line":3562},[66,83669,13027],{"class":72},[66,83671,83672],{"class":102}," spec",[66,83674,15369],{"class":72},[66,83676,83677],{"class":76}," { size: ",[66,83679,83680],{"class":356},"'40cm*40cm'",[66,83682,57245],{"class":76},[66,83684,83685],{"class":356},"'黑色'",[66,83687,57385],{"class":76},[66,83689,83690],{"class":68,"line":3579},[66,83691,83692],{"class":758},"    \u002F\u002F const arr = Object.values(spec)\n",[66,83694,83695],{"class":68,"line":3584},[66,83696,83697],{"class":758},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[66,83699,83700,83702,83704,83706,83709,83711,83713,83716,83719,83722,83724,83726,83729],{"class":68,"line":3589},[66,83701,54189],{"class":76},[66,83703,56180],{"class":3793},[66,83705,348],{"class":76},[66,83707,83708],{"class":356},"'div'",[66,83710,76028],{"class":76},[66,83712,99],{"class":72},[66,83714,83715],{"class":76}," Object.",[66,83717,83718],{"class":3793},"values",[66,83720,83721],{"class":76},"(spec).",[66,83723,76002],{"class":3793},[66,83725,348],{"class":76},[66,83727,83728],{"class":356},"'\u002F'",[66,83730,313],{"class":76},[66,83732,83733,83735,83737],{"class":68,"line":3594},[66,83734,54199],{"class":76},[66,83736,53597],{"class":53084},[66,83738,53091],{"class":76},[66,83740,83741,83743,83745],{"class":68,"line":3608},[66,83742,53569],{"class":76},[66,83744,53584],{"class":53084},[66,83746,53091],{"class":76},[66,83748,83749],{"class":68,"line":3613},[66,83750,109],{"emptyLinePlaceholder":108},[66,83752,83753,83755,83757],{"class":68,"line":4401},[66,83754,53569],{"class":76},[66,83756,52419],{"class":53084},[66,83758,53091],{"class":76},[19,83760,83761],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[24713,83763,83765],{"id":83764},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,83767,83768],{},"静态方法，将伪数组转换为真数组",[19,83770,83771],{},[3304,83772],{"alt":62,"src":83773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[57,83775,83777],{"className":54849,"code":83776,"language":54851,"meta":62,"style":62},"\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",[23,83778,83779,83787,83795,83807,83819,83831,83839,83847,83852,83857,83862,83867,83875],{"__ignoreMap":62},[66,83780,83781,83783,83785],{"class":68,"line":69},[66,83782,413],{"class":76},[66,83784,53584],{"class":53084},[66,83786,53091],{"class":76},[66,83788,83789,83791,83793],{"class":68,"line":80},[66,83790,53928],{"class":76},[66,83792,2982],{"class":53084},[66,83794,53091],{"class":76},[66,83796,83797,83799,83801,83803,83805],{"class":68,"line":112},[66,83798,53125],{"class":76},[66,83800,34],{"class":53084},[66,83802,57095],{"class":76},[66,83804,34],{"class":53084},[66,83806,53091],{"class":76},[66,83808,83809,83811,83813,83815,83817],{"class":68,"line":129},[66,83810,53125],{"class":76},[66,83812,34],{"class":53084},[66,83814,57095],{"class":76},[66,83816,34],{"class":53084},[66,83818,53091],{"class":76},[66,83820,83821,83823,83825,83827,83829],{"class":68,"line":138},[66,83822,53125],{"class":76},[66,83824,34],{"class":53084},[66,83826,57095],{"class":76},[66,83828,34],{"class":53084},[66,83830,53091],{"class":76},[66,83832,83833,83835,83837],{"class":68,"line":227},[66,83834,54199],{"class":76},[66,83836,2982],{"class":53084},[66,83838,53091],{"class":76},[66,83840,83841,83843,83845],{"class":68,"line":236},[66,83842,53928],{"class":76},[66,83844,53597],{"class":53084},[66,83846,53091],{"class":76},[66,83848,83849],{"class":68,"line":241},[66,83850,83851],{"class":76},"    const lis = document.querySelectorAll('li')\n",[66,83853,83854],{"class":68,"line":372},[66,83855,83856],{"class":76},"    const liss = Array.from(lis)\n",[66,83858,83859],{"class":68,"line":377},[66,83860,83861],{"class":76},"    liss.pop()\n",[66,83863,83864],{"class":68,"line":392},[66,83865,83866],{"class":76},"    console.log(liss)\n",[66,83868,83869,83871,83873],{"class":68,"line":405},[66,83870,54199],{"class":76},[66,83872,53597],{"class":53084},[66,83874,53091],{"class":76},[66,83876,83877,83879,83881],{"class":68,"line":418},[66,83878,53569],{"class":76},[66,83880,53584],{"class":53084},[66,83882,53091],{"class":76},[19,83884,83885],{},[3304,83886],{"alt":62,"src":83887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[23801,83889,83891],{"id":83890},"_41053-string","4.10.5.3 String",[19,83893,83894],{},[3304,83895],{"alt":62,"src":83896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[24713,83898,83900],{"id":83899},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[57,83902,83904],{"className":54849,"code":83903,"language":54851,"meta":62,"style":62},"\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",[23,83905,83906,83914,83922,83927,83932,83937,83941,83946,83951,83956,83964],{"__ignoreMap":62},[66,83907,83908,83910,83912],{"class":68,"line":69},[66,83909,413],{"class":76},[66,83911,53584],{"class":53084},[66,83913,53091],{"class":76},[66,83915,83916,83918,83920],{"class":68,"line":80},[66,83917,53928],{"class":76},[66,83919,53597],{"class":53084},[66,83921,53091],{"class":76},[66,83923,83924],{"class":68,"line":112},[66,83925,83926],{"class":76},"    \u002F\u002F 把字符串转化为数组\n",[66,83928,83929],{"class":68,"line":129},[66,83930,83931],{"class":76},"    const str = 'pink,red'\n",[66,83933,83934],{"class":68,"line":138},[66,83935,83936],{"class":76},"    const arr = str.split(',')\n",[66,83938,83939],{"class":68,"line":227},[66,83940,82416],{"class":76},[66,83942,83943],{"class":68,"line":236},[66,83944,83945],{"class":76},"    const str1 = '2025-8-25'\n",[66,83947,83948],{"class":68,"line":241},[66,83949,83950],{"class":76},"    const arr1 = str1.split('-')\n",[66,83952,83953],{"class":68,"line":372},[66,83954,83955],{"class":76},"    console.log(arr1)\n",[66,83957,83958,83960,83962],{"class":68,"line":377},[66,83959,54199],{"class":76},[66,83961,53597],{"class":53084},[66,83963,53091],{"class":76},[66,83965,83966,83968,83970],{"class":68,"line":392},[66,83967,53569],{"class":76},[66,83969,53584],{"class":53084},[66,83971,53091],{"class":76},[24713,83973,83975],{"id":83974},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,83977,55],{},[19,83979,83980],{},"substring(indexStart)",[19,83982,83983],{},"substring(indexStart, indexEnd)",[2982,83985,83986,83997,84009,84019],{},[34,83987,83988,83989,83992,83993,83996],{},"如果省略了 ",[23,83990,83991],{},"indexEnd","，则 ",[23,83994,83995],{},"substring()"," 提取字符直到字符串的末尾",[34,83998,83999,84000,84003,84004,83992,84006,84008],{},"如果 ",[23,84001,84002],{},"indexStart"," 等于 ",[23,84005,83991],{},[23,84007,83995],{}," 返回一个空字符串",[34,84010,83999,84011,84013,84014,83992,84016,84018],{},[23,84012,84002],{}," 大于 ",[23,84015,83991],{},[23,84017,83995],{}," 的效果就像交换了这两个参数一样",[34,84020,84021],{},"结束的索引号不包含想要截取的部分",[57,84023,84025],{"className":83266,"code":84024,"language":83268,"meta":62,"style":62},"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",[23,84026,84027,84039,84043,84077,84107,84111,84142,84146,84173,84203,84233,84237,84268],{"__ignoreMap":62},[66,84028,84029,84032,84034,84037],{"class":68,"line":69},[66,84030,84031],{"class":76},"const anyString ",[66,84033,99],{"class":72},[66,84035,84036],{"class":356}," \"Mozilla\"",[66,84038,3135],{"class":76},[66,84040,84041],{"class":68,"line":80},[66,84042,109],{"emptyLinePlaceholder":108},[66,84044,84045,84048,84050,84052,84054,84057,84059,84062,84064,84066,84068,84070,84072,84074],{"class":68,"line":112},[66,84046,84047],{"class":102},"console",[66,84049,2537],{"class":76},[66,84051,60027],{"class":102},[66,84053,348],{"class":76},[66,84055,84056],{"class":102},"anyString",[66,84058,2537],{"class":76},[66,84060,84061],{"class":102},"substring",[66,84063,348],{"class":76},[66,84065,2183],{"class":102},[66,84067,307],{"class":76},[66,84069,304],{"class":102},[66,84071,77032],{"class":76},[66,84073,35118],{"class":72},[66,84075,84076],{"class":356}," 'M'\n",[66,84078,84079,84081,84083,84085,84087,84089,84091,84093,84095,84097,84099,84101,84103,84105],{"class":68,"line":129},[66,84080,84047],{"class":102},[66,84082,2537],{"class":76},[66,84084,60027],{"class":102},[66,84086,348],{"class":76},[66,84088,84056],{"class":102},[66,84090,2537],{"class":76},[66,84092,84061],{"class":102},[66,84094,348],{"class":76},[66,84096,304],{"class":102},[66,84098,307],{"class":76},[66,84100,2183],{"class":102},[66,84102,77032],{"class":76},[66,84104,35118],{"class":72},[66,84106,84076],{"class":356},[66,84108,84109],{"class":68,"line":138},[66,84110,109],{"emptyLinePlaceholder":108},[66,84112,84113,84115,84117,84119,84121,84123,84125,84127,84129,84131,84133,84135,84137,84139],{"class":68,"line":227},[66,84114,84047],{"class":102},[66,84116,2537],{"class":76},[66,84118,60027],{"class":102},[66,84120,348],{"class":76},[66,84122,84056],{"class":102},[66,84124,2537],{"class":76},[66,84126,84061],{"class":102},[66,84128,348],{"class":76},[66,84130,2183],{"class":102},[66,84132,307],{"class":76},[66,84134,519],{"class":102},[66,84136,77032],{"class":76},[66,84138,35118],{"class":72},[66,84140,84141],{"class":356}," 'Mozill'\n",[66,84143,84144],{"class":68,"line":236},[66,84145,109],{"emptyLinePlaceholder":108},[66,84147,84148,84150,84152,84154,84156,84158,84160,84162,84164,84166,84168,84170],{"class":68,"line":241},[66,84149,84047],{"class":102},[66,84151,2537],{"class":76},[66,84153,60027],{"class":102},[66,84155,348],{"class":76},[66,84157,84056],{"class":102},[66,84159,2537],{"class":76},[66,84161,84061],{"class":102},[66,84163,348],{"class":76},[66,84165,1076],{"class":102},[66,84167,77032],{"class":76},[66,84169,35118],{"class":72},[66,84171,84172],{"class":356}," 'lla'\n",[66,84174,84175,84177,84179,84181,84183,84185,84187,84189,84191,84193,84195,84197,84199,84201],{"class":68,"line":372},[66,84176,84047],{"class":102},[66,84178,2537],{"class":76},[66,84180,60027],{"class":102},[66,84182,348],{"class":76},[66,84184,84056],{"class":102},[66,84186,2537],{"class":76},[66,84188,84061],{"class":102},[66,84190,348],{"class":76},[66,84192,1076],{"class":102},[66,84194,307],{"class":76},[66,84196,2353],{"class":102},[66,84198,77088],{"class":76},[66,84200,35118],{"class":72},[66,84202,84172],{"class":356},[66,84204,84205,84207,84209,84211,84213,84215,84217,84219,84221,84223,84225,84227,84229,84231],{"class":68,"line":377},[66,84206,84047],{"class":102},[66,84208,2537],{"class":76},[66,84210,60027],{"class":102},[66,84212,348],{"class":76},[66,84214,84056],{"class":102},[66,84216,2537],{"class":76},[66,84218,84061],{"class":102},[66,84220,348],{"class":76},[66,84222,2353],{"class":102},[66,84224,307],{"class":76},[66,84226,1076],{"class":102},[66,84228,77032],{"class":76},[66,84230,35118],{"class":72},[66,84232,84172],{"class":356},[66,84234,84235],{"class":68,"line":392},[66,84236,109],{"emptyLinePlaceholder":108},[66,84238,84239,84241,84243,84245,84247,84249,84251,84253,84255,84257,84259,84261,84263,84265],{"class":68,"line":405},[66,84240,84047],{"class":102},[66,84242,2537],{"class":76},[66,84244,60027],{"class":102},[66,84246,348],{"class":76},[66,84248,84056],{"class":102},[66,84250,2537],{"class":76},[66,84252,84061],{"class":102},[66,84254,348],{"class":76},[66,84256,2183],{"class":102},[66,84258,307],{"class":76},[66,84260,2353],{"class":102},[66,84262,77032],{"class":76},[66,84264,35118],{"class":72},[66,84266,84267],{"class":356}," 'Mozilla'\n",[66,84269,84270,84272,84274,84276,84278,84280,84282,84284,84286,84288,84290,84292,84294,84296],{"class":68,"line":418},[66,84271,84047],{"class":102},[66,84273,2537],{"class":76},[66,84275,60027],{"class":102},[66,84277,348],{"class":76},[66,84279,84056],{"class":102},[66,84281,2537],{"class":76},[66,84283,84061],{"class":102},[66,84285,348],{"class":76},[66,84287,2183],{"class":102},[66,84289,307],{"class":76},[66,84291,790],{"class":102},[66,84293,77032],{"class":76},[66,84295,35118],{"class":72},[66,84297,84267],{"class":356},[24713,84299,84301],{"id":84300},"_410533-startswith","4.10.5.3.3 startsWith",[19,84303,84304,84307,84308,84313,84314,84316,84317],{},[23,84305,84306],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[2141,84309,84310],{},[23,84311,84312],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[23,84315,3204],{}," 或 ",[23,84318,67799],{},[57,84320,84322],{"className":79274,"code":84321,"language":79276,"meta":62,"style":62},"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",[23,84323,84324,84336,84355,84360,84380],{"__ignoreMap":62},[66,84325,84326,84328,84331,84333],{"class":68,"line":69},[66,84327,8603],{"class":72},[66,84329,84330],{"class":76}," str1 ",[66,84332,99],{"class":72},[66,84334,84335],{"class":356}," \"Saturday night plans\"\n",[66,84337,84338,84340,84342,84345,84348,84350,84353],{"class":68,"line":80},[66,84339,79311],{"class":76},[66,84341,60027],{"class":3793},[66,84343,84344],{"class":76},"(str1.",[66,84346,84347],{"class":3793},"startsWith",[66,84349,348],{"class":76},[66,84351,84352],{"class":356},"\"Sat\"",[66,84354,360],{"class":76},[66,84356,84357],{"class":68,"line":112},[66,84358,84359],{"class":758},"\u002F\u002F Expected output: true\n",[66,84361,84362,84364,84366,84368,84370,84372,84374,84376,84378],{"class":68,"line":129},[66,84363,79311],{"class":76},[66,84365,60027],{"class":3793},[66,84367,84344],{"class":76},[66,84369,84347],{"class":3793},[66,84371,348],{"class":76},[66,84373,84352],{"class":356},[66,84375,307],{"class":76},[66,84377,1520],{"class":102},[66,84379,360],{"class":76},[66,84381,84382],{"class":68,"line":138},[66,84383,84384],{"class":758},"\u002F\u002F Expected output: false\n",[57,84386,84388],{"className":52417,"code":84387,"language":52419,"meta":62,"style":62},"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",[23,84389,84390,84395,84400,84404,84409,84414],{"__ignoreMap":62},[66,84391,84392],{"class":68,"line":69},[66,84393,84394],{"class":76},"startsWith(searchString)\n",[66,84396,84397],{"class":68,"line":80},[66,84398,84399],{"class":76},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[66,84401,84402],{"class":68,"line":112},[66,84403,109],{"emptyLinePlaceholder":108},[66,84405,84406],{"class":68,"line":129},[66,84407,84408],{"class":76},"const str3 = 'pink老师上课中'\n",[66,84410,84411],{"class":68,"line":138},[66,84412,84413],{"class":76},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[66,84415,84416],{"class":68,"line":227},[66,84417,84418],{"class":76},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[24713,84420,84422],{"id":84421},"_410534-includes","4.10.5.3.4 includes",[19,84424,84425],{},"includes(searchString) includes(searchString, position)",[31,84427,84428],{},[34,84429,84430],{},"searchString:",[19,84432,84433,84434,84436,84437,84442,84443,84448,84449,23303,84452,84455,84456,84459],{},"一个要在 ",[23,84435,3144],{}," 中查找的字符串。",[2229,84438,84441],{"href":84439,"rel":84440},"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",[25668],"不能是正则表达式","。所有非正则表达式的值都会被",[2229,84444,84447],{"href":84445,"rel":84446},"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",[25668],"强制转换为字符串","，因此如果该参数被省略或传入 ",[23,84450,84451],{},"undefined",[23,84453,84454],{},"includes()"," 方法会在字符串中搜索 ",[23,84457,84458],{},"\"undefined\"","，这通常不是你想要的",[31,84461,84462],{"start":80},[34,84463,84464,2838],{},[23,84465,84466],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,84468,84469,84470,84473,84474],{},"在字符串中开始搜索 ",[23,84471,84472],{},"searchString"," 的位置。默认值为 ",[23,84475,2183],{},[31,84477,84478],{"start":112},[34,84479,84480],{},"返回值：",[19,84482,84483,84484,84486,84487,84491,84492],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[23,84485,84472],{}," 为空字符串的情况），则返回 ",[2141,84488,84489],{},[23,84490,3204],{}," ，否则返回 ",[2141,84493,84494],{},[23,84495,67799],{},[31,84497,84498],{"start":129},[34,84499,84500],{},"异常：",[19,84502,83999,84503,15600,84505,84509],{},[23,84504,84472],{},[2229,84506,84508],{"href":84439,"rel":84507},[25668],"是一个正则表达式","，则会抛出",[19,84511,84512],{},"只要是有就是true，不需要非得以谁开头结尾",[57,84514,84516],{"className":79274,"code":84515,"language":79276,"meta":62,"style":62},"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",[23,84517,84518,84529,84552,84571,84591,84613,84632],{"__ignoreMap":62},[66,84519,84520,84522,84524,84526],{"class":68,"line":69},[66,84521,8603],{"class":72},[66,84523,81553],{"class":76},[66,84525,99],{"class":72},[66,84527,84528],{"class":356}," \"To be, or not to be, that is the question.\"\n",[66,84530,84531,84533,84535,84538,84541,84543,84546,84549],{"class":68,"line":80},[66,84532,79311],{"class":76},[66,84534,60027],{"class":3793},[66,84536,84537],{"class":76},"(str.",[66,84539,84540],{"class":3793},"includes",[66,84542,348],{"class":76},[66,84544,84545],{"class":356},"\"To be\"",[66,84547,84548],{"class":76},"))",[66,84550,84551],{"class":758},"  \u002F\u002F true\n",[66,84553,84554,84556,84558,84560,84562,84564,84567,84569],{"class":68,"line":112},[66,84555,79311],{"class":76},[66,84557,60027],{"class":3793},[66,84559,84537],{"class":76},[66,84561,84540],{"class":3793},[66,84563,348],{"class":76},[66,84565,84566],{"class":356},"\"question\"",[66,84568,84548],{"class":76},[66,84570,84551],{"class":758},[66,84572,84573,84575,84577,84579,84581,84583,84586,84588],{"class":68,"line":129},[66,84574,79311],{"class":76},[66,84576,60027],{"class":3793},[66,84578,84537],{"class":76},[66,84580,84540],{"class":3793},[66,84582,348],{"class":76},[66,84584,84585],{"class":356},"\"nonexistent\"",[66,84587,84548],{"class":76},[66,84589,84590],{"class":758},"  \u002F\u002F false\n",[66,84592,84593,84595,84597,84599,84601,84603,84605,84607,84609,84611],{"class":68,"line":138},[66,84594,79311],{"class":76},[66,84596,60027],{"class":3793},[66,84598,84537],{"class":76},[66,84600,84540],{"class":3793},[66,84602,348],{"class":76},[66,84604,84545],{"class":356},[66,84606,307],{"class":76},[66,84608,304],{"class":102},[66,84610,84548],{"class":76},[66,84612,84590],{"class":758},[66,84614,84615,84617,84619,84621,84623,84625,84628,84630],{"class":68,"line":227},[66,84616,79311],{"class":76},[66,84618,60027],{"class":3793},[66,84620,84537],{"class":76},[66,84622,84540],{"class":3793},[66,84624,348],{"class":76},[66,84626,84627],{"class":356},"\"TO BE\"",[66,84629,84548],{"class":76},[66,84631,84590],{"class":758},[66,84633,84634,84636,84638,84640,84642,84644,84646,84648],{"class":68,"line":236},[66,84635,79311],{"class":76},[66,84637,60027],{"class":3793},[66,84639,84537],{"class":76},[66,84641,84540],{"class":3793},[66,84643,348],{"class":76},[66,84645,9463],{"class":356},[66,84647,84548],{"class":76},[66,84649,84551],{"class":758},[24713,84651,84653],{"id":84652},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[57,84655,84657],{"className":54849,"code":84656,"language":54851,"meta":62,"style":62},"\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",[23,84658,84659,84667,84675,84680,84685,84690,84695,84700,84708],{"__ignoreMap":62},[66,84660,84661,84663,84665],{"class":68,"line":69},[66,84662,413],{"class":76},[66,84664,53584],{"class":53084},[66,84666,53091],{"class":76},[66,84668,84669,84671,84673],{"class":68,"line":80},[66,84670,53928],{"class":76},[66,84672,53597],{"class":53084},[66,84674,53091],{"class":76},[66,84676,84677],{"class":68,"line":112},[66,84678,84679],{"class":76},"    const num = 10\n",[66,84681,84682],{"class":68,"line":129},[66,84683,84684],{"class":76},"    \u002F\u002F 强制转换\n",[66,84686,84687],{"class":68,"line":138},[66,84688,84689],{"class":76},"    console.log(String(num))\n",[66,84691,84692],{"class":68,"line":227},[66,84693,84694],{"class":76},"    \u002F\u002F toString()方法转换\n",[66,84696,84697],{"class":68,"line":236},[66,84698,84699],{"class":76},"    console.log(num.toString())\n",[66,84701,84702,84704,84706],{"class":68,"line":241},[66,84703,54199],{"class":76},[66,84705,53597],{"class":53084},[66,84707,53091],{"class":76},[66,84709,84710,84712,84714],{"class":68,"line":372},[66,84711,53569],{"class":76},[66,84713,53584],{"class":53084},[66,84715,53091],{"class":76},[24713,84717,84719],{"id":84718},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,84721,84722],{},[3304,84723],{"alt":62,"src":84724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[57,84726,84728],{"className":52417,"code":84727,"language":52419,"meta":62,"style":62},"\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",[23,84729,84730,84740,84754,84758,84766,84780,84800,84812,84820,84824,84832,84844,84852,84864,84869,84874,84879,84926,84942,84950,84958,84962],{"__ignoreMap":62},[66,84731,84732,84734,84736,84738],{"class":68,"line":69},[66,84733,53081],{"class":76},[66,84735,53085],{"class":53084},[66,84737,53088],{"class":3793},[66,84739,53091],{"class":76},[66,84741,84742,84744,84746,84748,84750,84752],{"class":68,"line":80},[66,84743,413],{"class":76},[66,84745,52419],{"class":53084},[66,84747,53100],{"class":3793},[66,84749,99],{"class":76},[66,84751,53105],{"class":356},[66,84753,53091],{"class":76},[66,84755,84756],{"class":68,"line":112},[66,84757,109],{"emptyLinePlaceholder":108},[66,84759,84760,84762,84764],{"class":68,"line":129},[66,84761,413],{"class":76},[66,84763,53118],{"class":53084},[66,84765,53091],{"class":76},[66,84767,84768,84770,84772,84774,84776,84778],{"class":68,"line":138},[66,84769,53928],{"class":76},[66,84771,53128],{"class":53084},[66,84773,53131],{"class":3793},[66,84775,99],{"class":76},[66,84777,53136],{"class":356},[66,84779,53091],{"class":76},[66,84781,84782,84784,84786,84788,84790,84792,84794,84796,84798],{"class":68,"line":227},[66,84783,53928],{"class":76},[66,84785,53128],{"class":53084},[66,84787,16724],{"class":3793},[66,84789,99],{"class":76},[66,84791,53175],{"class":356},[66,84793,53155],{"class":3793},[66,84795,99],{"class":76},[66,84797,53182],{"class":356},[66,84799,53091],{"class":76},[66,84801,84802,84804,84806,84808,84810],{"class":68,"line":236},[66,84803,53928],{"class":76},[66,84805,53191],{"class":53084},[66,84807,53194],{"class":76},[66,84809,53191],{"class":53084},[66,84811,53091],{"class":76},[66,84813,84814,84816,84818],{"class":68,"line":241},[66,84815,53569],{"class":76},[66,84817,53118],{"class":53084},[66,84819,53091],{"class":76},[66,84821,84822],{"class":68,"line":372},[66,84823,109],{"emptyLinePlaceholder":108},[66,84825,84826,84828,84830],{"class":68,"line":377},[66,84827,413],{"class":76},[66,84829,53584],{"class":53084},[66,84831,53091],{"class":76},[66,84833,84834,84836,84838,84840,84842],{"class":68,"line":392},[66,84835,53928],{"class":76},[66,84837,53395],{"class":53084},[66,84839,57095],{"class":76},[66,84841,53395],{"class":53084},[66,84843,53091],{"class":76},[66,84845,84846,84848,84850],{"class":68,"line":405},[66,84847,53928],{"class":76},[66,84849,53597],{"class":53084},[66,84851,53091],{"class":76},[66,84853,84854,84856,84859,84861],{"class":68,"line":418},[66,84855,13027],{"class":72},[66,84857,84858],{"class":102}," gift",[66,84860,15369],{"class":72},[66,84862,84863],{"class":356}," '50g的茶叶，清洗球'\n",[66,84865,84866],{"class":68,"line":430},[66,84867,84868],{"class":758},"    \u002F\u002F 1.把字符串拆分为数组\n",[66,84870,84871],{"class":68,"line":438},[66,84872,84873],{"class":758},"    \u002F\u002F console.log(gift.split(','))\n",[66,84875,84876],{"class":68,"line":465},[66,84877,84878],{"class":758},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[66,84880,84881,84883,84885,84887,84890,84893,84895,84898,84900,84902,84904,84906,84908,84911,84913,84916,84918,84920,84922,84924],{"class":68,"line":1805},[66,84882,13027],{"class":72},[66,84884,75698],{"class":102},[66,84886,15369],{"class":72},[66,84888,84889],{"class":76}," gift.",[66,84891,84892],{"class":3793},"split",[66,84894,348],{"class":76},[66,84896,84897],{"class":356},"'，'",[66,84899,32620],{"class":76},[66,84901,75823],{"class":3793},[66,84903,348],{"class":76},[66,84905,81573],{"class":1234},[66,84907,81576],{"class":72},[66,84909,84910],{"class":356}," `\u003Cspan>【赠品】${",[66,84912,81573],{"class":76},[66,84914,84915],{"class":356},"}\u003C\u002Fspan>\u003Cbr>`",[66,84917,32620],{"class":76},[66,84919,76002],{"class":3793},[66,84921,348],{"class":76},[66,84923,76007],{"class":356},[66,84925,313],{"class":76},[66,84927,84928,84930,84932,84934,84936,84938,84940],{"class":68,"line":1817},[66,84929,54189],{"class":76},[66,84931,56180],{"class":3793},[66,84933,348],{"class":76},[66,84935,83708],{"class":356},[66,84937,76028],{"class":76},[66,84939,99],{"class":72},[66,84941,75764],{"class":76},[66,84943,84944,84946,84948],{"class":68,"line":1822},[66,84945,54199],{"class":76},[66,84947,53597],{"class":53084},[66,84949,53091],{"class":76},[66,84951,84952,84954,84956],{"class":68,"line":1829},[66,84953,53569],{"class":76},[66,84955,53584],{"class":53084},[66,84957,53091],{"class":76},[66,84959,84960],{"class":68,"line":3529},[66,84961,109],{"emptyLinePlaceholder":108},[66,84963,84964,84966,84968],{"class":68,"line":3557},[66,84965,53569],{"class":76},[66,84967,52419],{"class":53084},[66,84969,53091],{"class":76},[23801,84971,84973],{"id":84972},"_41054-number","4.10.5.4 Number",[19,84975,84976],{},[3304,84977],{"alt":62,"src":84978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,84980,84981],{},"整数也可以进行toFixed来保留小数",[19,84983,84984],{},"比如：",[19,84986,84987],{},"const price=10",[19,84989,84990],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[23801,84992,84994],{"id":84993},"_41055-购物车展示","4.10.5.5 购物车展示",[19,84996,84997],{},[3304,84998],{"alt":62,"src":84999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[57,85001,85003],{"className":52417,"code":85002,"language":52419,"meta":62,"style":62},"\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",[23,85004,85005,85015,85029,85033,85041,85055,85075,85087,85095,85101,85111,85121,85131,85135,85139,85145,85157,85171,85175,85179,85185,85197,85213,85223,85239,85243,85247,85253,85263,85273,85277,85281,85289,85301,85313,85325,85329,85333,85341,85353,85357,85361,85372,85382,85394,85406,85416,85420,85424,85432,85441,85453,85463,85473,85477,85481,85489,85498,85505,85515,85527,85531,85535,85544,85554,85565,85577,85589,85593,85597,85606,85616,85627,85631,85635,85641,85653,85665,85675,85685,85703,85715,85719,85723,85732,85744,85754,85764,85776,85780,85788,85796,85800,85808,85822,85830,85844,85872,85880,85888,85898,85902,85910,85918,85927,85935,85944,85954,85958,85962,85970,85978,85987,85995,86003,86016,86020,86024,86032,86040,86049,86057,86065,86080,86084,86088,86096,86104,86113,86121,86129,86143,86151,86155,86159,86164,86190,86195,86231,86236,86259,86264,86318,86323,86359,86363,86369,86374,86383,86397,86406,86425,86434,86444,86449,86454,86467,86472,86526,86552,86560,86568,86572],{"__ignoreMap":62},[66,85006,85007,85009,85011,85013],{"class":68,"line":69},[66,85008,53081],{"class":76},[66,85010,53085],{"class":53084},[66,85012,53088],{"class":3793},[66,85014,53091],{"class":76},[66,85016,85017,85019,85021,85023,85025,85027],{"class":68,"line":80},[66,85018,413],{"class":76},[66,85020,52419],{"class":53084},[66,85022,53100],{"class":3793},[66,85024,99],{"class":76},[66,85026,53105],{"class":356},[66,85028,53091],{"class":76},[66,85030,85031],{"class":68,"line":112},[66,85032,109],{"emptyLinePlaceholder":108},[66,85034,85035,85037,85039],{"class":68,"line":129},[66,85036,413],{"class":76},[66,85038,53118],{"class":53084},[66,85040,53091],{"class":76},[66,85042,85043,85045,85047,85049,85051,85053],{"class":68,"line":138},[66,85044,53928],{"class":76},[66,85046,53128],{"class":53084},[66,85048,53131],{"class":3793},[66,85050,99],{"class":76},[66,85052,53136],{"class":356},[66,85054,53091],{"class":76},[66,85056,85057,85059,85061,85063,85065,85067,85069,85071,85073],{"class":68,"line":227},[66,85058,53928],{"class":76},[66,85060,53128],{"class":53084},[66,85062,16724],{"class":3793},[66,85064,99],{"class":76},[66,85066,53175],{"class":356},[66,85068,53155],{"class":3793},[66,85070,99],{"class":76},[66,85072,53182],{"class":356},[66,85074,53091],{"class":76},[66,85076,85077,85079,85081,85083,85085],{"class":68,"line":236},[66,85078,53928],{"class":76},[66,85080,53191],{"class":53084},[66,85082,53194],{"class":76},[66,85084,53191],{"class":53084},[66,85086,53091],{"class":76},[66,85088,85089,85091,85093],{"class":68,"line":241},[66,85090,53928],{"class":76},[66,85092,1903],{"class":53084},[66,85094,53091],{"class":76},[66,85096,85097,85099],{"class":68,"line":372},[66,85098,8214],{"class":53084},[66,85100,17375],{"class":76},[66,85102,85103,85105,85107,85109],{"class":68,"line":377},[66,85104,56476],{"class":102},[66,85106,53221],{"class":76},[66,85108,2183],{"class":102},[66,85110,3135],{"class":76},[66,85112,85113,85115,85117,85119],{"class":68,"line":392},[66,85114,56487],{"class":102},[66,85116,53221],{"class":76},[66,85118,2183],{"class":102},[66,85120,3135],{"class":76},[66,85122,85123,85125,85127,85129],{"class":68,"line":405},[66,85124,74375],{"class":102},[66,85126,53221],{"class":76},[66,85128,62285],{"class":102},[66,85130,3135],{"class":76},[66,85132,85133],{"class":68,"line":418},[66,85134,4013],{"class":76},[66,85136,85137],{"class":68,"line":430},[66,85138,109],{"emptyLinePlaceholder":108},[66,85140,85141,85143],{"class":68,"line":438},[66,85142,63902],{"class":3793},[66,85144,17375],{"class":76},[66,85146,85147,85149,85151,85153,85155],{"class":68,"line":465},[66,85148,56552],{"class":102},[66,85150,53221],{"class":76},[66,85152,80352],{"class":102},[66,85154,53276],{"class":72},[66,85156,3135],{"class":76},[66,85158,85159,85161,85163,85165,85167,85169],{"class":68,"line":1805},[66,85160,56487],{"class":102},[66,85162,53221],{"class":76},[66,85164,310],{"class":102},[66,85166,53276],{"class":72},[66,85168,53340],{"class":102},[66,85170,3135],{"class":76},[66,85172,85173],{"class":68,"line":1817},[66,85174,4013],{"class":76},[66,85176,85177],{"class":68,"line":1822},[66,85178,109],{"emptyLinePlaceholder":108},[66,85180,85181,85183],{"class":68,"line":1829},[66,85182,80403],{"class":3793},[66,85184,17375],{"class":76},[66,85186,85187,85189,85191,85193,85195],{"class":68,"line":3529},[66,85188,56476],{"class":102},[66,85190,53221],{"class":76},[66,85192,2554],{"class":102},[66,85194,53276],{"class":72},[66,85196,3135],{"class":76},[66,85198,85199,85201,85203,85205,85207,85209,85211],{"class":68,"line":3557},[66,85200,63639],{"class":102},[66,85202,53221],{"class":76},[66,85204,29922],{"class":102},[66,85206,80458],{"class":102},[66,85208,80461],{"class":102},[66,85210,2674],{"class":72},[66,85212,3135],{"class":76},[66,85214,85215,85217,85219,85221],{"class":68,"line":3562},[66,85216,56790],{"class":102},[66,85218,53221],{"class":76},[66,85220,53261],{"class":102},[66,85222,3135],{"class":76},[66,85224,85225,85227,85229,85231,85233,85235,85237],{"class":68,"line":3579},[66,85226,63756],{"class":102},[66,85228,53221],{"class":76},[66,85230,304],{"class":102},[66,85232,53276],{"class":72},[66,85234,53305],{"class":102},[66,85236,64023],{"class":102},[66,85238,3135],{"class":76},[66,85240,85241],{"class":68,"line":3584},[66,85242,4013],{"class":76},[66,85244,85245],{"class":68,"line":3589},[66,85246,109],{"emptyLinePlaceholder":108},[66,85248,85249,85251],{"class":68,"line":3594},[66,85250,80521],{"class":3793},[66,85252,17375],{"class":76},[66,85254,85255,85257,85259,85261],{"class":68,"line":3608},[66,85256,63804],{"class":102},[66,85258,53221],{"class":76},[66,85260,63809],{"class":102},[66,85262,3135],{"class":76},[66,85264,85265,85267,85269,85271],{"class":68,"line":3613},[66,85266,56665],{"class":102},[66,85268,53221],{"class":76},[66,85270,63597],{"class":102},[66,85272,3135],{"class":76},[66,85274,85275],{"class":68,"line":4401},[66,85276,4013],{"class":76},[66,85278,85279],{"class":68,"line":4415},[66,85280,109],{"emptyLinePlaceholder":108},[66,85282,85283,85285,85287],{"class":68,"line":4423},[66,85284,80403],{"class":3793},[66,85286,57396],{"class":53084},[66,85288,17375],{"class":76},[66,85290,85291,85293,85295,85297,85299],{"class":68,"line":4428},[66,85292,56552],{"class":102},[66,85294,53221],{"class":76},[66,85296,2591],{"class":102},[66,85298,53276],{"class":72},[66,85300,3135],{"class":76},[66,85302,85303,85305,85307,85309,85311],{"class":68,"line":4434},[66,85304,56566],{"class":102},[66,85306,53221],{"class":76},[66,85308,2591],{"class":102},[66,85310,53276],{"class":72},[66,85312,3135],{"class":76},[66,85314,85315,85317,85319,85321,85323],{"class":68,"line":4440},[66,85316,63529],{"class":102},[66,85318,53221],{"class":76},[66,85320,752],{"class":102},[66,85322,53276],{"class":72},[66,85324,3135],{"class":76},[66,85326,85327],{"class":68,"line":4445},[66,85328,4013],{"class":76},[66,85330,85331],{"class":68,"line":9759},[66,85332,109],{"emptyLinePlaceholder":108},[66,85334,85335,85337,85339],{"class":68,"line":9783},[66,85336,80403],{"class":3793},[66,85338,64083],{"class":3793},[66,85340,17375],{"class":76},[66,85342,85343,85345,85347,85349,85351],{"class":68,"line":9788},[66,85344,56552],{"class":102},[66,85346,53221],{"class":76},[66,85348,3552],{"class":102},[66,85350,53276],{"class":72},[66,85352,3135],{"class":76},[66,85354,85355],{"class":68,"line":9794},[66,85356,4013],{"class":76},[66,85358,85359],{"class":68,"line":9821},[66,85360,109],{"emptyLinePlaceholder":108},[66,85362,85363,85365,85367,85370],{"class":68,"line":9826},[66,85364,80403],{"class":3793},[66,85366,64083],{"class":3793},[66,85368,85369],{"class":3793}," .tag",[66,85371,17375],{"class":76},[66,85373,85374,85376,85378,85380],{"class":68,"line":9832},[66,85375,56790],{"class":102},[66,85377,53221],{"class":76},[66,85379,62648],{"class":102},[66,85381,3135],{"class":76},[66,85383,85384,85386,85388,85390,85392],{"class":68,"line":9844},[66,85385,56476],{"class":102},[66,85387,53221],{"class":76},[66,85389,795],{"class":102},[66,85391,53276],{"class":72},[66,85393,3135],{"class":76},[66,85395,85396,85398,85400,85402,85404],{"class":68,"line":9856},[66,85397,56703],{"class":102},[66,85399,53221],{"class":76},[66,85401,2477],{"class":102},[66,85403,53276],{"class":72},[66,85405,3135],{"class":76},[66,85407,85408,85410,85412,85414],{"class":68,"line":9868},[66,85409,59196],{"class":102},[66,85411,53221],{"class":76},[66,85413,63849],{"class":102},[66,85415,3135],{"class":76},[66,85417,85418],{"class":68,"line":11523},[66,85419,4013],{"class":76},[66,85421,85422],{"class":68,"line":11548},[66,85423,109],{"emptyLinePlaceholder":108},[66,85425,85426,85428,85430],{"class":68,"line":11571},[66,85427,80403],{"class":3793},[66,85429,80695],{"class":3793},[66,85431,33259],{"class":76},[66,85433,85434,85436,85439],{"class":68,"line":11595},[66,85435,80403],{"class":3793},[66,85437,85438],{"class":3793}," .sub-total",[66,85440,17375],{"class":76},[66,85442,85443,85445,85447,85449,85451],{"class":68,"line":11600},[66,85444,56703],{"class":102},[66,85446,53221],{"class":76},[66,85448,2629],{"class":102},[66,85450,53276],{"class":72},[66,85452,3135],{"class":76},[66,85454,85455,85457,85459,85461],{"class":68,"line":11605},[66,85456,59196],{"class":102},[66,85458,53221],{"class":76},[66,85460,80718],{"class":102},[66,85462,3135],{"class":76},[66,85464,85465,85467,85469,85471],{"class":68,"line":11610},[66,85466,63616],{"class":102},[66,85468,53221],{"class":76},[66,85470,304],{"class":102},[66,85472,3135],{"class":76},[66,85474,85475],{"class":68,"line":11619},[66,85476,4013],{"class":76},[66,85478,85479],{"class":68,"line":11624},[66,85480,109],{"emptyLinePlaceholder":108},[66,85482,85483,85485,85487],{"class":68,"line":11630},[66,85484,80403],{"class":3793},[66,85486,80735],{"class":3793},[66,85488,33259],{"class":76},[66,85490,85491,85493,85496],{"class":68,"line":11651},[66,85492,80403],{"class":3793},[66,85494,85495],{"class":3793}," .sub-total::before",[66,85497,33259],{"class":76},[66,85499,85500,85503],{"class":68,"line":11657},[66,85501,85502],{"class":3793},"    .amount::before",[66,85504,17375],{"class":76},[66,85506,85507,85509,85511,85513],{"class":68,"line":11671},[66,85508,80742],{"class":102},[66,85510,53221],{"class":76},[66,85512,80747],{"class":356},[66,85514,3135],{"class":76},[66,85516,85517,85519,85521,85523,85525],{"class":68,"line":11677},[66,85518,56703],{"class":102},[66,85520,53221],{"class":76},[66,85522,2477],{"class":102},[66,85524,53276],{"class":72},[66,85526,3135],{"class":76},[66,85528,85529],{"class":68,"line":11704},[66,85530,4013],{"class":76},[66,85532,85533],{"class":68,"line":11713},[66,85534,109],{"emptyLinePlaceholder":108},[66,85536,85537,85539,85542],{"class":68,"line":11719},[66,85538,80403],{"class":3793},[66,85540,85541],{"class":3793}," .spec",[66,85543,17375],{"class":76},[66,85545,85546,85548,85550,85552],{"class":68,"line":11727},[66,85547,63616],{"class":102},[66,85549,53221],{"class":76},[66,85551,795],{"class":102},[66,85553,3135],{"class":76},[66,85555,85556,85558,85560,85563],{"class":68,"line":11732},[66,85557,59196],{"class":102},[66,85559,53221],{"class":76},[66,85561,85562],{"class":102},"#888",[66,85564,3135],{"class":76},[66,85566,85567,85569,85571,85573,85575],{"class":68,"line":18407},[66,85568,56703],{"class":102},[66,85570,53221],{"class":76},[66,85572,2528],{"class":102},[66,85574,53276],{"class":72},[66,85576,3135],{"class":76},[66,85578,85579,85581,85583,85585,85587],{"class":68,"line":18413},[66,85580,63779],{"class":102},[66,85582,53221],{"class":76},[66,85584,2679],{"class":102},[66,85586,53276],{"class":72},[66,85588,3135],{"class":76},[66,85590,85591],{"class":68,"line":18436},[66,85592,4013],{"class":76},[66,85594,85595],{"class":68,"line":18442},[66,85596,109],{"emptyLinePlaceholder":108},[66,85598,85599,85601,85604],{"class":68,"line":18465},[66,85600,80403],{"class":3793},[66,85602,85603],{"class":3793}," .count",[66,85605,17375],{"class":76},[66,85607,85608,85610,85612,85614],{"class":68,"line":18479},[66,85609,63616],{"class":102},[66,85611,53221],{"class":76},[66,85613,304],{"class":102},[66,85615,3135],{"class":76},[66,85617,85618,85620,85622,85625],{"class":68,"line":18499},[66,85619,59196],{"class":102},[66,85621,53221],{"class":76},[66,85623,85624],{"class":102},"#aaa",[66,85626,3135],{"class":76},[66,85628,85629],{"class":68,"line":18505},[66,85630,4013],{"class":76},[66,85632,85633],{"class":68,"line":18516},[66,85634,109],{"emptyLinePlaceholder":108},[66,85636,85637,85639],{"class":68,"line":18539},[66,85638,74254],{"class":3793},[66,85640,17375],{"class":76},[66,85642,85643,85645,85647,85649,85651],{"class":68,"line":18561},[66,85644,56552],{"class":102},[66,85646,53221],{"class":76},[66,85648,80352],{"class":102},[66,85650,53276],{"class":72},[66,85652,3135],{"class":76},[66,85654,85655,85657,85659,85661,85663],{"class":68,"line":18566},[66,85656,56487],{"class":102},[66,85658,53221],{"class":76},[66,85660,2183],{"class":102},[66,85662,53340],{"class":102},[66,85664,3135],{"class":76},[66,85666,85667,85669,85671,85673],{"class":68,"line":18572},[66,85668,56790],{"class":102},[66,85670,53221],{"class":76},[66,85672,53261],{"class":102},[66,85674,3135],{"class":76},[66,85676,85677,85679,85681,85683],{"class":68,"line":18586},[66,85678,56801],{"class":102},[66,85680,53221],{"class":76},[66,85682,53364],{"class":102},[66,85684,3135],{"class":76},[66,85686,85687,85690,85692,85694,85696,85698,85701],{"class":68,"line":18599},[66,85688,85689],{"class":102},"      border-top",[66,85691,53221],{"class":76},[66,85693,304],{"class":102},[66,85695,53276],{"class":72},[66,85697,53305],{"class":102},[66,85699,85700],{"class":102}," #4e4e4e",[66,85702,3135],{"class":76},[66,85704,85705,85707,85709,85711,85713],{"class":68,"line":18604},[66,85706,56476],{"class":102},[66,85708,53221],{"class":76},[66,85710,2679],{"class":102},[66,85712,53276],{"class":72},[66,85714,3135],{"class":76},[66,85716,85717],{"class":68,"line":18618},[66,85718,4013],{"class":76},[66,85720,85721],{"class":68,"line":18623},[66,85722,109],{"emptyLinePlaceholder":108},[66,85724,85725,85727,85730],{"class":68,"line":18629},[66,85726,74254],{"class":3793},[66,85728,85729],{"class":3793}," .amount",[66,85731,17375],{"class":76},[66,85733,85734,85736,85738,85740,85742],{"class":68,"line":18634},[66,85735,56703],{"class":102},[66,85737,53221],{"class":76},[66,85739,2629],{"class":102},[66,85741,53276],{"class":72},[66,85743,3135],{"class":76},[66,85745,85746,85748,85750,85752],{"class":68,"line":18648},[66,85747,59196],{"class":102},[66,85749,53221],{"class":76},[66,85751,80718],{"class":102},[66,85753,3135],{"class":76},[66,85755,85756,85758,85760,85762],{"class":68,"line":18653},[66,85757,64113],{"class":102},[66,85759,53221],{"class":76},[66,85761,53273],{"class":102},[66,85763,3135],{"class":76},[66,85765,85766,85768,85770,85772,85774],{"class":68,"line":18658},[66,85767,63529],{"class":102},[66,85769,53221],{"class":76},[66,85771,2635],{"class":102},[66,85773,53276],{"class":72},[66,85775,3135],{"class":76},[66,85777,85778],{"class":68,"line":18672},[66,85779,4013],{"class":76},[66,85781,85782,85784,85786],{"class":68,"line":18684},[66,85783,54199],{"class":76},[66,85785,1903],{"class":53084},[66,85787,53091],{"class":76},[66,85789,85790,85792,85794],{"class":68,"line":18689},[66,85791,53569],{"class":76},[66,85793,53118],{"class":53084},[66,85795,53091],{"class":76},[66,85797,85798],{"class":68,"line":18702},[66,85799,109],{"emptyLinePlaceholder":108},[66,85801,85802,85804,85806],{"class":68,"line":18707},[66,85803,413],{"class":76},[66,85805,53584],{"class":53084},[66,85807,53091],{"class":76},[66,85809,85810,85812,85814,85816,85818,85820],{"class":68,"line":18712},[66,85811,53928],{"class":76},[66,85813,53395],{"class":53084},[66,85815,55268],{"class":3793},[66,85817,99],{"class":76},[66,85819,64387],{"class":356},[66,85821,53091],{"class":76},[66,85823,85824,85826,85828],{"class":68,"line":18717},[66,85825,54199],{"class":76},[66,85827,53395],{"class":53084},[66,85829,53091],{"class":76},[66,85831,85832,85834,85836,85838,85840,85842],{"class":68,"line":18730},[66,85833,53928],{"class":76},[66,85835,53395],{"class":53084},[66,85837,55268],{"class":3793},[66,85839,99],{"class":76},[66,85841,64359],{"class":356},[66,85843,53091],{"class":76},[66,85845,85846,85848,85850,85853,85855,85857,85859,85862,85864,85866,85868,85870],{"class":68,"line":18735},[66,85847,53125],{"class":76},[66,85849,53395],{"class":53084},[66,85851,85852],{"class":76},">合计：\u003C",[66,85854,66],{"class":53084},[66,85856,55268],{"class":3793},[66,85858,99],{"class":76},[66,85860,85861],{"class":356},"\"amount\"",[66,85863,57095],{"class":76},[66,85865,66],{"class":53084},[66,85867,57095],{"class":76},[66,85869,53395],{"class":53084},[66,85871,53091],{"class":76},[66,85873,85874,85876,85878],{"class":68,"line":34423},[66,85875,54199],{"class":76},[66,85877,53395],{"class":53084},[66,85879,53091],{"class":76},[66,85881,85882,85884,85886],{"class":68,"line":34429},[66,85883,53928],{"class":76},[66,85885,53597],{"class":53084},[66,85887,53091],{"class":76},[66,85889,85890,85892,85894,85896],{"class":68,"line":34435},[66,85891,13027],{"class":72},[66,85893,81155],{"class":102},[66,85895,15369],{"class":72},[66,85897,57228],{"class":76},[66,85899,85900],{"class":68,"line":34441},[66,85901,81164],{"class":76},[66,85903,85904,85906,85908],{"class":68,"line":34447},[66,85905,81169],{"class":76},[66,85907,81172],{"class":356},[66,85909,33259],{"class":76},[66,85911,85912,85914,85916],{"class":68,"line":34458},[66,85913,81179],{"class":76},[66,85915,81182],{"class":356},[66,85917,33259],{"class":76},[66,85919,85920,85922,85925],{"class":68,"line":34464},[66,85921,81189],{"class":76},[66,85923,85924],{"class":102},"289.9",[66,85926,33259],{"class":76},[66,85928,85929,85931,85933],{"class":68,"line":34484},[66,85930,81199],{"class":76},[66,85932,81202],{"class":356},[66,85934,33259],{"class":76},[66,85936,85937,85940,85942],{"class":68,"line":34490},[66,85938,85939],{"class":76},"        count: ",[66,85941,795],{"class":102},[66,85943,33259],{"class":76},[66,85945,85946,85949,85952],{"class":68,"line":34501},[66,85947,85948],{"class":76},"        spec: { color: ",[66,85950,85951],{"class":356},"'白色'",[66,85953,57385],{"class":76},[66,85955,85956],{"class":68,"line":34507},[66,85957,79671],{"class":76},[66,85959,85960],{"class":68,"line":34513},[66,85961,81164],{"class":76},[66,85963,85964,85966,85968],{"class":68,"line":34519},[66,85965,81169],{"class":76},[66,85967,81263],{"class":356},[66,85969,33259],{"class":76},[66,85971,85972,85974,85976],{"class":68,"line":34525},[66,85973,81179],{"class":76},[66,85975,81272],{"class":356},[66,85977,33259],{"class":76},[66,85979,85980,85982,85985],{"class":68,"line":34531},[66,85981,81189],{"class":76},[66,85983,85984],{"class":102},"109.8",[66,85986,33259],{"class":76},[66,85988,85989,85991,85993],{"class":68,"line":34537},[66,85990,81199],{"class":76},[66,85992,81290],{"class":356},[66,85994,33259],{"class":76},[66,85996,85997,85999,86001],{"class":68,"line":34543},[66,85998,85939],{"class":76},[66,86000,1520],{"class":102},[66,86002,33259],{"class":76},[66,86004,86005,86008,86010,86012,86014],{"class":68,"line":34563},[66,86006,86007],{"class":76},"        spec: { size: ",[66,86009,83680],{"class":356},[66,86011,57245],{"class":76},[66,86013,83685],{"class":356},[66,86015,57385],{"class":76},[66,86017,86018],{"class":68,"line":34569},[66,86019,79671],{"class":76},[66,86021,86022],{"class":68,"line":34585},[66,86023,81164],{"class":76},[66,86025,86026,86028,86030],{"class":68,"line":34591},[66,86027,81169],{"class":76},[66,86029,81307],{"class":356},[66,86031,33259],{"class":76},[66,86033,86034,86036,86038],{"class":68,"line":34605},[66,86035,81179],{"class":76},[66,86037,81316],{"class":356},[66,86039,33259],{"class":76},[66,86041,86042,86044,86047],{"class":68,"line":34611},[66,86043,81189],{"class":76},[66,86045,86046],{"class":102},"488",[66,86048,33259],{"class":76},[66,86050,86051,86053,86055],{"class":68,"line":34626},[66,86052,81199],{"class":76},[66,86054,81334],{"class":356},[66,86056,33259],{"class":76},[66,86058,86059,86061,86063],{"class":68,"line":34632},[66,86060,85939],{"class":76},[66,86062,304],{"class":102},[66,86064,33259],{"class":76},[66,86066,86067,86069,86072,86075,86078],{"class":68,"line":34641},[66,86068,85948],{"class":76},[66,86070,86071],{"class":356},"'青色'",[66,86073,86074],{"class":76},", sum: ",[66,86076,86077],{"class":356},"'一大四小'",[66,86079,57385],{"class":76},[66,86081,86082],{"class":68,"line":34647},[66,86083,79671],{"class":76},[66,86085,86086],{"class":68,"line":34656},[66,86087,81164],{"class":76},[66,86089,86090,86092,86094],{"class":68,"line":34662},[66,86091,81169],{"class":76},[66,86093,81351],{"class":356},[66,86095,33259],{"class":76},[66,86097,86098,86100,86102],{"class":68,"line":34668},[66,86099,81179],{"class":76},[66,86101,81360],{"class":356},[66,86103,33259],{"class":76},[66,86105,86106,86108,86111],{"class":68,"line":34677},[66,86107,81189],{"class":76},[66,86109,86110],{"class":102},"139",[66,86112,33259],{"class":76},[66,86114,86115,86117,86119],{"class":68,"line":34683},[66,86116,81199],{"class":76},[66,86118,81378],{"class":356},[66,86120,33259],{"class":76},[66,86122,86123,86125,86127],{"class":68,"line":34694},[66,86124,85939],{"class":76},[66,86126,304],{"class":102},[66,86128,33259],{"class":76},[66,86130,86131,86133,86136,86138,86141],{"class":68,"line":34700},[66,86132,86007],{"class":76},[66,86134,86135],{"class":356},"'小号'",[66,86137,57245],{"class":76},[66,86139,86140],{"class":356},"'紫色'",[66,86142,57251],{"class":76},[66,86144,86145,86148],{"class":68,"line":34719},[66,86146,86147],{"class":76},"        gift: ",[66,86149,86150],{"class":356},"'50g茶叶,清洗球'\n",[66,86152,86153],{"class":68,"line":34725},[66,86154,54180],{"class":76},[66,86156,86157],{"class":68,"line":34736},[66,86158,54891],{"class":76},[66,86160,86161],{"class":68,"line":34742},[66,86162,86163],{"class":758},"    \u002F\u002F  1.根据数据渲染页面\n",[66,86165,86166,86168,86170,86172,86174,86176,86178,86180,86182,86184,86186,86188],{"class":68,"line":34762},[66,86167,54189],{"class":76},[66,86169,56180],{"class":3793},[66,86171,348],{"class":76},[66,86173,81679],{"class":356},[66,86175,76028],{"class":76},[66,86177,99],{"class":72},[66,86179,81826],{"class":76},[66,86181,75823],{"class":3793},[66,86183,348],{"class":76},[66,86185,81573],{"class":1234},[66,86187,81576],{"class":72},[66,86189,17375],{"class":76},[66,86191,86192],{"class":68,"line":34778},[66,86193,86194],{"class":758},"      \u002F\u002F 对象解构\n",[66,86196,86197,86199,86201,86203,86205,86207,86209,86211,86213,86215,86217,86220,86222,86225,86227,86229],{"class":68,"line":34784},[66,86198,60008],{"class":72},[66,86200,81585],{"class":76},[66,86202,81598],{"class":102},[66,86204,307],{"class":76},[66,86206,81588],{"class":102},[66,86208,307],{"class":76},[66,86210,454],{"class":102},[66,86212,307],{"class":76},[66,86214,81593],{"class":102},[66,86216,307],{"class":76},[66,86218,86219],{"class":102},"spec",[66,86221,307],{"class":76},[66,86223,86224],{"class":102},"gift",[66,86226,81601],{"class":76},[66,86228,99],{"class":72},[66,86230,81606],{"class":76},[66,86232,86233],{"class":68,"line":34798},[66,86234,86235],{"class":758},"      \u002F\u002F 规格文字模块处理\n",[66,86237,86238,86240,86243,86245,86247,86249,86251,86253,86255,86257],{"class":68,"line":34804},[66,86239,60008],{"class":72},[66,86241,86242],{"class":102}," text",[66,86244,15369],{"class":72},[66,86246,83715],{"class":76},[66,86248,83718],{"class":3793},[66,86250,83721],{"class":76},[66,86252,76002],{"class":3793},[66,86254,348],{"class":76},[66,86256,83728],{"class":356},[66,86258,313],{"class":76},[66,86260,86261],{"class":68,"line":34810},[66,86262,86263],{"class":758},"      \u002F\u002F 处理赠品模块\n",[66,86265,86266,86268,86270,86272,86275,86277,86279,86281,86283,86286,86288,86290,86292,86294,86296,86299,86301,86304,86306,86308,86310,86312,86314,86316],{"class":68,"line":34821},[66,86267,60008],{"class":72},[66,86269,75698],{"class":102},[66,86271,15369],{"class":72},[66,86273,86274],{"class":76}," gift ",[66,86276,2961],{"class":72},[66,86278,84889],{"class":76},[66,86280,84892],{"class":3793},[66,86282,348],{"class":76},[66,86284,86285],{"class":356},"','",[66,86287,32620],{"class":76},[66,86289,75823],{"class":3793},[66,86291,348],{"class":76},[66,86293,81573],{"class":1234},[66,86295,81576],{"class":72},[66,86297,86298],{"class":356}," `\u003Cspan class=\"tag\">【赠品】${",[66,86300,81573],{"class":76},[66,86302,86303],{"class":356},"}\u003C\u002Fspan>`",[66,86305,32620],{"class":76},[66,86307,76002],{"class":3793},[66,86309,348],{"class":76},[66,86311,76007],{"class":356},[66,86313,15519],{"class":76},[66,86315,2838],{"class":72},[66,86317,71883],{"class":356},[66,86319,86320],{"class":68,"line":34827},[66,86321,86322],{"class":758},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[66,86324,86325,86327,86330,86332,86335,86337,86339,86341,86344,86346,86348,86350,86353,86355,86357],{"class":68,"line":34833},[66,86326,60008],{"class":72},[66,86328,86329],{"class":102}," subtotal",[66,86331,15369],{"class":72},[66,86333,86334],{"class":76}," ((price ",[66,86336,1208],{"class":72},[66,86338,212],{"class":102},[66,86340,8329],{"class":72},[66,86342,86343],{"class":76}," count) ",[66,86345,2563],{"class":72},[66,86347,212],{"class":102},[66,86349,32620],{"class":76},[66,86351,86352],{"class":3793},"toFixed",[66,86354,348],{"class":76},[66,86356,795],{"class":102},[66,86358,313],{"class":76},[66,86360,86361],{"class":68,"line":34843},[66,86362,109],{"emptyLinePlaceholder":108},[66,86364,86365,86367],{"class":68,"line":34849},[66,86366,75761],{"class":72},[66,86368,71947],{"class":356},[66,86370,86371],{"class":68,"line":34860},[66,86372,86373],{"class":356},"        \u003Cdiv class=\"item\">\n",[66,86375,86376,86379,86381],{"class":68,"line":34866},[66,86377,86378],{"class":356},"          \u003Cimg src=\"${",[66,86380,81598],{"class":76},[66,86382,81630],{"class":356},[66,86384,86385,86388,86390,86393,86395],{"class":68,"line":34876},[66,86386,86387],{"class":356},"          \u003Cp class=\"name\">${",[66,86389,81588],{"class":76},[66,86391,86392],{"class":356},"}${",[66,86394,3144],{"class":76},[66,86396,81640],{"class":356},[66,86398,86399,86402,86404],{"class":68,"line":34881},[66,86400,86401],{"class":356},"          \u003Cp class=\"spec\">${",[66,86403,555],{"class":76},[66,86405,81640],{"class":356},[66,86407,86408,86411,86413,86415,86417,86419,86421,86423],{"class":68,"line":34887},[66,86409,86410],{"class":356},"          \u003Cp class=\"price\">${",[66,86412,81593],{"class":76},[66,86414,2537],{"class":356},[66,86416,86352],{"class":3793},[66,86418,348],{"class":356},[66,86420,795],{"class":102},[66,86422,2413],{"class":356},[66,86424,81640],{"class":356},[66,86426,86427,86430,86432],{"class":68,"line":34936},[66,86428,86429],{"class":356},"          \u003Cp class=\"count\">x${",[66,86431,454],{"class":76},[66,86433,81640],{"class":356},[66,86435,86436,86439,86442],{"class":68,"line":34983},[66,86437,86438],{"class":356},"          \u003Cp class=\"sub-total\">${",[66,86440,86441],{"class":76},"subtotal",[66,86443,81640],{"class":356},[66,86445,86446],{"class":68,"line":34988},[66,86447,86448],{"class":356},"        \u003C\u002Fdiv> \n",[66,86450,86451],{"class":68,"line":34994},[66,86452,86453],{"class":356},"             `\n",[66,86455,86456,86459,86461,86463,86465],{"class":68,"line":35013},[66,86457,86458],{"class":76},"    }).",[66,86460,76002],{"class":3793},[66,86462,348],{"class":76},[66,86464,76007],{"class":356},[66,86466,313],{"class":76},[66,86468,86469],{"class":68,"line":35019},[66,86470,86471],{"class":758},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[66,86473,86474,86476,86478,86480,86482,86485,86487,86490,86492,86494,86496,86499,86502,86504,86507,86509,86511,86513,86516,86518,86520,86522,86524],{"class":68,"line":35038},[66,86475,13027],{"class":72},[66,86477,64564],{"class":102},[66,86479,15369],{"class":72},[66,86481,81826],{"class":76},[66,86483,86484],{"class":3793},"reduce",[66,86486,4202],{"class":76},[66,86488,86489],{"class":1234},"prev",[66,86491,307],{"class":76},[66,86493,81573],{"class":1234},[66,86495,15519],{"class":76},[66,86497,86498],{"class":72},"=>",[66,86500,86501],{"class":76}," prev ",[66,86503,1184],{"class":72},[66,86505,86506],{"class":76}," (item.price ",[66,86508,1208],{"class":72},[66,86510,212],{"class":102},[66,86512,8329],{"class":72},[66,86514,86515],{"class":76}," item.count) ",[66,86517,2563],{"class":72},[66,86519,212],{"class":102},[66,86521,307],{"class":76},[66,86523,2183],{"class":102},[66,86525,313],{"class":76},[66,86527,86528,86530,86532,86534,86537,86539,86541,86544,86546,86548,86550],{"class":68,"line":35044},[66,86529,54189],{"class":76},[66,86531,56180],{"class":3793},[66,86533,348],{"class":76},[66,86535,86536],{"class":356},"'.amount'",[66,86538,76028],{"class":76},[66,86540,99],{"class":72},[66,86542,86543],{"class":76}," total.",[66,86545,86352],{"class":3793},[66,86547,348],{"class":76},[66,86549,795],{"class":102},[66,86551,313],{"class":76},[66,86553,86554,86556,86558],{"class":68,"line":35050},[66,86555,54199],{"class":76},[66,86557,53597],{"class":53084},[66,86559,53091],{"class":76},[66,86561,86562,86564,86566],{"class":68,"line":35060},[66,86563,53569],{"class":76},[66,86565,53584],{"class":53084},[66,86567,53091],{"class":76},[66,86569,86570],{"class":68,"line":35065},[66,86571,109],{"emptyLinePlaceholder":108},[66,86573,86574,86576,86578],{"class":68,"line":35071},[66,86575,53569],{"class":76},[66,86577,52419],{"class":53084},[66,86579,53091],{"class":76},[14,86581,86583],{"id":86582},"_411-编程思想","4.11 编程思想",[484,86585,86587],{"id":86586},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,86589,86590,86593],{},[2141,86591,86592],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,86595,86596],{},"调用就可以了",[19,86598,86599],{},[3304,86600],{"alt":62,"src":86601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[484,86603,86605],{"id":86604},"_4112-面向对象","4.11.2 面向对象",[19,86607,86608],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,86610,86611],{},[3304,86612],{"alt":62,"src":86613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,86615,86616],{},"面向对象的特性：",[2982,86618,86619,86622,86625],{},[34,86620,86621],{},"封装性",[34,86623,86624],{},"继承性",[34,86626,86627],{},"多态性",[484,86629,86631],{"id":86630},"_4113-两者比较","4.11.3 两者比较",[19,86633,86634],{},[3304,86635],{"alt":62,"src":86636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,86638,86640],{"id":86639},"_412-构造函数回顾","4.12 构造函数回顾",[19,86642,86643],{},[3304,86644],{"alt":62,"src":86645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,86647,86648],{},[3304,86649],{"alt":62,"src":86650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,86652,86653],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,86655,86656],{},[3304,86657],{"alt":62,"src":86658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,86660,86662],{"id":86661},"_413-原型","4.13 原型",[484,86664,86666],{"id":86665},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,86668,86669],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,86671,86672],{},[3304,86673],{"alt":62,"src":86674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,86676,86677],{},[3304,86678],{"alt":62,"src":86679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,86681,86682],{},"原型是构造函数的属性，它也是一个对象",[19,86684,86685],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,86687,86688],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[57,86690,86692],{"className":54849,"code":86691,"language":54851,"meta":62,"style":62},"\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",[23,86693,86694,86702,86707,86715,86720,86725,86730,86735,86740,86744,86748,86752,86757,86762,86766,86771,86776,86781,86786,86791,86795,86803],{"__ignoreMap":62},[66,86695,86696,86698,86700],{"class":68,"line":69},[66,86697,413],{"class":76},[66,86699,53584],{"class":53084},[66,86701,53091],{"class":76},[66,86703,86704],{"class":68,"line":80},[66,86705,86706],{"class":758},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[66,86708,86709,86711,86713],{"class":68,"line":112},[66,86710,53928],{"class":76},[66,86712,53597],{"class":53084},[66,86714,53091],{"class":76},[66,86716,86717],{"class":68,"line":129},[66,86718,86719],{"class":76},"    function Star(uname, age) {\n",[66,86721,86722],{"class":68,"line":138},[66,86723,86724],{"class":76},"      this.uname = uname,\n",[66,86726,86727],{"class":68,"line":227},[66,86728,86729],{"class":76},"        this.age = age\n",[66,86731,86732],{"class":68,"line":236},[66,86733,86734],{"class":76},"      \u002F\u002F this.sing = function () {\n",[66,86736,86737],{"class":68,"line":241},[66,86738,86739],{"class":76},"      \u002F\u002F   console.log('唱歌')\n",[66,86741,86742],{"class":68,"line":372},[66,86743,109],{"emptyLinePlaceholder":108},[66,86745,86746],{"class":68,"line":377},[66,86747,61817],{"class":76},[66,86749,86750],{"class":68,"line":392},[66,86751,4013],{"class":76},[66,86753,86754],{"class":68,"line":405},[66,86755,86756],{"class":76},"    Star.prototype.sing = function () {\n",[66,86758,86759],{"class":68,"line":418},[66,86760,86761],{"class":76},"      console.log('唱歌')\n",[66,86763,86764],{"class":68,"line":430},[66,86765,4013],{"class":76},[66,86767,86768],{"class":68,"line":438},[66,86769,86770],{"class":76},"    \u002F\u002F console.dir(Star.prototype)\n",[66,86772,86773],{"class":68,"line":465},[66,86774,86775],{"class":76},"    const pink = new Star('pink', 18)\n",[66,86777,86778],{"class":68,"line":1805},[66,86779,86780],{"class":76},"    const red = new Star('red', 20)\n",[66,86782,86783],{"class":68,"line":1817},[66,86784,86785],{"class":76},"    pink.sing()\n",[66,86787,86788],{"class":68,"line":1822},[66,86789,86790],{"class":76},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[66,86792,86793],{"class":68,"line":1829},[66,86794,109],{"emptyLinePlaceholder":108},[66,86796,86797,86799,86801],{"class":68,"line":3529},[66,86798,54199],{"class":76},[66,86800,53597],{"class":53084},[66,86802,53091],{"class":76},[66,86804,86805,86807,86809],{"class":68,"line":3557},[66,86806,53569],{"class":76},[66,86808,53584],{"class":53084},[66,86810,53091],{"class":76},[19,86812,86813],{},[3304,86814],{"alt":62,"src":86815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[57,86817,86819],{"className":54849,"code":86818,"language":54851,"meta":62,"style":62},"\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",[23,86820,86821,86829,86837,86842,86847,86852,86857,86861,86866,86871,86876,86880,86885,86889,86893,86898,86902,86910],{"__ignoreMap":62},[66,86822,86823,86825,86827],{"class":68,"line":69},[66,86824,413],{"class":76},[66,86826,53584],{"class":53084},[66,86828,53091],{"class":76},[66,86830,86831,86833,86835],{"class":68,"line":80},[66,86832,53928],{"class":76},[66,86834,53597],{"class":53084},[66,86836,53091],{"class":76},[66,86838,86839],{"class":68,"line":112},[66,86840,86841],{"class":76},"    let that\n",[66,86843,86844],{"class":68,"line":129},[66,86845,86846],{"class":76},"    function Star(uname) {\n",[66,86848,86849],{"class":68,"line":138},[66,86850,86851],{"class":76},"      this.uname = uname\n",[66,86853,86854],{"class":68,"line":227},[66,86855,86856],{"class":76},"      that = this\n",[66,86858,86859],{"class":68,"line":236},[66,86860,4013],{"class":76},[66,86862,86863],{"class":68,"line":241},[66,86864,86865],{"class":76},"    \u002F\u002F 实例对象是 ldh\n",[66,86867,86868],{"class":68,"line":372},[66,86869,86870],{"class":76},"    const ldh = new Star('刘德华')\n",[66,86872,86873],{"class":68,"line":377},[66,86874,86875],{"class":76},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[66,86877,86878],{"class":68,"line":392},[66,86879,109],{"emptyLinePlaceholder":108},[66,86881,86882],{"class":68,"line":405},[66,86883,86884],{"class":76},"    Star.sing = function () {\n",[66,86886,86887],{"class":68,"line":418},[66,86888,86761],{"class":76},[66,86890,86891],{"class":68,"line":430},[66,86892,4013],{"class":76},[66,86894,86895],{"class":68,"line":438},[66,86896,86897],{"class":76},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[66,86899,86900],{"class":68,"line":465},[66,86901,109],{"emptyLinePlaceholder":108},[66,86903,86904,86906,86908],{"class":68,"line":1805},[66,86905,54199],{"class":76},[66,86907,53597],{"class":53084},[66,86909,53091],{"class":76},[66,86911,86912,86914,86916],{"class":68,"line":1817},[66,86913,53569],{"class":76},[66,86915,53584],{"class":53084},[66,86917,53091],{"class":76},[19,86919,86920],{},"构造函数的this指向的是实例对象；",[19,86922,86923],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[484,86925,86927],{"id":86926},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,86929,86930],{},[3304,86931],{"alt":62,"src":86932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[57,86934,86936],{"className":54849,"code":86935,"language":54851,"meta":62,"style":62},"\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",[23,86937,86938,86946,86954,86959,86964,86969,86974,86979,86984,86989,86994,86999,87004,87008,87013,87018,87023,87028,87032,87037,87042,87047,87052,87056,87061,87066,87071,87076,87080,87085,87089,87097],{"__ignoreMap":62},[66,86939,86940,86942,86944],{"class":68,"line":69},[66,86941,413],{"class":76},[66,86943,53584],{"class":53084},[66,86945,53091],{"class":76},[66,86947,86948,86950,86952],{"class":68,"line":80},[66,86949,53928],{"class":76},[66,86951,53597],{"class":53084},[66,86953,53091],{"class":76},[66,86955,86956],{"class":68,"line":112},[66,86957,86958],{"class":76},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[66,86960,86961],{"class":68,"line":129},[66,86962,86963],{"class":76},"    const arr = [1, 2, 3]\n",[66,86965,86966],{"class":68,"line":138},[66,86967,86968],{"class":76},"    \u002F\u002F 自己定义数组的扩展方法\n",[66,86970,86971],{"class":68,"line":227},[66,86972,86973],{"class":76},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[66,86975,86976],{"class":68,"line":236},[66,86977,86978],{"class":76},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[66,86980,86981],{"class":68,"line":241},[66,86982,86983],{"class":76},"    \u002F\u002F ①.最大值\n",[66,86985,86986],{"class":68,"line":372},[66,86987,86988],{"class":76},"    Array.prototype.max = function () {\n",[66,86990,86991],{"class":68,"line":377},[66,86992,86993],{"class":76},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[66,86995,86996],{"class":68,"line":392},[66,86997,86998],{"class":76},"      return Math.max(...this)\n",[66,87000,87001],{"class":68,"line":405},[66,87002,87003],{"class":76},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[66,87005,87006],{"class":68,"line":418},[66,87007,4013],{"class":76},[66,87009,87010],{"class":68,"line":430},[66,87011,87012],{"class":76},"    console.log(arr.max())\n",[66,87014,87015],{"class":68,"line":438},[66,87016,87017],{"class":76},"    \u002F\u002F ②最小值\n",[66,87019,87020],{"class":68,"line":465},[66,87021,87022],{"class":76},"    Array.prototype.min = function () {\n",[66,87024,87025],{"class":68,"line":1805},[66,87026,87027],{"class":76},"      return Math.min(...this)\n",[66,87029,87030],{"class":68,"line":1817},[66,87031,4013],{"class":76},[66,87033,87034],{"class":68,"line":1822},[66,87035,87036],{"class":76},"    console.log(arr.min())\n",[66,87038,87039],{"class":68,"line":1829},[66,87040,87041],{"class":76},"    \u002F\u002F③求和\n",[66,87043,87044],{"class":68,"line":3529},[66,87045,87046],{"class":76},"    Array.prototype.sum = function () {\n",[66,87048,87049],{"class":68,"line":3557},[66,87050,87051],{"class":76},"      return this.reduce((prev, current) => prev + current, 0)\n",[66,87053,87054],{"class":68,"line":3562},[66,87055,4013],{"class":76},[66,87057,87058],{"class":68,"line":3579},[66,87059,87060],{"class":76},"    console.log(arr.sum())\n",[66,87062,87063],{"class":68,"line":3584},[66,87064,87065],{"class":76},"    \u002F\u002F ③排序\n",[66,87067,87068],{"class":68,"line":3589},[66,87069,87070],{"class":76},"    Array.prototype.rever = function () {\n",[66,87072,87073],{"class":68,"line":3594},[66,87074,87075],{"class":76},"      return this.reverse()\n",[66,87077,87078],{"class":68,"line":3608},[66,87079,4013],{"class":76},[66,87081,87082],{"class":68,"line":3613},[66,87083,87084],{"class":76},"    console.log(arr.rever())\n",[66,87086,87087],{"class":68,"line":4401},[66,87088,109],{"emptyLinePlaceholder":108},[66,87090,87091,87093,87095],{"class":68,"line":4415},[66,87092,54199],{"class":76},[66,87094,53597],{"class":53084},[66,87096,53091],{"class":76},[66,87098,87099,87101,87103],{"class":68,"line":4423},[66,87100,53569],{"class":76},[66,87102,53584],{"class":53084},[66,87104,53091],{"class":76},[19,87106,87107],{},[3304,87108],{"alt":62,"src":87109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[484,87111,87113],{"id":87112},"_4133-constructor-属性","4.13.3 constructor 属性",[19,87115,87116],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,87118,87119],{},[3304,87120],{"alt":62,"src":87121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[57,87123,87125],{"className":54849,"code":87124,"language":54851,"meta":62,"style":62},"\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",[23,87126,87127,87135,87143,87148,87153,87157,87162,87167,87172,87180],{"__ignoreMap":62},[66,87128,87129,87131,87133],{"class":68,"line":69},[66,87130,413],{"class":76},[66,87132,53584],{"class":53084},[66,87134,53091],{"class":76},[66,87136,87137,87139,87141],{"class":68,"line":80},[66,87138,53928],{"class":76},[66,87140,53597],{"class":53084},[66,87142,53091],{"class":76},[66,87144,87145],{"class":68,"line":112},[66,87146,87147],{"class":76},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[66,87149,87150],{"class":68,"line":129},[66,87151,87152],{"class":76},"    function Star() {\n",[66,87154,87155],{"class":68,"line":138},[66,87156,4013],{"class":76},[66,87158,87159],{"class":68,"line":227},[66,87160,87161],{"class":76},"    const ldh = new Star()\n",[66,87163,87164],{"class":68,"line":236},[66,87165,87166],{"class":76},"    console.log(Star.prototype)\n",[66,87168,87169],{"class":68,"line":241},[66,87170,87171],{"class":76},"    console.log(Star.prototype.constructor === Star)\n",[66,87173,87174,87176,87178],{"class":68,"line":372},[66,87175,54199],{"class":76},[66,87177,53597],{"class":53084},[66,87179,53091],{"class":76},[66,87181,87182,87184,87186],{"class":68,"line":377},[66,87183,53569],{"class":76},[66,87185,53584],{"class":53084},[66,87187,53091],{"class":76},[19,87189,87190],{},[3304,87191],{"alt":62,"src":87192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,87194,87195],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[57,87197,87199],{"className":54849,"code":87198,"language":54851,"meta":62,"style":62},"  \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",[23,87200,87201,87209,87213,87217,87221,87226,87231,87236,87240,87245,87250,87255,87260,87265,87270,87274,87278,87283,87288,87293,87297,87302,87307,87311,87315,87319],{"__ignoreMap":62},[66,87202,87203,87205,87207],{"class":68,"line":69},[66,87204,53928],{"class":76},[66,87206,53597],{"class":53084},[66,87208,53091],{"class":76},[66,87210,87211],{"class":68,"line":80},[66,87212,87147],{"class":76},[66,87214,87215],{"class":68,"line":112},[66,87216,87152],{"class":76},[66,87218,87219],{"class":68,"line":129},[66,87220,4013],{"class":76},[66,87222,87223],{"class":68,"line":138},[66,87224,87225],{"class":76},"    \u002F\u002F const ldh = new Star()\n",[66,87227,87228],{"class":68,"line":227},[66,87229,87230],{"class":76},"    \u002F\u002F console.log(Star.prototype)\n",[66,87232,87233],{"class":68,"line":236},[66,87234,87235],{"class":76},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[66,87237,87238],{"class":68,"line":241},[66,87239,109],{"emptyLinePlaceholder":108},[66,87241,87242],{"class":68,"line":372},[66,87243,87244],{"class":76},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[66,87246,87247],{"class":68,"line":377},[66,87248,87249],{"class":76},"    \u002F\u002F Star.prototype.sing = function () {\n",[66,87251,87252],{"class":68,"line":392},[66,87253,87254],{"class":76},"    \u002F\u002F   console.log('唱歌')\n",[66,87256,87257],{"class":68,"line":405},[66,87258,87259],{"class":76},"    \u002F\u002F }\n",[66,87261,87262],{"class":68,"line":418},[66,87263,87264],{"class":76},"    \u002F\u002F Star.prototype.dance = function () {\n",[66,87266,87267],{"class":68,"line":430},[66,87268,87269],{"class":76},"    \u002F\u002F   console.log('跳舞')\n",[66,87271,87272],{"class":68,"line":438},[66,87273,87259],{"class":76},[66,87275,87276],{"class":68,"line":465},[66,87277,87166],{"class":76},[66,87279,87280],{"class":68,"line":1805},[66,87281,87282],{"class":76},"    Star.prototype = {\n",[66,87284,87285],{"class":68,"line":1817},[66,87286,87287],{"class":76},"      sing: function () {\n",[66,87289,87290],{"class":68,"line":1822},[66,87291,87292],{"class":76},"        console.log('唱歌')\n",[66,87294,87295],{"class":68,"line":1829},[66,87296,79671],{"class":76},[66,87298,87299],{"class":68,"line":3529},[66,87300,87301],{"class":76},"      dance: function () {\n",[66,87303,87304],{"class":68,"line":3557},[66,87305,87306],{"class":76},"        console.log('跳舞')\n",[66,87308,87309],{"class":68,"line":3562},[66,87310,54180],{"class":76},[66,87312,87313],{"class":68,"line":3579},[66,87314,4013],{"class":76},[66,87316,87317],{"class":68,"line":3584},[66,87318,87166],{"class":76},[66,87320,87321,87323,87325],{"class":68,"line":3589},[66,87322,54199],{"class":76},[66,87324,53597],{"class":53084},[66,87326,53091],{"class":76},[19,87328,87329],{},"进行输出结果后会发现：",[19,87331,87332],{},[3304,87333],{"alt":62,"src":87334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,87336,87337],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,87339,87340],{},"所以，要重新指回创造这个原型对象的构造函数",[57,87342,87344],{"className":72992,"code":87343,"language":72994,"meta":62,"style":62},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[23,87345,87346,87360,87365,87370,87381,87394,87399,87410,87424,87428],{"__ignoreMap":62},[66,87347,87348,87351,87353,87356,87358],{"class":68,"line":69},[66,87349,87350],{"class":102},"Star",[66,87352,2537],{"class":76},[66,87354,87355],{"class":102},"prototype",[66,87357,15369],{"class":72},[66,87359,17375],{"class":76},[66,87361,87362],{"class":68,"line":80},[66,87363,87364],{"class":758},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[66,87366,87367],{"class":68,"line":112},[66,87368,87369],{"class":76},"  constructor: Star,\n",[66,87371,87372,87375,87377,87379],{"class":68,"line":129},[66,87373,87374],{"class":3793},"  sing",[66,87376,53221],{"class":76},[66,87378,56230],{"class":72},[66,87380,56233],{"class":76},[66,87382,87383,87385,87387,87389,87392],{"class":68,"line":138},[66,87384,75532],{"class":76},[66,87386,60027],{"class":3793},[66,87388,348],{"class":76},[66,87390,87391],{"class":356},"'唱歌'",[66,87393,313],{"class":76},[66,87395,87396],{"class":68,"line":227},[66,87397,87398],{"class":76},"   },\n",[66,87400,87401,87404,87406,87408],{"class":68,"line":236},[66,87402,87403],{"class":3793},"   dance",[66,87405,53221],{"class":76},[66,87407,56230],{"class":72},[66,87409,56233],{"class":76},[66,87411,87412,87415,87417,87419,87422],{"class":68,"line":241},[66,87413,87414],{"class":76},"     console.",[66,87416,60027],{"class":3793},[66,87418,348],{"class":76},[66,87420,87421],{"class":356},"'跳舞'",[66,87423,313],{"class":76},[66,87425,87426],{"class":68,"line":372},[66,87427,6125],{"class":76},[66,87429,87430],{"class":68,"line":377},[66,87431,3407],{"class":76},[19,87433,87434],{},[3304,87435],{"alt":62,"src":87436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,87438,87439],{},"总结1：",[19,87441,87442],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,87444,87445],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,87447,87448],{},"constructor指的是他的来源",[19,87450,87451],{},[3304,87452],{"alt":62,"src":87453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,87455,87456],{},[3304,87457],{"alt":62,"src":87458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,87460,87461],{},"总结2：",[19,87463,87464],{},[3304,87465],{"alt":62,"src":87466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,87468,87469],{},[3304,87470],{"alt":62,"src":87471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,87473,87474],{},[3304,87475],{"alt":62,"src":87476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[484,87478,87480],{"id":87479},"_4134-对象原型","4.13.4 对象原型",[19,87482,87483],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,87485,87486],{},"对象原型就是__proto__这个属性",[19,87488,87489],{},[3304,87490],{"alt":62,"src":87491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,87493,87494],{},[3304,87495],{"alt":62,"src":87496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,87498,87499],{},[3304,87500],{"alt":62,"src":87501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,87503,87504],{},[3304,87505],{"alt":62,"src":87506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[57,87508,87510],{"className":54849,"code":87509,"language":54851,"meta":62,"style":62},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[23,87511,87512,87520,87528,87532,87536,87540,87545,87553],{"__ignoreMap":62},[66,87513,87514,87516,87518],{"class":68,"line":69},[66,87515,413],{"class":76},[66,87517,53584],{"class":53084},[66,87519,53091],{"class":76},[66,87521,87522,87524,87526],{"class":68,"line":80},[66,87523,53928],{"class":76},[66,87525,53597],{"class":53084},[66,87527,53091],{"class":76},[66,87529,87530],{"class":68,"line":112},[66,87531,87152],{"class":76},[66,87533,87534],{"class":68,"line":129},[66,87535,4013],{"class":76},[66,87537,87538],{"class":68,"line":138},[66,87539,87161],{"class":76},[66,87541,87542],{"class":68,"line":227},[66,87543,87544],{"class":76},"    console.log(ldh)\n",[66,87546,87547,87549,87551],{"class":68,"line":236},[66,87548,54199],{"class":76},[66,87550,53597],{"class":53084},[66,87552,53091],{"class":76},[66,87554,87555,87557,87559],{"class":68,"line":241},[66,87556,53569],{"class":76},[66,87558,53584],{"class":53084},[66,87560,53091],{"class":76},[19,87562,87563],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,87565,87566],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,87568,87569],{},[3304,87570],{"alt":62,"src":87571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,87573,87574],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,87576,87577],{},"对象原型指向原型对象",[19,87579,87580],{},[3304,87581],{"alt":62,"src":87582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,87584,87585],{},[3304,87586],{"alt":62,"src":87587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,87589,87590],{},[3304,87591],{"alt":62,"src":87592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[484,87594,87596],{"id":87595},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,87598,87599],{},[3304,87600],{"alt":62,"src":87601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[31,87603,87604,87607,87610,87613],{},[34,87605,87606],{},"构造函数通过new的形式实例化得到实例对象",[34,87608,87609],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[34,87611,87612],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[34,87614,87615],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,87617,87618],{},[3304,87619],{"alt":62,"src":87620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,87622,87623],{},"题目梳理：",[19,87625,87626],{},[3304,87627],{"alt":62,"src":87628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[484,87630,87632],{"id":87631},"_4136-原型继承","4.13.6 原型继承",[19,87634,87635],{},[3304,87636],{"alt":62,"src":87637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,87639,87640],{},[3304,87641],{"alt":62,"src":87642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,87644,87645],{},[3304,87646],{"alt":62,"src":87647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,87649,87650],{},[3304,87651],{"alt":62,"src":87652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,87654,87655],{},[3304,87656],{"alt":62,"src":87657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,87659,87660],{},[3304,87661],{"alt":62,"src":87662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,87664,87665],{},[3304,87666],{"alt":62,"src":87667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,87669,87670],{},[3304,87671],{"alt":62,"src":87672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,87674,87675],{},"回顾：构造函数每次new得到对象都是不同的",[484,87677,87679],{"id":87678},"_4137-原型链","4.13.7 原型链",[19,87681,87682],{},[3304,87683],{"alt":62,"src":87684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,87686,87687],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,87689,87690],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,87692,87693],{},"大哥是Object",[19,87695,87696],{},[3304,87697],{"alt":62,"src":87698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,87700,87701],{},[3304,87702],{"alt":62,"src":87703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,87705,87706],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,87708,87709],{},"万物皆对象",[484,87711,87713],{"id":87712},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,87715,87716],{},"模态框",[19,87718,87719],{},"以后遇见这个效果直接使用这个就行",[19,87721,87722],{},[3304,87723],{"alt":62,"src":87724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,87726,87727],{},[3304,87728],{"alt":62,"src":87729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,87731,87732],{},[3304,87733],{"alt":62,"src":87734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,87736,87737],{},[3304,87738],{"alt":62,"src":87739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,87741,87742],{},"补充知识点：",[31,87744,87745],{},[34,87746,87747],{},"append()",[19,87749,87750],{},[3304,87751],{"alt":62,"src":87752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[57,87754,87756],{"className":52417,"code":87755,"language":52419,"meta":62,"style":62},"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",[23,87757,87758,87763,87768,87773,87777,87781,87785,87790,87795,87800,87804],{"__ignoreMap":62},[66,87759,87760],{"class":68,"line":69},[66,87761,87762],{"class":76},"append(param1)\n",[66,87764,87765],{"class":68,"line":80},[66,87766,87767],{"class":76},"append(param1, param2)\n",[66,87769,87770],{"class":68,"line":112},[66,87771,87772],{"class":76},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[66,87774,87775],{"class":68,"line":129},[66,87776,109],{"emptyLinePlaceholder":108},[66,87778,87779],{"class":68,"line":138},[66,87780,109],{"emptyLinePlaceholder":108},[66,87782,87783],{"class":68,"line":227},[66,87784,109],{"emptyLinePlaceholder":108},[66,87786,87787],{"class":68,"line":236},[66,87788,87789],{"class":76},"let div = document.createElement(\"div\");\n",[66,87791,87792],{"class":68,"line":241},[66,87793,87794],{"class":76},"let p = document.createElement(\"p\");\n",[66,87796,87797],{"class":68,"line":372},[66,87798,87799],{"class":76},"div.append(p);\n",[66,87801,87802],{"class":68,"line":377},[66,87803,109],{"emptyLinePlaceholder":108},[66,87805,87806,87809,87811],{"class":68,"line":392},[66,87807,87808],{"class":76},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[66,87810,19],{"class":53084},[66,87812,87813],{"class":76},"> ]\n",[31,87815,87816],{"start":80},[34,87817,87818],{},"remove()",[19,87820,87821],{},"自己删自己",[19,87823,87824],{},[3304,87825],{"alt":62,"src":87826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[57,87828,87830],{"className":52417,"code":87829,"language":52419,"meta":62,"style":62},"\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",[23,87831,87832,87842,87856,87860,87868,87882,87902,87914,87922,87929,87941,87954,87989,88001,88012,88024,88036,88048,88075,88085,88089,88093,88102,88114,88128,88138,88150,88154,88158,88168,88179,88189,88199,88212,88225,88235,88239,88243,88252,88262,88274,88278,88282,88291,88301,88311,88323,88327,88331,88341,88357,88368,88378,88388,88400,88412,88424,88428,88432,88445,88456,88460,88468,88476,88480,88488,88508,88528,88536,88541,88567,88572,88577,88596,88601,88613,88618,88629,88639,88649,88654,88659,88663,88668,88673,88678,88698,88703,88723,88728,88742,88747,88752,88757,88773,88777,88782,88811,88816,88821,88826,88837,88841,88845,88849,88854,88879,88884,88909,88914,88923,88927,88932,88957,88961,88986,88990,88999,89003,89008,89026,89036,89040,89048,89056,89060],{"__ignoreMap":62},[66,87833,87834,87836,87838,87840],{"class":68,"line":69},[66,87835,53081],{"class":76},[66,87837,53085],{"class":53084},[66,87839,53088],{"class":3793},[66,87841,53091],{"class":76},[66,87843,87844,87846,87848,87850,87852,87854],{"class":68,"line":80},[66,87845,413],{"class":76},[66,87847,52419],{"class":53084},[66,87849,53100],{"class":3793},[66,87851,99],{"class":76},[66,87853,53105],{"class":356},[66,87855,53091],{"class":76},[66,87857,87858],{"class":68,"line":112},[66,87859,109],{"emptyLinePlaceholder":108},[66,87861,87862,87864,87866],{"class":68,"line":129},[66,87863,413],{"class":76},[66,87865,53118],{"class":53084},[66,87867,53091],{"class":76},[66,87869,87870,87872,87874,87876,87878,87880],{"class":68,"line":138},[66,87871,53928],{"class":76},[66,87873,53128],{"class":53084},[66,87875,53131],{"class":3793},[66,87877,99],{"class":76},[66,87879,53136],{"class":356},[66,87881,53091],{"class":76},[66,87883,87884,87886,87888,87890,87892,87894,87896,87898,87900],{"class":68,"line":227},[66,87885,53928],{"class":76},[66,87887,53128],{"class":53084},[66,87889,16724],{"class":3793},[66,87891,99],{"class":76},[66,87893,53175],{"class":356},[66,87895,53155],{"class":3793},[66,87897,99],{"class":76},[66,87899,53182],{"class":356},[66,87901,53091],{"class":76},[66,87903,87904,87906,87908,87910,87912],{"class":68,"line":236},[66,87905,53928],{"class":76},[66,87907,53191],{"class":53084},[66,87909,53194],{"class":76},[66,87911,53191],{"class":53084},[66,87913,53091],{"class":76},[66,87915,87916,87918,87920],{"class":68,"line":241},[66,87917,53928],{"class":76},[66,87919,1903],{"class":53084},[66,87921,53091],{"class":76},[66,87923,87924,87927],{"class":68,"line":372},[66,87925,87926],{"class":3793},"    .modal",[66,87928,17375],{"class":76},[66,87930,87931,87933,87935,87937,87939],{"class":68,"line":377},[66,87932,56552],{"class":102},[66,87934,53221],{"class":76},[66,87936,5790],{"class":102},[66,87938,53276],{"class":72},[66,87940,3135],{"class":76},[66,87942,87943,87946,87948,87950,87952],{"class":68,"line":392},[66,87944,87945],{"class":102},"      min-height",[66,87947,53221],{"class":76},[66,87949,310],{"class":102},[66,87951,53276],{"class":72},[66,87953,3135],{"class":76},[66,87955,87956,87958,87960,87962,87964,87966,87968,87970,87972,87974,87976,87978,87980,87982,87984,87987],{"class":68,"line":405},[66,87957,80528],{"class":102},[66,87959,53221],{"class":76},[66,87961,2183],{"class":102},[66,87963,962],{"class":102},[66,87965,1335],{"class":102},[66,87967,53276],{"class":72},[66,87969,80545],{"class":102},[66,87971,348],{"class":76},[66,87973,2183],{"class":102},[66,87975,307],{"class":76},[66,87977,2183],{"class":102},[66,87979,307],{"class":76},[66,87981,2183],{"class":102},[66,87983,307],{"class":76},[66,87985,87986],{"class":102},"0.1",[66,87988,4543],{"class":76},[66,87990,87991,87993,87995,87997,87999],{"class":68,"line":418},[66,87992,56915],{"class":102},[66,87994,53221],{"class":76},[66,87996,1076],{"class":102},[66,87998,53276],{"class":72},[66,88000,3135],{"class":76},[66,88002,88003,88005,88007,88010],{"class":68,"line":430},[66,88004,56540],{"class":102},[66,88006,53221],{"class":76},[66,88008,88009],{"class":102},"fixed",[66,88011,3135],{"class":76},[66,88013,88014,88017,88019,88022],{"class":68,"line":438},[66,88015,88016],{"class":102},"      z-index",[66,88018,53221],{"class":76},[66,88020,88021],{"class":102},"999",[66,88023,3135],{"class":76},[66,88025,88026,88028,88030,88032,88034],{"class":68,"line":465},[66,88027,56619],{"class":102},[66,88029,53221],{"class":76},[66,88031,2635],{"class":102},[66,88033,953],{"class":72},[66,88035,3135],{"class":76},[66,88037,88038,88040,88042,88044,88046],{"class":68,"line":1805},[66,88039,56728],{"class":102},[66,88041,53221],{"class":76},[66,88043,2635],{"class":102},[66,88045,953],{"class":72},[66,88047,3135],{"class":76},[66,88049,88050,88052,88054,88056,88058,88061,88063,88065,88067,88069,88071,88073],{"class":68,"line":1817},[66,88051,80569],{"class":102},[66,88053,53221],{"class":76},[66,88055,80574],{"class":102},[66,88057,348],{"class":76},[66,88059,88060],{"class":102},"-50",[66,88062,953],{"class":72},[66,88064,307],{"class":76},[66,88066,88060],{"class":102},[66,88068,953],{"class":72},[66,88070,307],{"class":76},[66,88072,2183],{"class":102},[66,88074,4543],{"class":76},[66,88076,88077,88079,88081,88083],{"class":68,"line":1822},[66,88078,56665],{"class":102},[66,88080,53221],{"class":76},[66,88082,62621],{"class":102},[66,88084,3135],{"class":76},[66,88086,88087],{"class":68,"line":1829},[66,88088,4013],{"class":76},[66,88090,88091],{"class":68,"line":3529},[66,88092,109],{"emptyLinePlaceholder":108},[66,88094,88095,88097,88100],{"class":68,"line":3557},[66,88096,87926],{"class":3793},[66,88098,88099],{"class":3793}," .header",[66,88101,17375],{"class":76},[66,88103,88104,88106,88108,88110,88112],{"class":68,"line":3562},[66,88105,59139],{"class":102},[66,88107,53221],{"class":76},[66,88109,2385],{"class":102},[66,88111,53276],{"class":72},[66,88113,3135],{"class":76},[66,88115,88116,88118,88120,88122,88124,88126],{"class":68,"line":3579},[66,88117,56476],{"class":102},[66,88119,53221],{"class":76},[66,88121,2183],{"class":102},[66,88123,1335],{"class":102},[66,88125,53276],{"class":72},[66,88127,3135],{"class":76},[66,88129,88130,88132,88134,88136],{"class":68,"line":3584},[66,88131,56540],{"class":102},[66,88133,53221],{"class":76},[66,88135,56545],{"class":102},[66,88137,3135],{"class":76},[66,88139,88140,88142,88144,88146,88148],{"class":68,"line":3589},[66,88141,56703],{"class":102},[66,88143,53221],{"class":76},[66,88145,2679],{"class":102},[66,88147,53276],{"class":72},[66,88149,3135],{"class":76},[66,88151,88152],{"class":68,"line":3594},[66,88153,4013],{"class":76},[66,88155,88156],{"class":68,"line":3608},[66,88157,109],{"emptyLinePlaceholder":108},[66,88159,88160,88162,88164,88166],{"class":68,"line":3613},[66,88161,87926],{"class":3793},[66,88163,88099],{"class":3793},[66,88165,1596],{"class":53084},[66,88167,17375],{"class":76},[66,88169,88170,88173,88175,88177],{"class":68,"line":4401},[66,88171,88172],{"class":102},"      font-style",[66,88174,53221],{"class":76},[66,88176,65620],{"class":102},[66,88178,3135],{"class":76},[66,88180,88181,88183,88185,88187],{"class":68,"line":4415},[66,88182,59196],{"class":102},[66,88184,53221],{"class":76},[66,88186,63849],{"class":102},[66,88188,3135],{"class":76},[66,88190,88191,88193,88195,88197],{"class":68,"line":4423},[66,88192,56540],{"class":102},[66,88194,53221],{"class":76},[66,88196,56612],{"class":102},[66,88198,3135],{"class":76},[66,88200,88201,88204,88206,88208,88210],{"class":68,"line":4428},[66,88202,88203],{"class":102},"      right",[66,88205,53221],{"class":76},[66,88207,2554],{"class":102},[66,88209,53276],{"class":72},[66,88211,3135],{"class":76},[66,88213,88214,88216,88218,88221,88223],{"class":68,"line":4434},[66,88215,56728],{"class":102},[66,88217,53221],{"class":76},[66,88219,88220],{"class":102},"-2",[66,88222,53276],{"class":72},[66,88224,3135],{"class":76},[66,88226,88227,88229,88231,88233],{"class":68,"line":4440},[66,88228,63804],{"class":102},[66,88230,53221],{"class":76},[66,88232,63809],{"class":102},[66,88234,3135],{"class":76},[66,88236,88237],{"class":68,"line":4445},[66,88238,4013],{"class":76},[66,88240,88241],{"class":68,"line":9759},[66,88242,109],{"emptyLinePlaceholder":108},[66,88244,88245,88247,88250],{"class":68,"line":9783},[66,88246,87926],{"class":3793},[66,88248,88249],{"class":3793}," .body",[66,88251,17375],{"class":76},[66,88253,88254,88256,88258,88260],{"class":68,"line":9788},[66,88255,59066],{"class":102},[66,88257,53221],{"class":76},[66,88259,53376],{"class":102},[66,88261,3135],{"class":76},[66,88263,88264,88266,88268,88270,88272],{"class":68,"line":9794},[66,88265,56476],{"class":102},[66,88267,53221],{"class":76},[66,88269,790],{"class":102},[66,88271,53276],{"class":72},[66,88273,3135],{"class":76},[66,88275,88276],{"class":68,"line":9821},[66,88277,4013],{"class":76},[66,88279,88280],{"class":68,"line":9826},[66,88281,109],{"emptyLinePlaceholder":108},[66,88283,88284,88286,88289],{"class":68,"line":9832},[66,88285,87926],{"class":3793},[66,88287,88288],{"class":3793}," .footer",[66,88290,17375],{"class":76},[66,88292,88293,88295,88297,88299],{"class":68,"line":9844},[66,88294,56790],{"class":102},[66,88296,53221],{"class":76},[66,88298,53261],{"class":102},[66,88300,3135],{"class":76},[66,88302,88303,88305,88307,88309],{"class":68,"line":9856},[66,88304,56801],{"class":102},[66,88306,53221],{"class":76},[66,88308,53364],{"class":102},[66,88310,3135],{"class":76},[66,88312,88313,88315,88317,88319,88321],{"class":68,"line":9868},[66,88314,56476],{"class":102},[66,88316,53221],{"class":76},[66,88318,790],{"class":102},[66,88320,53276],{"class":72},[66,88322,3135],{"class":76},[66,88324,88325],{"class":68,"line":11523},[66,88326,4013],{"class":76},[66,88328,88329],{"class":68,"line":11548},[66,88330,109],{"emptyLinePlaceholder":108},[66,88332,88333,88335,88337,88339],{"class":68,"line":11571},[66,88334,87926],{"class":3793},[66,88336,88288],{"class":3793},[66,88338,3240],{"class":53084},[66,88340,17375],{"class":76},[66,88342,88343,88345,88347,88349,88351,88353,88355],{"class":68,"line":11595},[66,88344,56476],{"class":102},[66,88346,53221],{"class":76},[66,88348,1520],{"class":102},[66,88350,53276],{"class":72},[66,88352,3910],{"class":102},[66,88354,53276],{"class":72},[66,88356,3135],{"class":76},[66,88358,88359,88361,88363,88366],{"class":68,"line":11600},[66,88360,63500],{"class":102},[66,88362,53221],{"class":76},[66,88364,88365],{"class":102},"#ccc",[66,88367,3135],{"class":76},[66,88369,88370,88372,88374,88376],{"class":68,"line":11605},[66,88371,65749],{"class":102},[66,88373,53221],{"class":76},[66,88375,56518],{"class":102},[66,88377,3135],{"class":76},[66,88379,88380,88382,88384,88386],{"class":68,"line":11610},[66,88381,59196],{"class":102},[66,88383,53221],{"class":76},[66,88385,62621],{"class":102},[66,88387,3135],{"class":76},[66,88389,88390,88392,88394,88396,88398],{"class":68,"line":11619},[66,88391,56915],{"class":102},[66,88393,53221],{"class":76},[66,88395,795],{"class":102},[66,88397,53276],{"class":72},[66,88399,3135],{"class":76},[66,88401,88402,88404,88406,88408,88410],{"class":68,"line":11624},[66,88403,63529],{"class":102},[66,88405,53221],{"class":76},[66,88407,790],{"class":102},[66,88409,53276],{"class":72},[66,88411,3135],{"class":76},[66,88413,88414,88416,88418,88420,88422],{"class":68,"line":11630},[66,88415,56703],{"class":102},[66,88417,53221],{"class":76},[66,88419,2528],{"class":102},[66,88421,53276],{"class":72},[66,88423,3135],{"class":76},[66,88425,88426],{"class":68,"line":11651},[66,88427,4013],{"class":76},[66,88429,88430],{"class":68,"line":11657},[66,88431,109],{"emptyLinePlaceholder":108},[66,88433,88434,88436,88438,88440,88443],{"class":68,"line":11671},[66,88435,87926],{"class":3793},[66,88437,88288],{"class":3793},[66,88439,3240],{"class":53084},[66,88441,88442],{"class":3793},".submit",[66,88444,17375],{"class":76},[66,88446,88447,88449,88451,88454],{"class":68,"line":11677},[66,88448,56665],{"class":102},[66,88450,53221],{"class":76},[66,88452,88453],{"class":102},"#369",[66,88455,3135],{"class":76},[66,88457,88458],{"class":68,"line":11704},[66,88459,4013],{"class":76},[66,88461,88462,88464,88466],{"class":68,"line":11713},[66,88463,54199],{"class":76},[66,88465,1903],{"class":53084},[66,88467,53091],{"class":76},[66,88469,88470,88472,88474],{"class":68,"line":11719},[66,88471,53569],{"class":76},[66,88473,53118],{"class":53084},[66,88475,53091],{"class":76},[66,88477,88478],{"class":68,"line":11727},[66,88479,109],{"emptyLinePlaceholder":108},[66,88481,88482,88484,88486],{"class":68,"line":11732},[66,88483,413],{"class":76},[66,88485,53584],{"class":53084},[66,88487,53091],{"class":76},[66,88489,88490,88492,88494,88496,88498,88501,88504,88506],{"class":68,"line":18407},[66,88491,53928],{"class":76},[66,88493,55668],{"class":53084},[66,88495,16763],{"class":3793},[66,88497,99],{"class":76},[66,88499,88500],{"class":356},"\"delete\"",[66,88502,88503],{"class":76},">删除\u003C\u002F",[66,88505,55668],{"class":53084},[66,88507,53091],{"class":76},[66,88509,88510,88512,88514,88516,88518,88521,88524,88526],{"class":68,"line":18413},[66,88511,53928],{"class":76},[66,88513,55668],{"class":53084},[66,88515,16763],{"class":3793},[66,88517,99],{"class":76},[66,88519,88520],{"class":356},"\"login\"",[66,88522,88523],{"class":76},">登录\u003C\u002F",[66,88525,55668],{"class":53084},[66,88527,53091],{"class":76},[66,88529,88530,88532,88534],{"class":68,"line":18436},[66,88531,53928],{"class":76},[66,88533,53597],{"class":53084},[66,88535,53091],{"class":76},[66,88537,88538],{"class":68,"line":18442},[66,88539,88540],{"class":758},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[66,88542,88543,88545,88548,88550,88552,88554,88556,88558,88561,88563,88565],{"class":68,"line":18465},[66,88544,71863],{"class":72},[66,88546,88547],{"class":3793}," Modal",[66,88549,348],{"class":76},[66,88551,53191],{"class":1234},[66,88553,15369],{"class":72},[66,88555,71709],{"class":356},[66,88557,307],{"class":76},[66,88559,88560],{"class":1234},"message",[66,88562,15369],{"class":72},[66,88564,71709],{"class":356},[66,88566,14247],{"class":76},[66,88568,88569],{"class":68,"line":18479},[66,88570,88571],{"class":758},"      \u002F\u002F 创建Model 模态框盒子\n",[66,88573,88574],{"class":68,"line":18499},[66,88575,88576],{"class":758},"      \u002F\u002F 1.1 创建div标签\n",[66,88578,88579,88581,88584,88586,88588,88590,88592,88594],{"class":68,"line":18505},[66,88580,71830],{"class":102},[66,88582,88583],{"class":76},".modalBox ",[66,88585,99],{"class":72},[66,88587,56177],{"class":76},[66,88589,71930],{"class":3793},[66,88591,348],{"class":76},[66,88593,83708],{"class":356},[66,88595,313],{"class":76},[66,88597,88598],{"class":68,"line":18516},[66,88599,88600],{"class":758},"      \u002F\u002F 1.2 给div 添加类名为model\n",[66,88602,88603,88605,88608,88610],{"class":68,"line":18539},[66,88604,71830],{"class":102},[66,88606,88607],{"class":76},".modalBox.className ",[66,88609,99],{"class":72},[66,88611,88612],{"class":356}," 'modal'\n",[66,88614,88615],{"class":68,"line":18561},[66,88616,88617],{"class":758},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[66,88619,88620,88622,88625,88627],{"class":68,"line":18566},[66,88621,71830],{"class":102},[66,88623,88624],{"class":76},".modalBox.innerHTML ",[66,88626,99],{"class":72},[66,88628,71947],{"class":356},[66,88630,88631,88634,88636],{"class":68,"line":18572},[66,88632,88633],{"class":356},"        \u003Cdiv class=\"header\">${",[66,88635,53191],{"class":76},[66,88637,88638],{"class":356},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[66,88640,88641,88644,88646],{"class":68,"line":18586},[66,88642,88643],{"class":356},"        \u003Cdiv class=\"body\">${",[66,88645,88560],{"class":76},[66,88647,88648],{"class":356},"}\u003C\u002Fdiv>\n",[66,88650,88651],{"class":68,"line":18599},[66,88652,88653],{"class":356},"      `\n",[66,88655,88656],{"class":68,"line":18604},[66,88657,88658],{"class":758},"      \u002F\u002F console.log(this.modalBox)\n",[66,88660,88661],{"class":68,"line":18618},[66,88662,4013],{"class":76},[66,88664,88665],{"class":68,"line":18623},[66,88666,88667],{"class":758},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[66,88669,88670],{"class":68,"line":18629},[66,88671,88672],{"class":758},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[66,88674,88675],{"class":68,"line":18634},[66,88676,88677],{"class":758},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[66,88679,88680,88683,88685,88687,88689,88692,88694,88696],{"class":68,"line":18648},[66,88681,88682],{"class":102},"    Modal",[66,88684,2537],{"class":76},[66,88686,87355],{"class":102},[66,88688,2537],{"class":76},[66,88690,88691],{"class":3793},"open",[66,88693,15369],{"class":72},[66,88695,60698],{"class":72},[66,88697,56233],{"class":76},[66,88699,88700],{"class":68,"line":18653},[66,88701,88702],{"class":758},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[66,88704,88705,88707,88710,88712,88714,88716,88718,88721],{"class":68,"line":18658},[66,88706,60008],{"class":72},[66,88708,88709],{"class":102}," box",[66,88711,15369],{"class":72},[66,88713,56177],{"class":76},[66,88715,56180],{"class":3793},[66,88717,348],{"class":76},[66,88719,88720],{"class":356},"'.modal'",[66,88722,313],{"class":76},[66,88724,88725],{"class":68,"line":18672},[66,88726,88727],{"class":758},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[66,88729,88730,88733,88735,88738,88740],{"class":68,"line":18684},[66,88731,88732],{"class":76},"      box ",[66,88734,3545],{"class":72},[66,88736,88737],{"class":76}," box.",[66,88739,58786],{"class":3793},[66,88741,1253],{"class":76},[66,88743,88744],{"class":68,"line":18689},[66,88745,88746],{"class":758},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[66,88748,88749],{"class":68,"line":18702},[66,88750,88751],{"class":758},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[66,88753,88754],{"class":68,"line":18707},[66,88755,88756],{"class":758},"      \u002F\u002F append可以增加对象\n",[66,88758,88759,88762,88765,88767,88770],{"class":68,"line":18712},[66,88760,88761],{"class":76},"      document.body.",[66,88763,88764],{"class":3793},"append",[66,88766,348],{"class":76},[66,88768,88769],{"class":102},"this",[66,88771,88772],{"class":76},".modalBox)\n",[66,88774,88775],{"class":68,"line":18717},[66,88776,109],{"emptyLinePlaceholder":108},[66,88778,88779],{"class":68,"line":18730},[66,88780,88781],{"class":758},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[66,88783,88784,88786,88789,88791,88793,88796,88798,88800,88802,88804,88807,88809],{"class":68,"line":18735},[66,88785,71830],{"class":102},[66,88787,88788],{"class":76},".modalBox.",[66,88790,56180],{"class":3793},[66,88792,348],{"class":76},[66,88794,88795],{"class":356},"'i'",[66,88797,32620],{"class":76},[66,88799,59593],{"class":3793},[66,88801,348],{"class":76},[66,88803,59598],{"class":356},[66,88805,88806],{"class":76},", () ",[66,88808,86498],{"class":72},[66,88810,17375],{"class":76},[66,88812,88813],{"class":68,"line":34423},[66,88814,88815],{"class":758},"        \u002F\u002F 这个地方需要用到箭头函数\n",[66,88817,88818],{"class":68,"line":34429},[66,88819,88820],{"class":758},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[66,88822,88823],{"class":68,"line":34435},[66,88824,88825],{"class":758},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[66,88827,88828,88830,88832,88835],{"class":68,"line":34441},[66,88829,66505],{"class":102},[66,88831,2537],{"class":76},[66,88833,88834],{"class":3793},"close",[66,88836,1253],{"class":76},[66,88838,88839],{"class":68,"line":34447},[66,88840,66594],{"class":76},[66,88842,88843],{"class":68,"line":34458},[66,88844,4013],{"class":76},[66,88846,88847],{"class":68,"line":34464},[66,88848,109],{"emptyLinePlaceholder":108},[66,88850,88851],{"class":68,"line":34484},[66,88852,88853],{"class":758},"    \u002F\u002F 测试一下 点击 删除按钮\n",[66,88855,88856,88858,88860,88862,88865,88867,88869,88871,88873,88875,88877],{"class":68,"line":34490},[66,88857,54189],{"class":76},[66,88859,56180],{"class":3793},[66,88861,348],{"class":76},[66,88863,88864],{"class":356},"'#delete'",[66,88866,32620],{"class":76},[66,88868,59593],{"class":3793},[66,88870,348],{"class":76},[66,88872,59598],{"class":356},[66,88874,88806],{"class":76},[66,88876,86498],{"class":72},[66,88878,17375],{"class":76},[66,88880,88881],{"class":68,"line":34501},[66,88882,88883],{"class":758},"      \u002F\u002F 先调用Model构造函数\n",[66,88885,88886,88888,88891,88893,88895,88897,88899,88902,88904,88907],{"class":68,"line":34507},[66,88887,60008],{"class":72},[66,88889,88890],{"class":102}," del",[66,88892,15369],{"class":72},[66,88894,13384],{"class":72},[66,88896,88547],{"class":3793},[66,88898,348],{"class":76},[66,88900,88901],{"class":356},"'温馨的提示'",[66,88903,307],{"class":76},[66,88905,88906],{"class":356},"'您没有删除权限操作'",[66,88908,313],{"class":76},[66,88910,88911],{"class":68,"line":34513},[66,88912,88913],{"class":758},"      \u002F\u002F 实例对象调用open方法\n",[66,88915,88916,88919,88921],{"class":68,"line":34519},[66,88917,88918],{"class":76},"      del.",[66,88920,88691],{"class":3793},[66,88922,1253],{"class":76},[66,88924,88925],{"class":68,"line":34525},[66,88926,35249],{"class":76},[66,88928,88929],{"class":68,"line":34531},[66,88930,88931],{"class":758},"    \u002F\u002F 测试一下 点击 登录按钮\n",[66,88933,88934,88936,88938,88940,88943,88945,88947,88949,88951,88953,88955],{"class":68,"line":34537},[66,88935,54189],{"class":76},[66,88937,56180],{"class":3793},[66,88939,348],{"class":76},[66,88941,88942],{"class":356},"'#login'",[66,88944,32620],{"class":76},[66,88946,59593],{"class":3793},[66,88948,348],{"class":76},[66,88950,59598],{"class":356},[66,88952,88806],{"class":76},[66,88954,86498],{"class":72},[66,88956,17375],{"class":76},[66,88958,88959],{"class":68,"line":34543},[66,88960,88883],{"class":758},[66,88962,88963,88965,88968,88970,88972,88974,88976,88979,88981,88984],{"class":68,"line":34563},[66,88964,60008],{"class":72},[66,88966,88967],{"class":102}," log",[66,88969,15369],{"class":72},[66,88971,13384],{"class":72},[66,88973,88547],{"class":3793},[66,88975,348],{"class":76},[66,88977,88978],{"class":356},"'友情提示'",[66,88980,307],{"class":76},[66,88982,88983],{"class":356},"'您还没有登录呢'",[66,88985,313],{"class":76},[66,88987,88988],{"class":68,"line":34569},[66,88989,88913],{"class":758},[66,88991,88992,88995,88997],{"class":68,"line":34585},[66,88993,88994],{"class":76},"      log.",[66,88996,88691],{"class":3793},[66,88998,1253],{"class":76},[66,89000,89001],{"class":68,"line":34591},[66,89002,35249],{"class":76},[66,89004,89005],{"class":68,"line":34605},[66,89006,89007],{"class":758},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[66,89009,89010,89012,89014,89016,89018,89020,89022,89024],{"class":68,"line":34611},[66,89011,88682],{"class":102},[66,89013,2537],{"class":76},[66,89015,87355],{"class":102},[66,89017,2537],{"class":76},[66,89019,88834],{"class":3793},[66,89021,15369],{"class":72},[66,89023,60698],{"class":72},[66,89025,56233],{"class":76},[66,89027,89028,89030,89032,89034],{"class":68,"line":34626},[66,89029,71830],{"class":102},[66,89031,88788],{"class":76},[66,89033,58786],{"class":3793},[66,89035,1253],{"class":76},[66,89037,89038],{"class":68,"line":34632},[66,89039,4013],{"class":76},[66,89041,89042,89044,89046],{"class":68,"line":34641},[66,89043,54199],{"class":76},[66,89045,53597],{"class":53084},[66,89047,53091],{"class":76},[66,89049,89050,89052,89054],{"class":68,"line":34647},[66,89051,53569],{"class":76},[66,89053,53584],{"class":53084},[66,89055,53091],{"class":76},[66,89057,89058],{"class":68,"line":34656},[66,89059,109],{"emptyLinePlaceholder":108},[66,89061,89062,89064,89066],{"class":68,"line":34662},[66,89063,53569],{"class":76},[66,89065,52419],{"class":53084},[66,89067,53091],{"class":76},[19,89069,89070],{},[3304,89071],{"alt":62,"src":89072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,89074,89076],{"id":89075},"_414-深浅拷贝","4.14 深浅拷贝",[484,89078,89080],{"id":89079},"_4141-浅拷贝","4.14.1 浅拷贝",[19,89082,89083],{},[3304,89084],{"alt":62,"src":89085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,89087,89088],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,89090,89091],{},[3304,89092],{"alt":62,"src":89093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,89095,89096],{},[3304,89097],{"alt":62,"src":89098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,89100,89101],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,89103,89104],{},[3304,89105],{"alt":62,"src":89106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,89108,13138],{},[19,89110,89111],{},[3304,89112],{"alt":62,"src":89113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[484,89115,89117],{"id":89116},"_4142-深拷贝","4.14.2 深拷贝",[19,89119,89120],{},"深拷贝：拷贝的是对象，不是地址",[19,89122,89123],{},"常用的三种方法：",[31,89125,89126,89129,89132],{},[34,89127,89128],{},"通过递归实现深拷贝",[34,89130,89131],{},"lodash\u002FcloneDeep",[34,89133,89134],{},"通过JSON.stringify()实现",[23801,89136,89138],{"id":89137},"_41421-递归函数","4.14.2.1 递归函数",[19,89140,89141],{},[3304,89142],{"alt":62,"src":89143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[31,89145,89146],{},[34,89147,89148],{},"死递归占溢出：",[57,89150,89152],{"className":54849,"code":89151,"language":54851,"meta":62,"style":62},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[23,89153,89154,89162,89170,89174,89179,89183,89188,89196],{"__ignoreMap":62},[66,89155,89156,89158,89160],{"class":68,"line":69},[66,89157,413],{"class":76},[66,89159,53584],{"class":53084},[66,89161,53091],{"class":76},[66,89163,89164,89166,89168],{"class":68,"line":80},[66,89165,53928],{"class":76},[66,89167,53597],{"class":53084},[66,89169,53091],{"class":76},[66,89171,89172],{"class":68,"line":112},[66,89173,78922],{"class":76},[66,89175,89176],{"class":68,"line":129},[66,89177,89178],{"class":76},"      fn()\n",[66,89180,89181],{"class":68,"line":138},[66,89182,4013],{"class":76},[66,89184,89185],{"class":68,"line":227},[66,89186,89187],{"class":76},"    fn()\n",[66,89189,89190,89192,89194],{"class":68,"line":236},[66,89191,54199],{"class":76},[66,89193,53597],{"class":53084},[66,89195,53091],{"class":76},[66,89197,89198,89200,89202],{"class":68,"line":241},[66,89199,53569],{"class":76},[66,89201,53584],{"class":53084},[66,89203,53091],{"class":76},[31,89205,89206],{"start":80},[34,89207,89208],{},"递归函数要加判断条件：",[19,89210,89211],{},[3304,89212],{"alt":62,"src":89213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[31,89215,89216],{"start":112},[34,89217,89218],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[57,89220,89222],{"className":52417,"code":89221,"language":52419,"meta":62,"style":62},"\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",[23,89223,89224,89234,89248,89252,89260,89274,89294,89306,89314,89318,89326,89338,89346,89354,89379,89391,89395,89402,89410,89418,89422],{"__ignoreMap":62},[66,89225,89226,89228,89230,89232],{"class":68,"line":69},[66,89227,53081],{"class":76},[66,89229,53085],{"class":53084},[66,89231,53088],{"class":3793},[66,89233,53091],{"class":76},[66,89235,89236,89238,89240,89242,89244,89246],{"class":68,"line":80},[66,89237,413],{"class":76},[66,89239,52419],{"class":53084},[66,89241,53100],{"class":3793},[66,89243,99],{"class":76},[66,89245,53105],{"class":356},[66,89247,53091],{"class":76},[66,89249,89250],{"class":68,"line":112},[66,89251,109],{"emptyLinePlaceholder":108},[66,89253,89254,89256,89258],{"class":68,"line":129},[66,89255,413],{"class":76},[66,89257,53118],{"class":53084},[66,89259,53091],{"class":76},[66,89261,89262,89264,89266,89268,89270,89272],{"class":68,"line":138},[66,89263,53928],{"class":76},[66,89265,53128],{"class":53084},[66,89267,53131],{"class":3793},[66,89269,99],{"class":76},[66,89271,53136],{"class":356},[66,89273,53091],{"class":76},[66,89275,89276,89278,89280,89282,89284,89286,89288,89290,89292],{"class":68,"line":227},[66,89277,53928],{"class":76},[66,89279,53128],{"class":53084},[66,89281,16724],{"class":3793},[66,89283,99],{"class":76},[66,89285,53175],{"class":356},[66,89287,53155],{"class":3793},[66,89289,99],{"class":76},[66,89291,53182],{"class":356},[66,89293,53091],{"class":76},[66,89295,89296,89298,89300,89302,89304],{"class":68,"line":236},[66,89297,53928],{"class":76},[66,89299,53191],{"class":53084},[66,89301,53194],{"class":76},[66,89303,53191],{"class":53084},[66,89305,53091],{"class":76},[66,89307,89308,89310,89312],{"class":68,"line":241},[66,89309,53569],{"class":76},[66,89311,53118],{"class":53084},[66,89313,53091],{"class":76},[66,89315,89316],{"class":68,"line":372},[66,89317,109],{"emptyLinePlaceholder":108},[66,89319,89320,89322,89324],{"class":68,"line":377},[66,89321,413],{"class":76},[66,89323,53584],{"class":53084},[66,89325,53091],{"class":76},[66,89327,89328,89330,89332,89334,89336],{"class":68,"line":392},[66,89329,53928],{"class":76},[66,89331,53395],{"class":53084},[66,89333,57095],{"class":76},[66,89335,53395],{"class":53084},[66,89337,53091],{"class":76},[66,89339,89340,89342,89344],{"class":68,"line":405},[66,89341,53928],{"class":76},[66,89343,53597],{"class":53084},[66,89345,53091],{"class":76},[66,89347,89348,89350,89352],{"class":68,"line":418},[66,89349,71863],{"class":72},[66,89351,75552],{"class":3793},[66,89353,12659],{"class":76},[66,89355,89356,89358,89360,89362,89364,89366,89368,89370,89372,89374,89377],{"class":68,"line":430},[66,89357,57551],{"class":76},[66,89359,56180],{"class":3793},[66,89361,348],{"class":76},[66,89363,83708],{"class":356},[66,89365,76028],{"class":76},[66,89367,99],{"class":72},[66,89369,13384],{"class":72},[66,89371,75568],{"class":3793},[66,89373,19064],{"class":76},[66,89375,89376],{"class":3793},"toLocaleString",[66,89378,1253],{"class":76},[66,89380,89381,89384,89387,89389],{"class":68,"line":438},[66,89382,89383],{"class":3793},"      setTimeout",[66,89385,89386],{"class":76},"(getTime, ",[66,89388,8221],{"class":102},[66,89390,313],{"class":76},[66,89392,89393],{"class":68,"line":465},[66,89394,4013],{"class":76},[66,89396,89397,89400],{"class":68,"line":1805},[66,89398,89399],{"class":3793},"    getTime",[66,89401,1253],{"class":76},[66,89403,89404,89406,89408],{"class":68,"line":1817},[66,89405,54199],{"class":76},[66,89407,53597],{"class":53084},[66,89409,53091],{"class":76},[66,89411,89412,89414,89416],{"class":68,"line":1822},[66,89413,53569],{"class":76},[66,89415,53584],{"class":53084},[66,89417,53091],{"class":76},[66,89419,89420],{"class":68,"line":1829},[66,89421,109],{"emptyLinePlaceholder":108},[66,89423,89424,89426,89428],{"class":68,"line":3529},[66,89425,53569],{"class":76},[66,89427,52419],{"class":53084},[66,89429,53091],{"class":76},[19,89431,89432],{},[3304,89433],{"alt":62,"src":89434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[31,89436,89437],{"start":129},[34,89438,89128],{},[19,89440,89441],{},[3304,89442],{"alt":62,"src":89443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,89445,89446],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,89448,40977],{},[19,89450,89451],{},"这个是简易版的递归函数深拷贝",[19,89453,89454],{},"一定要注意先数组再对象，因为万物皆可对象",[57,89456,89458],{"className":52417,"code":89457,"language":52419,"meta":62,"style":62},"\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",[23,89459,89460,89470,89484,89488,89496,89510,89530,89542,89550,89554,89562,89570,89580,89589,89597,89613,89617,89625,89629,89633,89645,89650,89669,89685,89690,89695,89700,89715,89720,89725,89734,89742,89759,89767,89773,89781,89786,89791,89800,89804,89808,89812,89823,89832,89842,89856,89866,89874,89882,89890,89894],{"__ignoreMap":62},[66,89461,89462,89464,89466,89468],{"class":68,"line":69},[66,89463,53081],{"class":76},[66,89465,53085],{"class":53084},[66,89467,53088],{"class":3793},[66,89469,53091],{"class":76},[66,89471,89472,89474,89476,89478,89480,89482],{"class":68,"line":80},[66,89473,413],{"class":76},[66,89475,52419],{"class":53084},[66,89477,53100],{"class":3793},[66,89479,99],{"class":76},[66,89481,53105],{"class":356},[66,89483,53091],{"class":76},[66,89485,89486],{"class":68,"line":112},[66,89487,109],{"emptyLinePlaceholder":108},[66,89489,89490,89492,89494],{"class":68,"line":129},[66,89491,413],{"class":76},[66,89493,53118],{"class":53084},[66,89495,53091],{"class":76},[66,89497,89498,89500,89502,89504,89506,89508],{"class":68,"line":138},[66,89499,53928],{"class":76},[66,89501,53128],{"class":53084},[66,89503,53131],{"class":3793},[66,89505,99],{"class":76},[66,89507,53136],{"class":356},[66,89509,53091],{"class":76},[66,89511,89512,89514,89516,89518,89520,89522,89524,89526,89528],{"class":68,"line":227},[66,89513,53928],{"class":76},[66,89515,53128],{"class":53084},[66,89517,16724],{"class":3793},[66,89519,99],{"class":76},[66,89521,53175],{"class":356},[66,89523,53155],{"class":3793},[66,89525,99],{"class":76},[66,89527,53182],{"class":356},[66,89529,53091],{"class":76},[66,89531,89532,89534,89536,89538,89540],{"class":68,"line":236},[66,89533,53928],{"class":76},[66,89535,53191],{"class":53084},[66,89537,53194],{"class":76},[66,89539,53191],{"class":53084},[66,89541,53091],{"class":76},[66,89543,89544,89546,89548],{"class":68,"line":241},[66,89545,53569],{"class":76},[66,89547,53118],{"class":53084},[66,89549,53091],{"class":76},[66,89551,89552],{"class":68,"line":372},[66,89553,109],{"emptyLinePlaceholder":108},[66,89555,89556,89558,89560],{"class":68,"line":377},[66,89557,413],{"class":76},[66,89559,53584],{"class":53084},[66,89561,53091],{"class":76},[66,89563,89564,89566,89568],{"class":68,"line":392},[66,89565,53928],{"class":76},[66,89567,53597],{"class":53084},[66,89569,53091],{"class":76},[66,89571,89572,89574,89576,89578],{"class":68,"line":405},[66,89573,13027],{"class":72},[66,89575,71750],{"class":102},[66,89577,15369],{"class":72},[66,89579,17375],{"class":76},[66,89581,89582,89584,89587],{"class":68,"line":418},[66,89583,73395],{"class":76},[66,89585,89586],{"class":356},"'pink'",[66,89588,33259],{"class":76},[66,89590,89591,89593,89595],{"class":68,"line":430},[66,89592,73405],{"class":76},[66,89594,2629],{"class":102},[66,89596,33259],{"class":76},[66,89598,89599,89602,89605,89607,89610],{"class":68,"line":438},[66,89600,89601],{"class":76},"      hobby: [",[66,89603,89604],{"class":356},"'乒乓球'",[66,89606,307],{"class":76},[66,89608,89609],{"class":356},"'足球'",[66,89611,89612],{"class":76},"],\n",[66,89614,89615],{"class":68,"line":465},[66,89616,79651],{"class":76},[66,89618,89619,89622],{"class":68,"line":1805},[66,89620,89621],{"class":76},"        baby: ",[66,89623,89624],{"class":356},"'小pink'\n",[66,89626,89627],{"class":68,"line":1817},[66,89628,54180],{"class":76},[66,89630,89631],{"class":68,"line":1822},[66,89632,4013],{"class":76},[66,89634,89635,89637,89640,89642],{"class":68,"line":1829},[66,89636,13027],{"class":72},[66,89638,89639],{"class":102}," o",[66,89641,15369],{"class":72},[66,89643,89644],{"class":76}," {}\n",[66,89646,89647],{"class":68,"line":3529},[66,89648,89649],{"class":758},"    \u002F\u002F 拷贝函数\n",[66,89651,89652,89654,89657,89659,89662,89664,89667],{"class":68,"line":3557},[66,89653,71863],{"class":72},[66,89655,89656],{"class":3793}," deepCopy",[66,89658,348],{"class":76},[66,89660,89661],{"class":1234},"newObj",[66,89663,307],{"class":76},[66,89665,89666],{"class":1234},"oldObj",[66,89668,14247],{"class":76},[66,89670,89671,89673,89675,89677,89680,89682],{"class":68,"line":3562},[66,89672,54066],{"class":72},[66,89674,3492],{"class":76},[66,89676,53631],{"class":72},[66,89678,89679],{"class":76}," k ",[66,89681,507],{"class":72},[66,89683,89684],{"class":76}," oldObj) {\n",[66,89686,89687],{"class":68,"line":3579},[66,89688,89689],{"class":758},"        \u002F\u002F 处理数组的问题\n",[66,89691,89692],{"class":68,"line":3584},[66,89693,89694],{"class":758},"        \u002F\u002F 判断是否属于数组\n",[66,89696,89697],{"class":68,"line":3589},[66,89698,89699],{"class":758},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[66,89701,89702,89704,89707,89710,89713],{"class":68,"line":3594},[66,89703,4321],{"class":72},[66,89705,89706],{"class":76}," (oldObj[k] ",[66,89708,89709],{"class":72},"instanceof",[66,89711,89712],{"class":3793}," Array",[66,89714,14247],{"class":76},[66,89716,89717],{"class":68,"line":3608},[66,89718,89719],{"class":758},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[66,89721,89722],{"class":68,"line":3613},[66,89723,89724],{"class":758},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[66,89726,89727,89730,89732],{"class":68,"line":4401},[66,89728,89729],{"class":76},"          newObj[k] ",[66,89731,99],{"class":72},[66,89733,53622],{"class":76},[66,89735,89736,89739],{"class":68,"line":4415},[66,89737,89738],{"class":3793},"          deepCopy",[66,89740,89741],{"class":76},"(newObj[k], oldObj[k])\n",[66,89743,89744,89746,89748,89750,89752,89754,89757],{"class":68,"line":4423},[66,89745,81858],{"class":76},[66,89747,1292],{"class":72},[66,89749,3534],{"class":72},[66,89751,89706],{"class":76},[66,89753,89709],{"class":72},[66,89755,89756],{"class":3793}," Object",[66,89758,14247],{"class":76},[66,89760,89761,89763,89765],{"class":68,"line":4428},[66,89762,89729],{"class":76},[66,89764,99],{"class":72},[66,89766,89644],{"class":76},[66,89768,89769,89771],{"class":68,"line":4434},[66,89770,89738],{"class":3793},[66,89772,89741],{"class":76},[66,89774,89775,89777,89779],{"class":68,"line":4440},[66,89776,81858],{"class":76},[66,89778,1292],{"class":72},[66,89780,17375],{"class":76},[66,89782,89783],{"class":68,"line":4445},[66,89784,89785],{"class":758},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[66,89787,89788],{"class":68,"line":9759},[66,89789,89790],{"class":758},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[66,89792,89793,89795,89797],{"class":68,"line":9783},[66,89794,89729],{"class":76},[66,89796,99],{"class":72},[66,89798,89799],{"class":76}," oldObj[k]\n",[66,89801,89802],{"class":68,"line":9788},[66,89803,4353],{"class":76},[66,89805,89806],{"class":68,"line":9794},[66,89807,54180],{"class":76},[66,89809,89810],{"class":68,"line":9821},[66,89811,4013],{"class":76},[66,89813,89814,89817,89820],{"class":68,"line":9826},[66,89815,89816],{"class":3793},"    deepCopy",[66,89818,89819],{"class":76},"(o, obj) ",[66,89821,89822],{"class":758},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[66,89824,89825,89827,89829],{"class":68,"line":9832},[66,89826,75532],{"class":76},[66,89828,60027],{"class":3793},[66,89830,89831],{"class":76},"(o)\n",[66,89833,89834,89837,89839],{"class":68,"line":9844},[66,89835,89836],{"class":76},"    o.age ",[66,89838,99],{"class":72},[66,89840,89841],{"class":102}," 20\n",[66,89843,89844,89847,89849,89851,89853],{"class":68,"line":9856},[66,89845,89846],{"class":76},"    o.hobby[",[66,89848,2183],{"class":102},[66,89850,6259],{"class":76},[66,89852,99],{"class":72},[66,89854,89855],{"class":356}," '篮球'\n",[66,89857,89858,89861,89863],{"class":68,"line":9868},[66,89859,89860],{"class":76},"    o.family ",[66,89862,99],{"class":72},[66,89864,89865],{"class":356}," '老pink'\n",[66,89867,89868,89870,89872],{"class":68,"line":11523},[66,89869,75532],{"class":76},[66,89871,60027],{"class":3793},[66,89873,71815],{"class":76},[66,89875,89876,89878,89880],{"class":68,"line":11548},[66,89877,54199],{"class":76},[66,89879,53597],{"class":53084},[66,89881,53091],{"class":76},[66,89883,89884,89886,89888],{"class":68,"line":11571},[66,89885,53569],{"class":76},[66,89887,53584],{"class":53084},[66,89889,53091],{"class":76},[66,89891,89892],{"class":68,"line":11595},[66,89893,109],{"emptyLinePlaceholder":108},[66,89895,89896,89898,89900],{"class":68,"line":11600},[66,89897,53569],{"class":76},[66,89899,52419],{"class":53084},[66,89901,53091],{"class":76},[19,89903,89904],{},[3304,89905],{"alt":62,"src":89906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[23801,89908,89910,89911],{"id":89909},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[2141,89912,89913],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,89915,89916],{},[2229,89917,89918],{"href":89918,"rel":89919},"https:\u002F\u002Fwww.lodashjs.com\u002F",[25668],[19,89921,89922],{},"lodash里边的方法都要加上一个下划线_",[19,89924,89925],{},"_.cloneDeep()",[57,89927,89929],{"className":52417,"code":89928,"language":52419,"meta":62,"style":62},"\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",[23,89930,89931,89941,89955,89959,89967,89981,90001,90013,90021,90025,90033,90038,90057,90065,90075,90083,90091,90103,90107,90113,90117,90121,90137,90145,90154,90162,90170,90178,90182],{"__ignoreMap":62},[66,89932,89933,89935,89937,89939],{"class":68,"line":69},[66,89934,53081],{"class":76},[66,89936,53085],{"class":53084},[66,89938,53088],{"class":3793},[66,89940,53091],{"class":76},[66,89942,89943,89945,89947,89949,89951,89953],{"class":68,"line":80},[66,89944,413],{"class":76},[66,89946,52419],{"class":53084},[66,89948,53100],{"class":3793},[66,89950,99],{"class":76},[66,89952,53105],{"class":356},[66,89954,53091],{"class":76},[66,89956,89957],{"class":68,"line":112},[66,89958,109],{"emptyLinePlaceholder":108},[66,89960,89961,89963,89965],{"class":68,"line":129},[66,89962,413],{"class":76},[66,89964,53118],{"class":53084},[66,89966,53091],{"class":76},[66,89968,89969,89971,89973,89975,89977,89979],{"class":68,"line":138},[66,89970,53928],{"class":76},[66,89972,53128],{"class":53084},[66,89974,53131],{"class":3793},[66,89976,99],{"class":76},[66,89978,53136],{"class":356},[66,89980,53091],{"class":76},[66,89982,89983,89985,89987,89989,89991,89993,89995,89997,89999],{"class":68,"line":227},[66,89984,53928],{"class":76},[66,89986,53128],{"class":53084},[66,89988,16724],{"class":3793},[66,89990,99],{"class":76},[66,89992,53175],{"class":356},[66,89994,53155],{"class":3793},[66,89996,99],{"class":76},[66,89998,53182],{"class":356},[66,90000,53091],{"class":76},[66,90002,90003,90005,90007,90009,90011],{"class":68,"line":236},[66,90004,53928],{"class":76},[66,90006,53191],{"class":53084},[66,90008,53194],{"class":76},[66,90010,53191],{"class":53084},[66,90012,53091],{"class":76},[66,90014,90015,90017,90019],{"class":68,"line":241},[66,90016,53569],{"class":76},[66,90018,53118],{"class":53084},[66,90020,53091],{"class":76},[66,90022,90023],{"class":68,"line":372},[66,90024,109],{"emptyLinePlaceholder":108},[66,90026,90027,90029,90031],{"class":68,"line":377},[66,90028,413],{"class":76},[66,90030,53584],{"class":53084},[66,90032,53091],{"class":76},[66,90034,90035],{"class":68,"line":392},[66,90036,90037],{"class":758},"  \u003C!-- 先引用这个库 -->\n",[66,90039,90040,90042,90044,90046,90048,90051,90053,90055],{"class":68,"line":405},[66,90041,53928],{"class":76},[66,90043,53597],{"class":53084},[66,90045,57020],{"class":3793},[66,90047,99],{"class":76},[66,90049,90050],{"class":356},"\"lodash.min.js\"",[66,90052,57095],{"class":76},[66,90054,53597],{"class":53084},[66,90056,53091],{"class":76},[66,90058,90059,90061,90063],{"class":68,"line":418},[66,90060,53928],{"class":76},[66,90062,53597],{"class":53084},[66,90064,53091],{"class":76},[66,90066,90067,90069,90071,90073],{"class":68,"line":430},[66,90068,13027],{"class":72},[66,90070,71750],{"class":102},[66,90072,15369],{"class":72},[66,90074,17375],{"class":76},[66,90076,90077,90079,90081],{"class":68,"line":438},[66,90078,73395],{"class":76},[66,90080,89586],{"class":356},[66,90082,33259],{"class":76},[66,90084,90085,90087,90089],{"class":68,"line":465},[66,90086,73405],{"class":76},[66,90088,2629],{"class":102},[66,90090,33259],{"class":76},[66,90092,90093,90095,90097,90099,90101],{"class":68,"line":1805},[66,90094,89601],{"class":76},[66,90096,89604],{"class":356},[66,90098,307],{"class":76},[66,90100,89609],{"class":356},[66,90102,89612],{"class":76},[66,90104,90105],{"class":68,"line":1817},[66,90106,79651],{"class":76},[66,90108,90109,90111],{"class":68,"line":1822},[66,90110,89621],{"class":76},[66,90112,89624],{"class":356},[66,90114,90115],{"class":68,"line":1829},[66,90116,54180],{"class":76},[66,90118,90119],{"class":68,"line":3529},[66,90120,4013],{"class":76},[66,90122,90123,90125,90127,90129,90132,90135],{"class":68,"line":3557},[66,90124,13027],{"class":72},[66,90126,89639],{"class":102},[66,90128,15369],{"class":72},[66,90130,90131],{"class":76}," _.",[66,90133,90134],{"class":3793},"cloneDeep",[66,90136,71815],{"class":76},[66,90138,90139,90141,90143],{"class":68,"line":3562},[66,90140,75532],{"class":76},[66,90142,60027],{"class":3793},[66,90144,89831],{"class":76},[66,90146,90147,90150,90152],{"class":68,"line":3579},[66,90148,90149],{"class":76},"    o.family.baby ",[66,90151,99],{"class":72},[66,90153,89865],{"class":356},[66,90155,90156,90158,90160],{"class":68,"line":3584},[66,90157,75532],{"class":76},[66,90159,60027],{"class":3793},[66,90161,71815],{"class":76},[66,90163,90164,90166,90168],{"class":68,"line":3589},[66,90165,54199],{"class":76},[66,90167,53597],{"class":53084},[66,90169,53091],{"class":76},[66,90171,90172,90174,90176],{"class":68,"line":3594},[66,90173,53569],{"class":76},[66,90175,53584],{"class":53084},[66,90177,53091],{"class":76},[66,90179,90180],{"class":68,"line":3608},[66,90181,109],{"emptyLinePlaceholder":108},[66,90183,90184,90186,90188],{"class":68,"line":3613},[66,90185,53569],{"class":76},[66,90187,52419],{"class":53084},[66,90189,53091],{"class":76},[19,90191,90192],{},[3304,90193],{"alt":62,"src":90194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[23801,90196,90198],{"id":90197},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[57,90200,90202],{"className":52417,"code":90201,"language":52419,"meta":62,"style":62},"\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",[23,90203,90204,90214,90228,90232,90240,90254,90274,90286,90294,90298,90306,90314,90324,90332,90340,90352,90356,90362,90366,90370,90375,90380,90385,90411,90419,90428,90436,90444,90452,90456],{"__ignoreMap":62},[66,90205,90206,90208,90210,90212],{"class":68,"line":69},[66,90207,53081],{"class":76},[66,90209,53085],{"class":53084},[66,90211,53088],{"class":3793},[66,90213,53091],{"class":76},[66,90215,90216,90218,90220,90222,90224,90226],{"class":68,"line":80},[66,90217,413],{"class":76},[66,90219,52419],{"class":53084},[66,90221,53100],{"class":3793},[66,90223,99],{"class":76},[66,90225,53105],{"class":356},[66,90227,53091],{"class":76},[66,90229,90230],{"class":68,"line":112},[66,90231,109],{"emptyLinePlaceholder":108},[66,90233,90234,90236,90238],{"class":68,"line":129},[66,90235,413],{"class":76},[66,90237,53118],{"class":53084},[66,90239,53091],{"class":76},[66,90241,90242,90244,90246,90248,90250,90252],{"class":68,"line":138},[66,90243,53928],{"class":76},[66,90245,53128],{"class":53084},[66,90247,53131],{"class":3793},[66,90249,99],{"class":76},[66,90251,53136],{"class":356},[66,90253,53091],{"class":76},[66,90255,90256,90258,90260,90262,90264,90266,90268,90270,90272],{"class":68,"line":227},[66,90257,53928],{"class":76},[66,90259,53128],{"class":53084},[66,90261,16724],{"class":3793},[66,90263,99],{"class":76},[66,90265,53175],{"class":356},[66,90267,53155],{"class":3793},[66,90269,99],{"class":76},[66,90271,53182],{"class":356},[66,90273,53091],{"class":76},[66,90275,90276,90278,90280,90282,90284],{"class":68,"line":236},[66,90277,53928],{"class":76},[66,90279,53191],{"class":53084},[66,90281,53194],{"class":76},[66,90283,53191],{"class":53084},[66,90285,53091],{"class":76},[66,90287,90288,90290,90292],{"class":68,"line":241},[66,90289,53569],{"class":76},[66,90291,53118],{"class":53084},[66,90293,53091],{"class":76},[66,90295,90296],{"class":68,"line":372},[66,90297,109],{"emptyLinePlaceholder":108},[66,90299,90300,90302,90304],{"class":68,"line":377},[66,90301,413],{"class":76},[66,90303,53584],{"class":53084},[66,90305,53091],{"class":76},[66,90307,90308,90310,90312],{"class":68,"line":392},[66,90309,53928],{"class":76},[66,90311,53597],{"class":53084},[66,90313,53091],{"class":76},[66,90315,90316,90318,90320,90322],{"class":68,"line":405},[66,90317,13027],{"class":72},[66,90319,71750],{"class":102},[66,90321,15369],{"class":72},[66,90323,17375],{"class":76},[66,90325,90326,90328,90330],{"class":68,"line":418},[66,90327,73395],{"class":76},[66,90329,89586],{"class":356},[66,90331,33259],{"class":76},[66,90333,90334,90336,90338],{"class":68,"line":430},[66,90335,73405],{"class":76},[66,90337,2629],{"class":102},[66,90339,33259],{"class":76},[66,90341,90342,90344,90346,90348,90350],{"class":68,"line":438},[66,90343,89601],{"class":76},[66,90345,89604],{"class":356},[66,90347,307],{"class":76},[66,90349,89609],{"class":356},[66,90351,89612],{"class":76},[66,90353,90354],{"class":68,"line":465},[66,90355,79651],{"class":76},[66,90357,90358,90360],{"class":68,"line":1805},[66,90359,89621],{"class":76},[66,90361,89624],{"class":356},[66,90363,90364],{"class":68,"line":1817},[66,90365,54180],{"class":76},[66,90367,90368],{"class":68,"line":1822},[66,90369,4013],{"class":76},[66,90371,90372],{"class":68,"line":1829},[66,90373,90374],{"class":758},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[66,90376,90377],{"class":68,"line":3529},[66,90378,90379],{"class":758},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[66,90381,90382],{"class":68,"line":3557},[66,90383,90384],{"class":758},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[66,90386,90387,90389,90391,90393,90396,90398,90401,90403,90405,90407,90409],{"class":68,"line":3562},[66,90388,13027],{"class":72},[66,90390,89639],{"class":102},[66,90392,15369],{"class":72},[66,90394,90395],{"class":102}," JSON",[66,90397,2537],{"class":76},[66,90399,90400],{"class":3793},"parse",[66,90402,348],{"class":76},[66,90404,73443],{"class":102},[66,90406,2537],{"class":76},[66,90408,73448],{"class":3793},[66,90410,73451],{"class":76},[66,90412,90413,90415,90417],{"class":68,"line":3579},[66,90414,75532],{"class":76},[66,90416,60027],{"class":3793},[66,90418,89831],{"class":76},[66,90420,90421,90423,90425],{"class":68,"line":3584},[66,90422,90149],{"class":76},[66,90424,99],{"class":72},[66,90426,90427],{"class":356}," '123'\n",[66,90429,90430,90432,90434],{"class":68,"line":3589},[66,90431,75532],{"class":76},[66,90433,60027],{"class":3793},[66,90435,71815],{"class":76},[66,90437,90438,90440,90442],{"class":68,"line":3594},[66,90439,54199],{"class":76},[66,90441,53597],{"class":53084},[66,90443,53091],{"class":76},[66,90445,90446,90448,90450],{"class":68,"line":3608},[66,90447,53569],{"class":76},[66,90449,53584],{"class":53084},[66,90451,53091],{"class":76},[66,90453,90454],{"class":68,"line":3613},[66,90455,109],{"emptyLinePlaceholder":108},[66,90457,90458,90460,90462],{"class":68,"line":4401},[66,90459,53569],{"class":76},[66,90461,52419],{"class":53084},[66,90463,53091],{"class":76},[19,90465,90466],{},[3304,90467],{"alt":62,"src":90468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,90470,90472],{"id":90471},"_415-异常处理","4.15 异常处理",[31,90474,90475],{},[34,90476,90477],{},"throw抛异常",[19,90479,90480],{},[3304,90481],{"alt":62,"src":90482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[31,90484,90485],{"start":80},[34,90486,90487],{},"try\u002Fcatch 捕获错误信息",[19,90489,90490],{},[3304,90491],{"alt":62,"src":90492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[57,90494,90496],{"className":52417,"code":90495,"language":52419,"meta":62,"style":62},"\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",[23,90497,90498,90508,90522,90526,90534,90548,90568,90580,90588,90592,90600,90612,90620,90629,90636,90641,90660,90669,90680,90685,90695,90700,90705,90710,90727,90731,90736,90743,90755,90759,90771,90775,90779,90784,90789,90796,90804,90812,90816],{"__ignoreMap":62},[66,90499,90500,90502,90504,90506],{"class":68,"line":69},[66,90501,53081],{"class":76},[66,90503,53085],{"class":53084},[66,90505,53088],{"class":3793},[66,90507,53091],{"class":76},[66,90509,90510,90512,90514,90516,90518,90520],{"class":68,"line":80},[66,90511,413],{"class":76},[66,90513,52419],{"class":53084},[66,90515,53100],{"class":3793},[66,90517,99],{"class":76},[66,90519,53105],{"class":356},[66,90521,53091],{"class":76},[66,90523,90524],{"class":68,"line":112},[66,90525,109],{"emptyLinePlaceholder":108},[66,90527,90528,90530,90532],{"class":68,"line":129},[66,90529,413],{"class":76},[66,90531,53118],{"class":53084},[66,90533,53091],{"class":76},[66,90535,90536,90538,90540,90542,90544,90546],{"class":68,"line":138},[66,90537,53928],{"class":76},[66,90539,53128],{"class":53084},[66,90541,53131],{"class":3793},[66,90543,99],{"class":76},[66,90545,53136],{"class":356},[66,90547,53091],{"class":76},[66,90549,90550,90552,90554,90556,90558,90560,90562,90564,90566],{"class":68,"line":227},[66,90551,53928],{"class":76},[66,90553,53128],{"class":53084},[66,90555,16724],{"class":3793},[66,90557,99],{"class":76},[66,90559,53175],{"class":356},[66,90561,53155],{"class":3793},[66,90563,99],{"class":76},[66,90565,53182],{"class":356},[66,90567,53091],{"class":76},[66,90569,90570,90572,90574,90576,90578],{"class":68,"line":236},[66,90571,53928],{"class":76},[66,90573,53191],{"class":53084},[66,90575,53194],{"class":76},[66,90577,53191],{"class":53084},[66,90579,53091],{"class":76},[66,90581,90582,90584,90586],{"class":68,"line":241},[66,90583,53569],{"class":76},[66,90585,53118],{"class":53084},[66,90587,53091],{"class":76},[66,90589,90590],{"class":68,"line":372},[66,90591,109],{"emptyLinePlaceholder":108},[66,90593,90594,90596,90598],{"class":68,"line":377},[66,90595,413],{"class":76},[66,90597,53584],{"class":53084},[66,90599,53091],{"class":76},[66,90601,90602,90604,90606,90608,90610],{"class":68,"line":392},[66,90603,53928],{"class":76},[66,90605,19],{"class":53084},[66,90607,55276],{"class":76},[66,90609,19],{"class":53084},[66,90611,53091],{"class":76},[66,90613,90614,90616,90618],{"class":68,"line":405},[66,90615,53928],{"class":76},[66,90617,53597],{"class":53084},[66,90619,53091],{"class":76},[66,90621,90622,90624,90627],{"class":68,"line":418},[66,90623,71863],{"class":72},[66,90625,90626],{"class":3793}," fn",[66,90628,12659],{"class":76},[66,90630,90631,90634],{"class":68,"line":430},[66,90632,90633],{"class":72},"      try",[66,90635,17375],{"class":76},[66,90637,90638],{"class":68,"line":438},[66,90639,90640],{"class":758},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[66,90642,90643,90645,90647,90649,90651,90653,90655,90658],{"class":68,"line":465},[66,90644,63049],{"class":72},[66,90646,8636],{"class":102},[66,90648,15369],{"class":72},[66,90650,56177],{"class":76},[66,90652,56180],{"class":3793},[66,90654,348],{"class":76},[66,90656,90657],{"class":356},"'.p'",[66,90659,313],{"class":76},[66,90661,90662,90665,90667],{"class":68,"line":1805},[66,90663,90664],{"class":76},"        p.style.color ",[66,90666,99],{"class":72},[66,90668,68830],{"class":356},[66,90670,90671,90674,90677],{"class":68,"line":1817},[66,90672,90673],{"class":76},"      } ",[66,90675,90676],{"class":72},"catch",[66,90678,90679],{"class":76}," (err) {\n",[66,90681,90682],{"class":68,"line":1822},[66,90683,90684],{"class":758},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[66,90686,90687,90690,90692],{"class":68,"line":1829},[66,90688,90689],{"class":76},"        console.",[66,90691,60027],{"class":3793},[66,90693,90694],{"class":76},"(err.message)\n",[66,90696,90697],{"class":68,"line":3529},[66,90698,90699],{"class":758},"        \u002F\u002F 想要中断程序，需要加return\n",[66,90701,90702],{"class":68,"line":3557},[66,90703,90704],{"class":758},"        \u002F\u002F return\n",[66,90706,90707],{"class":68,"line":3562},[66,90708,90709],{"class":758},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[66,90711,90712,90715,90717,90720,90722,90725],{"class":68,"line":3579},[66,90713,90714],{"class":72},"        throw",[66,90716,13384],{"class":72},[66,90718,90719],{"class":3793}," Error",[66,90721,348],{"class":76},[66,90723,90724],{"class":356},"'你看看，选择器错误了吧'",[66,90726,313],{"class":76},[66,90728,90729],{"class":68,"line":3584},[66,90730,54180],{"class":76},[66,90732,90733],{"class":68,"line":3589},[66,90734,90735],{"class":758},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[66,90737,90738,90741],{"class":68,"line":3594},[66,90739,90740],{"class":72},"      finally",[66,90742,17375],{"class":76},[66,90744,90745,90748,90750,90753],{"class":68,"line":3608},[66,90746,90747],{"class":3793},"        alert",[66,90749,348],{"class":76},[66,90751,90752],{"class":356},"'弹出对话框'",[66,90754,313],{"class":76},[66,90756,90757],{"class":68,"line":3613},[66,90758,54180],{"class":76},[66,90760,90761,90763,90765,90767,90769],{"class":68,"line":4401},[66,90762,60024],{"class":76},[66,90764,60027],{"class":3793},[66,90766,348],{"class":76},[66,90768,2452],{"class":102},[66,90770,313],{"class":76},[66,90772,90773],{"class":68,"line":4415},[66,90774,109],{"emptyLinePlaceholder":108},[66,90776,90777],{"class":68,"line":4423},[66,90778,4013],{"class":76},[66,90780,90781],{"class":68,"line":4428},[66,90782,90783],{"class":758},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[66,90785,90786],{"class":68,"line":4434},[66,90787,90788],{"class":758},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[66,90790,90791,90794],{"class":68,"line":4440},[66,90792,90793],{"class":3793},"    fn",[66,90795,1253],{"class":76},[66,90797,90798,90800,90802],{"class":68,"line":4445},[66,90799,54199],{"class":76},[66,90801,53597],{"class":53084},[66,90803,53091],{"class":76},[66,90805,90806,90808,90810],{"class":68,"line":9759},[66,90807,53569],{"class":76},[66,90809,53584],{"class":53084},[66,90811,53091],{"class":76},[66,90813,90814],{"class":68,"line":9783},[66,90815,109],{"emptyLinePlaceholder":108},[66,90817,90818,90820,90822],{"class":68,"line":9788},[66,90819,53569],{"class":76},[66,90821,52419],{"class":53084},[66,90823,53091],{"class":76},[19,90825,90826],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[31,90828,90829],{"start":112},[34,90830,90831],{},"debugger",[19,90833,90834],{},[3304,90835],{"alt":62,"src":90836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,90838,90839],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,90841,90843],{"id":90842},"_416-处理this","4.16 处理this",[484,90845,90847],{"id":90846},"_4161-this的指向","4.16.1 this的指向",[31,90849,90850],{},[34,90851,90852],{},"普通函数的this",[19,90854,90855],{},[3304,90856],{"alt":62,"src":90857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[31,90859,90860],{"start":80},[34,90861,90862],{},"箭头函数的this",[19,90864,90865],{},[3304,90866],{"alt":62,"src":90867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,90869,90870],{},[3304,90871],{"alt":62,"src":90872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,90874,90875],{},[3304,90876],{"alt":62,"src":90877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[484,90879,90881],{"id":90880},"_4162-this的改变","4.16.2 this的改变",[19,90883,90884],{},"call() apply() bind()",[31,90886,90887],{},[34,90888,90889],{},"call()",[19,90891,90892],{},[3304,90893],{"alt":62,"src":90894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,90896,90897],{},"两个作用：①调用函数；②改变this指向",[57,90899,90901],{"className":54849,"code":90900,"language":54851,"meta":62,"style":62},"\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",[23,90902,90903,90911,90919,90923,90928,90932,90937,90942,90947,90951,90956,90964],{"__ignoreMap":62},[66,90904,90905,90907,90909],{"class":68,"line":69},[66,90906,413],{"class":76},[66,90908,53584],{"class":53084},[66,90910,53091],{"class":76},[66,90912,90913,90915,90917],{"class":68,"line":80},[66,90914,53928],{"class":76},[66,90916,53597],{"class":53084},[66,90918,53091],{"class":76},[66,90920,90921],{"class":68,"line":112},[66,90922,73302],{"class":76},[66,90924,90925],{"class":68,"line":129},[66,90926,90927],{"class":76},"      uname: 'pink'\n",[66,90929,90930],{"class":68,"line":138},[66,90931,4013],{"class":76},[66,90933,90934],{"class":68,"line":227},[66,90935,90936],{"class":76},"    function fn(x, y) {\n",[66,90938,90939],{"class":68,"line":236},[66,90940,90941],{"class":76},"      console.log(this)  \u002F\u002Fwindow\n",[66,90943,90944],{"class":68,"line":241},[66,90945,90946],{"class":76},"      console.log(x + y)\n",[66,90948,90949],{"class":68,"line":372},[66,90950,4013],{"class":76},[66,90952,90953],{"class":68,"line":377},[66,90954,90955],{"class":76},"    fn.call(obj, 1, 2)\n",[66,90957,90958,90960,90962],{"class":68,"line":392},[66,90959,54199],{"class":76},[66,90961,53597],{"class":53084},[66,90963,53091],{"class":76},[66,90965,90966,90968,90970],{"class":68,"line":405},[66,90967,53569],{"class":76},[66,90969,53584],{"class":53084},[66,90971,53091],{"class":76},[19,90973,90974],{},[3304,90975],{"alt":62,"src":90976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[31,90978,90979],{"start":80},[34,90980,90981],{},"apply()",[19,90983,90984],{},[3304,90985],{"alt":62,"src":90986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,90988,90897],{},[19,90990,90991],{},"call传递的是普通参数，而apply必须传递的是数组",[57,90993,90995],{"className":52417,"code":90994,"language":52419,"meta":62,"style":62},"\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",[23,90996,90997,91007,91021,91025,91033,91047,91067,91079,91087,91091,91099,91107,91117,91124,91128,91133,91149,91161,91175,91179,91184,91203,91208,91212,91217,91222,91230,91235,91257,91262,91278,91294,91306,91310,91315,91334,91342,91350,91354],{"__ignoreMap":62},[66,90998,90999,91001,91003,91005],{"class":68,"line":69},[66,91000,53081],{"class":76},[66,91002,53085],{"class":53084},[66,91004,53088],{"class":3793},[66,91006,53091],{"class":76},[66,91008,91009,91011,91013,91015,91017,91019],{"class":68,"line":80},[66,91010,413],{"class":76},[66,91012,52419],{"class":53084},[66,91014,53100],{"class":3793},[66,91016,99],{"class":76},[66,91018,53105],{"class":356},[66,91020,53091],{"class":76},[66,91022,91023],{"class":68,"line":112},[66,91024,109],{"emptyLinePlaceholder":108},[66,91026,91027,91029,91031],{"class":68,"line":129},[66,91028,413],{"class":76},[66,91030,53118],{"class":53084},[66,91032,53091],{"class":76},[66,91034,91035,91037,91039,91041,91043,91045],{"class":68,"line":138},[66,91036,53928],{"class":76},[66,91038,53128],{"class":53084},[66,91040,53131],{"class":3793},[66,91042,99],{"class":76},[66,91044,53136],{"class":356},[66,91046,53091],{"class":76},[66,91048,91049,91051,91053,91055,91057,91059,91061,91063,91065],{"class":68,"line":227},[66,91050,53928],{"class":76},[66,91052,53128],{"class":53084},[66,91054,16724],{"class":3793},[66,91056,99],{"class":76},[66,91058,53175],{"class":356},[66,91060,53155],{"class":3793},[66,91062,99],{"class":76},[66,91064,53182],{"class":356},[66,91066,53091],{"class":76},[66,91068,91069,91071,91073,91075,91077],{"class":68,"line":236},[66,91070,53928],{"class":76},[66,91072,53191],{"class":53084},[66,91074,53194],{"class":76},[66,91076,53191],{"class":53084},[66,91078,53091],{"class":76},[66,91080,91081,91083,91085],{"class":68,"line":241},[66,91082,53569],{"class":76},[66,91084,53118],{"class":53084},[66,91086,53091],{"class":76},[66,91088,91089],{"class":68,"line":372},[66,91090,109],{"emptyLinePlaceholder":108},[66,91092,91093,91095,91097],{"class":68,"line":377},[66,91094,413],{"class":76},[66,91096,53584],{"class":53084},[66,91098,53091],{"class":76},[66,91100,91101,91103,91105],{"class":68,"line":392},[66,91102,53928],{"class":76},[66,91104,53597],{"class":53084},[66,91106,53091],{"class":76},[66,91108,91109,91111,91113,91115],{"class":68,"line":405},[66,91110,13027],{"class":72},[66,91112,71750],{"class":102},[66,91114,15369],{"class":72},[66,91116,17375],{"class":76},[66,91118,91119,91121],{"class":68,"line":418},[66,91120,73405],{"class":76},[66,91122,91123],{"class":102},"18\n",[66,91125,91126],{"class":68,"line":430},[66,91127,4013],{"class":76},[66,91129,91130],{"class":68,"line":438},[66,91131,91132],{"class":758},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[66,91134,91135,91137,91139,91141,91143,91145,91147],{"class":68,"line":465},[66,91136,71863],{"class":72},[66,91138,90626],{"class":3793},[66,91140,348],{"class":76},[66,91142,2799],{"class":1234},[66,91144,307],{"class":76},[66,91146,2824],{"class":1234},[66,91148,14247],{"class":76},[66,91150,91151,91153,91155,91157,91159],{"class":68,"line":1805},[66,91152,60024],{"class":76},[66,91154,60027],{"class":3793},[66,91156,348],{"class":76},[66,91158,88769],{"class":102},[66,91160,313],{"class":76},[66,91162,91163,91165,91167,91170,91172],{"class":68,"line":1817},[66,91164,60024],{"class":76},[66,91166,60027],{"class":3793},[66,91168,91169],{"class":76},"(x ",[66,91171,1184],{"class":72},[66,91173,91174],{"class":76}," y)\n",[66,91176,91177],{"class":68,"line":1822},[66,91178,4013],{"class":76},[66,91180,91181],{"class":68,"line":1829},[66,91182,91183],{"class":758},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[66,91185,91186,91189,91192,91195,91197,91199,91201],{"class":68,"line":3529},[66,91187,91188],{"class":76},"    fn.",[66,91190,91191],{"class":3793},"apply",[66,91193,91194],{"class":76},"(obj, [",[66,91196,304],{"class":102},[66,91198,307],{"class":76},[66,91200,795],{"class":102},[66,91202,6473],{"class":76},[66,91204,91205],{"class":68,"line":3557},[66,91206,91207],{"class":758},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[66,91209,91210],{"class":68,"line":3562},[66,91211,109],{"emptyLinePlaceholder":108},[66,91213,91214],{"class":68,"line":3579},[66,91215,91216],{"class":758},"    \u002F\u002F 使用场景：求数组最大值\n",[66,91218,91219],{"class":68,"line":3584},[66,91220,91221],{"class":758},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[66,91223,91224,91227],{"class":68,"line":3589},[66,91225,91226],{"class":758},"    \u002F\u002F console.log(max)",[66,91228,91229],{"class":758},"   \u002F\u002F3\n",[66,91231,91232],{"class":68,"line":3594},[66,91233,91234],{"class":758},"    \u002F\u002F 指向空或者Math都是可以的\n",[66,91236,91237,91239,91241,91243,91245,91247,91249,91251,91253,91255],{"class":68,"line":3608},[66,91238,13027],{"class":72},[66,91240,59475],{"class":102},[66,91242,15369],{"class":72},[66,91244,688],{"class":76},[66,91246,310],{"class":102},[66,91248,307],{"class":76},[66,91250,2483],{"class":102},[66,91252,307],{"class":76},[66,91254,2514],{"class":102},[66,91256,704],{"class":76},[66,91258,91259],{"class":68,"line":3613},[66,91260,91261],{"class":758},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[66,91263,91264,91266,91268,91270,91273,91275],{"class":68,"line":4401},[66,91265,13027],{"class":72},[66,91267,7762],{"class":102},[66,91269,15369],{"class":72},[66,91271,91272],{"class":76}," Math.max.",[66,91274,91191],{"class":3793},[66,91276,91277],{"class":76},"(Math, arr)\n",[66,91279,91280,91282,91285,91287,91290,91292],{"class":68,"line":4415},[66,91281,13027],{"class":72},[66,91283,91284],{"class":102}," min",[66,91286,15369],{"class":72},[66,91288,91289],{"class":76}," Math.min.",[66,91291,91191],{"class":3793},[66,91293,91277],{"class":76},[66,91295,91296,91298,91300,91303],{"class":68,"line":4423},[66,91297,75532],{"class":76},[66,91299,60027],{"class":3793},[66,91301,91302],{"class":76},"(max, min)     ",[66,91304,91305],{"class":758},"\u002F\u002F100,4\n",[66,91307,91308],{"class":68,"line":4428},[66,91309,109],{"emptyLinePlaceholder":108},[66,91311,91312],{"class":68,"line":4434},[66,91313,91314],{"class":758},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[66,91316,91317,91319,91321,91324,91326,91328,91331],{"class":68,"line":4440},[66,91318,75532],{"class":76},[66,91320,60027],{"class":3793},[66,91322,91323],{"class":76},"(Max.",[66,91325,7826],{"class":3793},[66,91327,348],{"class":76},[66,91329,91330],{"class":72},"...",[66,91332,91333],{"class":76},"arr))\n",[66,91335,91336,91338,91340],{"class":68,"line":4445},[66,91337,54199],{"class":76},[66,91339,53597],{"class":53084},[66,91341,53091],{"class":76},[66,91343,91344,91346,91348],{"class":68,"line":9759},[66,91345,53569],{"class":76},[66,91347,53584],{"class":53084},[66,91349,53091],{"class":76},[66,91351,91352],{"class":68,"line":9783},[66,91353,109],{"emptyLinePlaceholder":108},[66,91355,91356,91358,91360],{"class":68,"line":9788},[66,91357,53569],{"class":76},[66,91359,52419],{"class":53084},[66,91361,53091],{"class":76},[19,91363,91364],{},[3304,91365],{"alt":62,"src":91366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[31,91368,91369],{"start":112},[34,91370,91371],{},"bind()",[19,91373,91374],{},[3304,91375],{"alt":62,"src":91376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,91378,91379],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,91381,91382],{},"bind的语法跟call很相似",[57,91384,91386],{"className":54849,"code":91385,"language":54851,"meta":62,"style":62},"\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",[23,91387,91388,91396,91404,91408,91413,91417,91421,91426,91430,91435,91440,91445,91450,91455,91460,91465,91469,91477],{"__ignoreMap":62},[66,91389,91390,91392,91394],{"class":68,"line":69},[66,91391,413],{"class":76},[66,91393,53584],{"class":53084},[66,91395,53091],{"class":76},[66,91397,91398,91400,91402],{"class":68,"line":80},[66,91399,53928],{"class":76},[66,91401,53597],{"class":53084},[66,91403,53091],{"class":76},[66,91405,91406],{"class":68,"line":112},[66,91407,73302],{"class":76},[66,91409,91410],{"class":68,"line":129},[66,91411,91412],{"class":76},"      age: 18\n",[66,91414,91415],{"class":68,"line":138},[66,91416,4013],{"class":76},[66,91418,91419],{"class":68,"line":227},[66,91420,78922],{"class":76},[66,91422,91423],{"class":68,"line":236},[66,91424,91425],{"class":76},"      console.log(this)\n",[66,91427,91428],{"class":68,"line":241},[66,91429,4013],{"class":76},[66,91431,91432],{"class":68,"line":372},[66,91433,91434],{"class":76},"    \u002F\u002F 1.bind 不会调用函数\n",[66,91436,91437],{"class":68,"line":377},[66,91438,91439],{"class":76},"    \u002F\u002F 2.bind能改变this的指向\n",[66,91441,91442],{"class":68,"line":392},[66,91443,91444],{"class":76},"    fn.bind()\n",[66,91446,91447],{"class":68,"line":405},[66,91448,91449],{"class":76},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[66,91451,91452],{"class":68,"line":418},[66,91453,91454],{"class":76},"    const fun = fn.bind(obj)\n",[66,91456,91457],{"class":68,"line":430},[66,91458,91459],{"class":76},"    \u002F\u002F console.log(fun)\n",[66,91461,91462],{"class":68,"line":438},[66,91463,91464],{"class":76},"    \u002F\u002F 调用,查看this的指向\n",[66,91466,91467],{"class":68,"line":465},[66,91468,54433],{"class":76},[66,91470,91471,91473,91475],{"class":68,"line":1805},[66,91472,54199],{"class":76},[66,91474,53597],{"class":53084},[66,91476,53091],{"class":76},[66,91478,91479,91481,91483],{"class":68,"line":1817},[66,91480,53569],{"class":76},[66,91482,53584],{"class":53084},[66,91484,53091],{"class":76},[19,91486,91487],{},[3304,91488],{"alt":62,"src":91489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[31,91491,91492],{"start":129},[34,91493,91494],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[57,91496,91498],{"className":54849,"code":91497,"language":54851,"meta":62,"style":62},"\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",[23,91499,91500,91508,91521,91529,91534,91538,91543,91548,91553,91558,91563,91568,91573,91578,91582,91590],{"__ignoreMap":62},[66,91501,91502,91504,91506],{"class":68,"line":69},[66,91503,413],{"class":76},[66,91505,53584],{"class":53084},[66,91507,53091],{"class":76},[66,91509,91510,91512,91514,91517,91519],{"class":68,"line":80},[66,91511,53928],{"class":76},[66,91513,55668],{"class":53084},[66,91515,91516],{"class":76},">禁用\u003C\u002F",[66,91518,55668],{"class":53084},[66,91520,53091],{"class":76},[66,91522,91523,91525,91527],{"class":68,"line":112},[66,91524,53928],{"class":76},[66,91526,53597],{"class":53084},[66,91528,53091],{"class":76},[66,91530,91531],{"class":68,"line":129},[66,91532,91533],{"class":76},"    const btn = document.querySelector('button')\n",[66,91535,91536],{"class":68,"line":138},[66,91537,60796],{"class":76},[66,91539,91540],{"class":68,"line":227},[66,91541,91542],{"class":76},"      this.disabled = true\n",[66,91544,91545],{"class":68,"line":236},[66,91546,91547],{"class":76},"      \u002F\u002F 定时器是window进行调用的\n",[66,91549,91550],{"class":68,"line":241},[66,91551,91552],{"class":76},"      setTimeout(function () {\n",[66,91554,91555],{"class":68,"line":372},[66,91556,91557],{"class":76},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[66,91559,91560],{"class":68,"line":377},[66,91561,91562],{"class":76},"        this.disabled = false\n",[66,91564,91565],{"class":68,"line":392},[66,91566,91567],{"class":76},"      }.bind(this), 2000)\n",[66,91569,91570],{"class":68,"line":405},[66,91571,91572],{"class":76},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[66,91574,91575],{"class":68,"line":418},[66,91576,91577],{"class":76},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[66,91579,91580],{"class":68,"line":430},[66,91581,35249],{"class":76},[66,91583,91584,91586,91588],{"class":68,"line":438},[66,91585,54199],{"class":76},[66,91587,53597],{"class":53084},[66,91589,53091],{"class":76},[66,91591,91592,91594,91596],{"class":68,"line":465},[66,91593,53569],{"class":76},[66,91595,53584],{"class":53084},[66,91597,53091],{"class":76},[31,91599,91600],{"start":138},[34,91601,23756],{},[19,91603,91604],{},[3304,91605],{"alt":62,"src":91606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,91608,91610],{"id":91609},"_417-性能优化","4.17 性能优化",[484,91612,91614],{"id":91613},"_4171-防抖","4.17.1 防抖",[19,91616,91617],{},[3304,91618],{"alt":62,"src":91619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,91621,91622],{},[2141,91623,91624],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,91626,91627],{},"防抖实现方式：",[2982,91629,91630],{},[34,91631,91632],{},"lodash 提供了防抖处理",[19,91634,91635],{},"_.debounce(func,[wait=0],[options={}])",[19,91637,91638],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[57,91640,91642],{"className":52417,"code":91641,"language":52419,"meta":62,"style":62},"\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",[23,91643,91644,91654,91668,91672,91680,91694,91714,91726,91734,91740,91750,91762,91774,91785,91797,91807,91817,91830,91834,91842,91850,91854,91862,91880,91898,91906,91925,91935,91944,91955,91960,91964,91969,91974,91979,92004,92012,92020,92024],{"__ignoreMap":62},[66,91645,91646,91648,91650,91652],{"class":68,"line":69},[66,91647,53081],{"class":76},[66,91649,53085],{"class":53084},[66,91651,53088],{"class":3793},[66,91653,53091],{"class":76},[66,91655,91656,91658,91660,91662,91664,91666],{"class":68,"line":80},[66,91657,413],{"class":76},[66,91659,52419],{"class":53084},[66,91661,53100],{"class":3793},[66,91663,99],{"class":76},[66,91665,53105],{"class":356},[66,91667,53091],{"class":76},[66,91669,91670],{"class":68,"line":112},[66,91671,109],{"emptyLinePlaceholder":108},[66,91673,91674,91676,91678],{"class":68,"line":129},[66,91675,413],{"class":76},[66,91677,53118],{"class":53084},[66,91679,53091],{"class":76},[66,91681,91682,91684,91686,91688,91690,91692],{"class":68,"line":138},[66,91683,53928],{"class":76},[66,91685,53128],{"class":53084},[66,91687,53131],{"class":3793},[66,91689,99],{"class":76},[66,91691,53136],{"class":356},[66,91693,53091],{"class":76},[66,91695,91696,91698,91700,91702,91704,91706,91708,91710,91712],{"class":68,"line":227},[66,91697,53928],{"class":76},[66,91699,53128],{"class":53084},[66,91701,16724],{"class":3793},[66,91703,99],{"class":76},[66,91705,53175],{"class":356},[66,91707,53155],{"class":3793},[66,91709,99],{"class":76},[66,91711,53182],{"class":356},[66,91713,53091],{"class":76},[66,91715,91716,91718,91720,91722,91724],{"class":68,"line":236},[66,91717,53928],{"class":76},[66,91719,53191],{"class":53084},[66,91721,53194],{"class":76},[66,91723,53191],{"class":53084},[66,91725,53091],{"class":76},[66,91727,91728,91730,91732],{"class":68,"line":241},[66,91729,53928],{"class":76},[66,91731,1903],{"class":53084},[66,91733,53091],{"class":76},[66,91735,91736,91738],{"class":68,"line":372},[66,91737,56533],{"class":3793},[66,91739,17375],{"class":76},[66,91741,91742,91744,91746,91748],{"class":68,"line":377},[66,91743,74375],{"class":102},[66,91745,53221],{"class":76},[66,91747,62285],{"class":102},[66,91749,3135],{"class":76},[66,91751,91752,91754,91756,91758,91760],{"class":68,"line":392},[66,91753,56552],{"class":102},[66,91755,53221],{"class":76},[66,91757,3552],{"class":102},[66,91759,53276],{"class":72},[66,91761,3135],{"class":76},[66,91763,91764,91766,91768,91770,91772],{"class":68,"line":405},[66,91765,56566],{"class":102},[66,91767,53221],{"class":76},[66,91769,3552],{"class":102},[66,91771,53276],{"class":72},[66,91773,3135],{"class":76},[66,91775,91776,91778,91780,91783],{"class":68,"line":418},[66,91777,56665],{"class":102},[66,91779,53221],{"class":76},[66,91781,91782],{"class":102},"gray",[66,91784,3135],{"class":76},[66,91786,91787,91789,91791,91793,91795],{"class":68,"line":430},[66,91788,56703],{"class":102},[66,91790,53221],{"class":76},[66,91792,2804],{"class":102},[66,91794,53276],{"class":72},[66,91796,3135],{"class":76},[66,91798,91799,91801,91803,91805],{"class":68,"line":438},[66,91800,59196],{"class":102},[66,91802,53221],{"class":76},[66,91804,62621],{"class":102},[66,91806,3135],{"class":76},[66,91808,91809,91811,91813,91815],{"class":68,"line":465},[66,91810,59066],{"class":102},[66,91812,53221],{"class":76},[66,91814,53376],{"class":102},[66,91816,3135],{"class":76},[66,91818,91819,91822,91824,91826,91828],{"class":68,"line":1805},[66,91820,91821],{"class":102},"      padding-top",[66,91823,53221],{"class":76},[66,91825,752],{"class":102},[66,91827,53276],{"class":72},[66,91829,3135],{"class":76},[66,91831,91832],{"class":68,"line":1817},[66,91833,4013],{"class":76},[66,91835,91836,91838,91840],{"class":68,"line":1822},[66,91837,54199],{"class":76},[66,91839,1903],{"class":53084},[66,91841,53091],{"class":76},[66,91843,91844,91846,91848],{"class":68,"line":1829},[66,91845,53569],{"class":76},[66,91847,53118],{"class":53084},[66,91849,53091],{"class":76},[66,91851,91852],{"class":68,"line":3529},[66,91853,109],{"emptyLinePlaceholder":108},[66,91855,91856,91858,91860],{"class":68,"line":3557},[66,91857,413],{"class":76},[66,91859,53584],{"class":53084},[66,91861,53091],{"class":76},[66,91863,91864,91866,91868,91870,91872,91874,91876,91878],{"class":68,"line":3562},[66,91865,53928],{"class":76},[66,91867,53395],{"class":53084},[66,91869,55268],{"class":3793},[66,91871,99],{"class":76},[66,91873,55273],{"class":356},[66,91875,57095],{"class":76},[66,91877,53395],{"class":53084},[66,91879,53091],{"class":76},[66,91881,91882,91884,91886,91888,91890,91892,91894,91896],{"class":68,"line":3579},[66,91883,53928],{"class":76},[66,91885,53597],{"class":53084},[66,91887,57020],{"class":3793},[66,91889,99],{"class":76},[66,91891,90050],{"class":356},[66,91893,57095],{"class":76},[66,91895,53597],{"class":53084},[66,91897,53091],{"class":76},[66,91899,91900,91902,91904],{"class":68,"line":3584},[66,91901,53928],{"class":76},[66,91903,53597],{"class":53084},[66,91905,53091],{"class":76},[66,91907,91908,91910,91912,91914,91916,91918,91920,91923],{"class":68,"line":3589},[66,91909,13027],{"class":72},[66,91911,88709],{"class":102},[66,91913,15369],{"class":72},[66,91915,56177],{"class":76},[66,91917,56180],{"class":3793},[66,91919,348],{"class":76},[66,91921,91922],{"class":356},"'.box'",[66,91924,313],{"class":76},[66,91926,91927,91929,91931,91933],{"class":68,"line":3594},[66,91928,54003],{"class":72},[66,91930,117],{"class":76},[66,91932,99],{"class":72},[66,91934,197],{"class":102},[66,91936,91937,91939,91942],{"class":68,"line":3608},[66,91938,71863],{"class":72},[66,91940,91941],{"class":3793}," mouseMove",[66,91943,12659],{"class":76},[66,91945,91946,91949,91951,91953],{"class":68,"line":3613},[66,91947,91948],{"class":76},"      box.innerHTML ",[66,91950,99],{"class":72},[66,91952,1596],{"class":76},[66,91954,4526],{"class":72},[66,91956,91957],{"class":68,"line":4401},[66,91958,91959],{"class":758},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[66,91961,91962],{"class":68,"line":4415},[66,91963,4013],{"class":76},[66,91965,91966],{"class":68,"line":4423},[66,91967,91968],{"class":758},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[66,91970,91971],{"class":68,"line":4428},[66,91972,91973],{"class":758},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[66,91975,91976],{"class":68,"line":4434},[66,91977,91978],{"class":758},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[66,91980,91981,91984,91986,91988,91991,91994,91997,92000,92002],{"class":68,"line":4440},[66,91982,91983],{"class":76},"    box.",[66,91985,59593],{"class":3793},[66,91987,348],{"class":76},[66,91989,91990],{"class":356},"'mousemove'",[66,91992,91993],{"class":76},", _.",[66,91995,91996],{"class":3793},"debounce",[66,91998,91999],{"class":76},"(mouseMove, ",[66,92001,66853],{"class":102},[66,92003,360],{"class":76},[66,92005,92006,92008,92010],{"class":68,"line":4445},[66,92007,54199],{"class":76},[66,92009,53597],{"class":53084},[66,92011,53091],{"class":76},[66,92013,92014,92016,92018],{"class":68,"line":9759},[66,92015,53569],{"class":76},[66,92017,53584],{"class":53084},[66,92019,53091],{"class":76},[66,92021,92022],{"class":68,"line":9783},[66,92023,109],{"emptyLinePlaceholder":108},[66,92025,92026,92028,92030],{"class":68,"line":9788},[66,92027,53569],{"class":76},[66,92029,52419],{"class":53084},[66,92031,53091],{"class":76},[2982,92033,92034],{},[34,92035,92036],{},"手写一个防抖函数来处理",[19,92038,92039],{},"防抖的核心就是利用定时器来实现的：",[19,92041,92042],{},"①声明一个定时器变量",[19,92044,92045],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,92047,92048],{},"③如果没有定时器则开启定时器，记得存到变量里面",[57,92050,92052],{"className":52417,"code":92051,"language":52419,"meta":62,"style":62},"\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",[23,92053,92054,92064,92078,92082,92090,92104,92124,92136,92144,92150,92160,92172,92184,92194,92206,92216,92226,92238,92242,92250,92258,92262,92270,92288,92306,92314,92332,92342,92350,92360,92364,92368,92372,92377,92382,92387,92392,92397,92402,92420,92427,92432,92440,92445,92458,92474,92484,92489,92493,92497,92517,92521,92526,92531,92536,92541,92549,92557,92561],{"__ignoreMap":62},[66,92055,92056,92058,92060,92062],{"class":68,"line":69},[66,92057,53081],{"class":76},[66,92059,53085],{"class":53084},[66,92061,53088],{"class":3793},[66,92063,53091],{"class":76},[66,92065,92066,92068,92070,92072,92074,92076],{"class":68,"line":80},[66,92067,413],{"class":76},[66,92069,52419],{"class":53084},[66,92071,53100],{"class":3793},[66,92073,99],{"class":76},[66,92075,53105],{"class":356},[66,92077,53091],{"class":76},[66,92079,92080],{"class":68,"line":112},[66,92081,109],{"emptyLinePlaceholder":108},[66,92083,92084,92086,92088],{"class":68,"line":129},[66,92085,413],{"class":76},[66,92087,53118],{"class":53084},[66,92089,53091],{"class":76},[66,92091,92092,92094,92096,92098,92100,92102],{"class":68,"line":138},[66,92093,53928],{"class":76},[66,92095,53128],{"class":53084},[66,92097,53131],{"class":3793},[66,92099,99],{"class":76},[66,92101,53136],{"class":356},[66,92103,53091],{"class":76},[66,92105,92106,92108,92110,92112,92114,92116,92118,92120,92122],{"class":68,"line":227},[66,92107,53928],{"class":76},[66,92109,53128],{"class":53084},[66,92111,16724],{"class":3793},[66,92113,99],{"class":76},[66,92115,53175],{"class":356},[66,92117,53155],{"class":3793},[66,92119,99],{"class":76},[66,92121,53182],{"class":356},[66,92123,53091],{"class":76},[66,92125,92126,92128,92130,92132,92134],{"class":68,"line":236},[66,92127,53928],{"class":76},[66,92129,53191],{"class":53084},[66,92131,53194],{"class":76},[66,92133,53191],{"class":53084},[66,92135,53091],{"class":76},[66,92137,92138,92140,92142],{"class":68,"line":241},[66,92139,53928],{"class":76},[66,92141,1903],{"class":53084},[66,92143,53091],{"class":76},[66,92145,92146,92148],{"class":68,"line":372},[66,92147,56533],{"class":3793},[66,92149,17375],{"class":76},[66,92151,92152,92154,92156,92158],{"class":68,"line":377},[66,92153,74375],{"class":102},[66,92155,53221],{"class":76},[66,92157,62285],{"class":102},[66,92159,3135],{"class":76},[66,92161,92162,92164,92166,92168,92170],{"class":68,"line":392},[66,92163,56552],{"class":102},[66,92165,53221],{"class":76},[66,92167,3552],{"class":102},[66,92169,53276],{"class":72},[66,92171,3135],{"class":76},[66,92173,92174,92176,92178,92180,92182],{"class":68,"line":405},[66,92175,56566],{"class":102},[66,92177,53221],{"class":76},[66,92179,3552],{"class":102},[66,92181,53276],{"class":72},[66,92183,3135],{"class":76},[66,92185,92186,92188,92190,92192],{"class":68,"line":418},[66,92187,56665],{"class":102},[66,92189,53221],{"class":76},[66,92191,91782],{"class":102},[66,92193,3135],{"class":76},[66,92195,92196,92198,92200,92202,92204],{"class":68,"line":430},[66,92197,56703],{"class":102},[66,92199,53221],{"class":76},[66,92201,2804],{"class":102},[66,92203,53276],{"class":72},[66,92205,3135],{"class":76},[66,92207,92208,92210,92212,92214],{"class":68,"line":438},[66,92209,59196],{"class":102},[66,92211,53221],{"class":76},[66,92213,62621],{"class":102},[66,92215,3135],{"class":76},[66,92217,92218,92220,92222,92224],{"class":68,"line":465},[66,92219,59066],{"class":102},[66,92221,53221],{"class":76},[66,92223,53376],{"class":102},[66,92225,3135],{"class":76},[66,92227,92228,92230,92232,92234,92236],{"class":68,"line":1805},[66,92229,91821],{"class":102},[66,92231,53221],{"class":76},[66,92233,752],{"class":102},[66,92235,53276],{"class":72},[66,92237,3135],{"class":76},[66,92239,92240],{"class":68,"line":1817},[66,92241,4013],{"class":76},[66,92243,92244,92246,92248],{"class":68,"line":1822},[66,92245,54199],{"class":76},[66,92247,1903],{"class":53084},[66,92249,53091],{"class":76},[66,92251,92252,92254,92256],{"class":68,"line":1829},[66,92253,53569],{"class":76},[66,92255,53118],{"class":53084},[66,92257,53091],{"class":76},[66,92259,92260],{"class":68,"line":3529},[66,92261,109],{"emptyLinePlaceholder":108},[66,92263,92264,92266,92268],{"class":68,"line":3557},[66,92265,413],{"class":76},[66,92267,53584],{"class":53084},[66,92269,53091],{"class":76},[66,92271,92272,92274,92276,92278,92280,92282,92284,92286],{"class":68,"line":3562},[66,92273,53928],{"class":76},[66,92275,53395],{"class":53084},[66,92277,55268],{"class":3793},[66,92279,99],{"class":76},[66,92281,55273],{"class":356},[66,92283,57095],{"class":76},[66,92285,53395],{"class":53084},[66,92287,53091],{"class":76},[66,92289,92290,92292,92294,92296,92298,92300,92302,92304],{"class":68,"line":3579},[66,92291,53928],{"class":76},[66,92293,53597],{"class":53084},[66,92295,57020],{"class":3793},[66,92297,99],{"class":76},[66,92299,90050],{"class":356},[66,92301,57095],{"class":76},[66,92303,53597],{"class":53084},[66,92305,53091],{"class":76},[66,92307,92308,92310,92312],{"class":68,"line":3584},[66,92309,53928],{"class":76},[66,92311,53597],{"class":53084},[66,92313,53091],{"class":76},[66,92315,92316,92318,92320,92322,92324,92326,92328,92330],{"class":68,"line":3589},[66,92317,13027],{"class":72},[66,92319,88709],{"class":102},[66,92321,15369],{"class":72},[66,92323,56177],{"class":76},[66,92325,56180],{"class":3793},[66,92327,348],{"class":76},[66,92329,91922],{"class":356},[66,92331,313],{"class":76},[66,92333,92334,92336,92338,92340],{"class":68,"line":3594},[66,92335,54003],{"class":72},[66,92337,117],{"class":76},[66,92339,99],{"class":72},[66,92341,197],{"class":102},[66,92343,92344,92346,92348],{"class":68,"line":3608},[66,92345,71863],{"class":72},[66,92347,91941],{"class":3793},[66,92349,12659],{"class":76},[66,92351,92352,92354,92356,92358],{"class":68,"line":3613},[66,92353,91948],{"class":76},[66,92355,99],{"class":72},[66,92357,1596],{"class":76},[66,92359,4526],{"class":72},[66,92361,92362],{"class":68,"line":4401},[66,92363,91959],{"class":758},[66,92365,92366],{"class":68,"line":4415},[66,92367,4013],{"class":76},[66,92369,92370],{"class":68,"line":4423},[66,92371,91968],{"class":758},[66,92373,92374],{"class":68,"line":4428},[66,92375,92376],{"class":758},"    \u002F\u002F 手写防抖函数\n",[66,92378,92379],{"class":68,"line":4434},[66,92380,92381],{"class":758},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[66,92383,92384],{"class":68,"line":4440},[66,92385,92386],{"class":758},"    \u002F\u002F 1.声明定时器变量\n",[66,92388,92389],{"class":68,"line":4445},[66,92390,92391],{"class":758},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[66,92393,92394],{"class":68,"line":9759},[66,92395,92396],{"class":758},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[66,92398,92399],{"class":68,"line":9783},[66,92400,92401],{"class":758},"    \u002F\u002F 4.定时器里面写函数调用\n",[66,92403,92404,92406,92409,92411,92414,92416,92418],{"class":68,"line":9788},[66,92405,71863],{"class":72},[66,92407,92408],{"class":3793}," debounce",[66,92410,348],{"class":76},[66,92412,92413],{"class":1234},"fn",[66,92415,307],{"class":76},[66,92417,2699],{"class":1234},[66,92419,14247],{"class":76},[66,92421,92422,92424],{"class":68,"line":9794},[66,92423,81550],{"class":72},[66,92425,92426],{"class":76}," timer\n",[66,92428,92429],{"class":68,"line":9821},[66,92430,92431],{"class":758},"      \u002F\u002F return 返回一个匿名函数\n",[66,92433,92434,92436,92438],{"class":68,"line":9826},[66,92435,75761],{"class":72},[66,92437,60698],{"class":72},[66,92439,56233],{"class":76},[66,92441,92442],{"class":68,"line":9832},[66,92443,92444],{"class":758},"        \u002F\u002F 这里边写第二三四步\n",[66,92446,92447,92449,92452,92455],{"class":68,"line":9844},[66,92448,4321],{"class":72},[66,92450,92451],{"class":76}," (timer) ",[66,92453,92454],{"class":3793},"clearTimeout",[66,92456,92457],{"class":76},"(timer)\n",[66,92459,92460,92463,92465,92468,92470,92472],{"class":68,"line":9856},[66,92461,92462],{"class":76},"        timer ",[66,92464,99],{"class":72},[66,92466,92467],{"class":3793}," setTimeout",[66,92469,348],{"class":76},[66,92471,56230],{"class":72},[66,92473,56233],{"class":76},[66,92475,92476,92479,92481],{"class":68,"line":9868},[66,92477,92478],{"class":3793},"          fn",[66,92480,14855],{"class":76},[66,92482,92483],{"class":758},"\u002F\u002F加小括号调用fn }, t)\n",[66,92485,92486],{"class":68,"line":11523},[66,92487,92488],{"class":76},"        }, t)\n",[66,92490,92491],{"class":68,"line":11548},[66,92492,54180],{"class":76},[66,92494,92495],{"class":68,"line":11571},[66,92496,4013],{"class":76},[66,92498,92499,92501,92503,92505,92507,92509,92511,92513,92515],{"class":68,"line":11595},[66,92500,91983],{"class":76},[66,92502,59593],{"class":3793},[66,92504,348],{"class":76},[66,92506,91990],{"class":356},[66,92508,307],{"class":76},[66,92510,91996],{"class":3793},[66,92512,91999],{"class":76},[66,92514,66853],{"class":102},[66,92516,360],{"class":76},[66,92518,92519],{"class":68,"line":11600},[66,92520,109],{"emptyLinePlaceholder":108},[66,92522,92523],{"class":68,"line":11605},[66,92524,92525],{"class":758},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[66,92527,92528],{"class":68,"line":11610},[66,92529,92530],{"class":758},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[66,92532,92533],{"class":68,"line":11619},[66,92534,92535],{"class":758},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[66,92537,92538],{"class":68,"line":11624},[66,92539,92540],{"class":758},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[66,92542,92543,92545,92547],{"class":68,"line":11630},[66,92544,54199],{"class":76},[66,92546,53597],{"class":53084},[66,92548,53091],{"class":76},[66,92550,92551,92553,92555],{"class":68,"line":11651},[66,92552,53569],{"class":76},[66,92554,53584],{"class":53084},[66,92556,53091],{"class":76},[66,92558,92559],{"class":68,"line":11657},[66,92560,109],{"emptyLinePlaceholder":108},[66,92562,92563,92565,92567],{"class":68,"line":11671},[66,92564,53569],{"class":76},[66,92566,52419],{"class":53084},[66,92568,53091],{"class":76},[484,92570,92572],{"id":92571},"_4172-节流","4.17.2 节流",[19,92574,92575],{},[3304,92576],{"alt":62,"src":92577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,92579,92580],{},[3304,92581],{"alt":62,"src":92582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,92584,92585],{},[2141,92586,92587],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,92589,92590],{},"实现方式：",[2982,92592,92593],{},[34,92594,92595],{},"lodash 提供的节流函数来处理",[19,92597,92598],{},"_.throttle(func,[wait=0],[options=])",[19,92600,92601],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[57,92603,92605],{"className":52417,"code":92604,"language":52419,"meta":62,"style":62},"\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",[23,92606,92607,92617,92631,92635,92643,92657,92677,92689,92697,92703,92713,92725,92737,92747,92759,92769,92779,92791,92795,92803,92811,92815,92823,92841,92859,92867,92885,92895,92903,92913,92917,92921,92925,92930,92935,92956,92964,92972,92976],{"__ignoreMap":62},[66,92608,92609,92611,92613,92615],{"class":68,"line":69},[66,92610,53081],{"class":76},[66,92612,53085],{"class":53084},[66,92614,53088],{"class":3793},[66,92616,53091],{"class":76},[66,92618,92619,92621,92623,92625,92627,92629],{"class":68,"line":80},[66,92620,413],{"class":76},[66,92622,52419],{"class":53084},[66,92624,53100],{"class":3793},[66,92626,99],{"class":76},[66,92628,53105],{"class":356},[66,92630,53091],{"class":76},[66,92632,92633],{"class":68,"line":112},[66,92634,109],{"emptyLinePlaceholder":108},[66,92636,92637,92639,92641],{"class":68,"line":129},[66,92638,413],{"class":76},[66,92640,53118],{"class":53084},[66,92642,53091],{"class":76},[66,92644,92645,92647,92649,92651,92653,92655],{"class":68,"line":138},[66,92646,53928],{"class":76},[66,92648,53128],{"class":53084},[66,92650,53131],{"class":3793},[66,92652,99],{"class":76},[66,92654,53136],{"class":356},[66,92656,53091],{"class":76},[66,92658,92659,92661,92663,92665,92667,92669,92671,92673,92675],{"class":68,"line":227},[66,92660,53928],{"class":76},[66,92662,53128],{"class":53084},[66,92664,16724],{"class":3793},[66,92666,99],{"class":76},[66,92668,53175],{"class":356},[66,92670,53155],{"class":3793},[66,92672,99],{"class":76},[66,92674,53182],{"class":356},[66,92676,53091],{"class":76},[66,92678,92679,92681,92683,92685,92687],{"class":68,"line":236},[66,92680,53928],{"class":76},[66,92682,53191],{"class":53084},[66,92684,53194],{"class":76},[66,92686,53191],{"class":53084},[66,92688,53091],{"class":76},[66,92690,92691,92693,92695],{"class":68,"line":241},[66,92692,53928],{"class":76},[66,92694,1903],{"class":53084},[66,92696,53091],{"class":76},[66,92698,92699,92701],{"class":68,"line":372},[66,92700,56533],{"class":3793},[66,92702,17375],{"class":76},[66,92704,92705,92707,92709,92711],{"class":68,"line":377},[66,92706,74375],{"class":102},[66,92708,53221],{"class":76},[66,92710,62285],{"class":102},[66,92712,3135],{"class":76},[66,92714,92715,92717,92719,92721,92723],{"class":68,"line":392},[66,92716,56552],{"class":102},[66,92718,53221],{"class":76},[66,92720,3552],{"class":102},[66,92722,53276],{"class":72},[66,92724,3135],{"class":76},[66,92726,92727,92729,92731,92733,92735],{"class":68,"line":405},[66,92728,56566],{"class":102},[66,92730,53221],{"class":76},[66,92732,3552],{"class":102},[66,92734,53276],{"class":72},[66,92736,3135],{"class":76},[66,92738,92739,92741,92743,92745],{"class":68,"line":418},[66,92740,56665],{"class":102},[66,92742,53221],{"class":76},[66,92744,91782],{"class":102},[66,92746,3135],{"class":76},[66,92748,92749,92751,92753,92755,92757],{"class":68,"line":430},[66,92750,56703],{"class":102},[66,92752,53221],{"class":76},[66,92754,2804],{"class":102},[66,92756,53276],{"class":72},[66,92758,3135],{"class":76},[66,92760,92761,92763,92765,92767],{"class":68,"line":438},[66,92762,59196],{"class":102},[66,92764,53221],{"class":76},[66,92766,62621],{"class":102},[66,92768,3135],{"class":76},[66,92770,92771,92773,92775,92777],{"class":68,"line":465},[66,92772,59066],{"class":102},[66,92774,53221],{"class":76},[66,92776,53376],{"class":102},[66,92778,3135],{"class":76},[66,92780,92781,92783,92785,92787,92789],{"class":68,"line":1805},[66,92782,91821],{"class":102},[66,92784,53221],{"class":76},[66,92786,752],{"class":102},[66,92788,53276],{"class":72},[66,92790,3135],{"class":76},[66,92792,92793],{"class":68,"line":1817},[66,92794,4013],{"class":76},[66,92796,92797,92799,92801],{"class":68,"line":1822},[66,92798,54199],{"class":76},[66,92800,1903],{"class":53084},[66,92802,53091],{"class":76},[66,92804,92805,92807,92809],{"class":68,"line":1829},[66,92806,53569],{"class":76},[66,92808,53118],{"class":53084},[66,92810,53091],{"class":76},[66,92812,92813],{"class":68,"line":3529},[66,92814,109],{"emptyLinePlaceholder":108},[66,92816,92817,92819,92821],{"class":68,"line":3557},[66,92818,413],{"class":76},[66,92820,53584],{"class":53084},[66,92822,53091],{"class":76},[66,92824,92825,92827,92829,92831,92833,92835,92837,92839],{"class":68,"line":3562},[66,92826,53928],{"class":76},[66,92828,53395],{"class":53084},[66,92830,55268],{"class":3793},[66,92832,99],{"class":76},[66,92834,55273],{"class":356},[66,92836,57095],{"class":76},[66,92838,53395],{"class":53084},[66,92840,53091],{"class":76},[66,92842,92843,92845,92847,92849,92851,92853,92855,92857],{"class":68,"line":3579},[66,92844,53928],{"class":76},[66,92846,53597],{"class":53084},[66,92848,57020],{"class":3793},[66,92850,99],{"class":76},[66,92852,90050],{"class":356},[66,92854,57095],{"class":76},[66,92856,53597],{"class":53084},[66,92858,53091],{"class":76},[66,92860,92861,92863,92865],{"class":68,"line":3584},[66,92862,53928],{"class":76},[66,92864,53597],{"class":53084},[66,92866,53091],{"class":76},[66,92868,92869,92871,92873,92875,92877,92879,92881,92883],{"class":68,"line":3589},[66,92870,13027],{"class":72},[66,92872,88709],{"class":102},[66,92874,15369],{"class":72},[66,92876,56177],{"class":76},[66,92878,56180],{"class":3793},[66,92880,348],{"class":76},[66,92882,91922],{"class":356},[66,92884,313],{"class":76},[66,92886,92887,92889,92891,92893],{"class":68,"line":3594},[66,92888,54003],{"class":72},[66,92890,117],{"class":76},[66,92892,99],{"class":72},[66,92894,197],{"class":102},[66,92896,92897,92899,92901],{"class":68,"line":3608},[66,92898,71863],{"class":72},[66,92900,91941],{"class":3793},[66,92902,12659],{"class":76},[66,92904,92905,92907,92909,92911],{"class":68,"line":3613},[66,92906,91948],{"class":76},[66,92908,99],{"class":72},[66,92910,1596],{"class":76},[66,92912,4526],{"class":72},[66,92914,92915],{"class":68,"line":4401},[66,92916,91959],{"class":758},[66,92918,92919],{"class":68,"line":4415},[66,92920,4013],{"class":76},[66,92922,92923],{"class":68,"line":4423},[66,92924,91968],{"class":758},[66,92926,92927],{"class":68,"line":4428},[66,92928,92929],{"class":758},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[66,92931,92932],{"class":68,"line":4434},[66,92933,92934],{"class":758},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[66,92936,92937,92939,92941,92943,92945,92947,92950,92952,92954],{"class":68,"line":4440},[66,92938,91983],{"class":76},[66,92940,59593],{"class":3793},[66,92942,348],{"class":76},[66,92944,91990],{"class":356},[66,92946,91993],{"class":76},[66,92948,92949],{"class":3793},"throttle",[66,92951,91999],{"class":76},[66,92953,66853],{"class":102},[66,92955,360],{"class":76},[66,92957,92958,92960,92962],{"class":68,"line":4445},[66,92959,54199],{"class":76},[66,92961,53597],{"class":53084},[66,92963,53091],{"class":76},[66,92965,92966,92968,92970],{"class":68,"line":9759},[66,92967,53569],{"class":76},[66,92969,53584],{"class":53084},[66,92971,53091],{"class":76},[66,92973,92974],{"class":68,"line":9783},[66,92975,109],{"emptyLinePlaceholder":108},[66,92977,92978,92980,92982],{"class":68,"line":9788},[66,92979,53569],{"class":76},[66,92981,52419],{"class":53084},[66,92983,53091],{"class":76},[2982,92985,92986],{},[34,92987,92988],{},"手写一个节流函数来处理",[19,92990,72731],{},[19,92992,92042],{},[19,92994,92995],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,92997,92998],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[57,93000,93002],{"className":52417,"code":93001,"language":52419,"meta":62,"style":62},"\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",[23,93003,93004,93014,93028,93032,93040,93054,93074,93086,93094,93100,93110,93122,93134,93144,93156,93166,93176,93188,93192,93200,93208,93212,93220,93238,93256,93264,93282,93292,93300,93310,93314,93318,93322,93327,93332,93337,93342,93347,93352,93369,93375,93383,93394,93409,93416,93421,93426,93436,93441,93446,93451,93455,93459,93463,93483,93491,93499,93503],{"__ignoreMap":62},[66,93005,93006,93008,93010,93012],{"class":68,"line":69},[66,93007,53081],{"class":76},[66,93009,53085],{"class":53084},[66,93011,53088],{"class":3793},[66,93013,53091],{"class":76},[66,93015,93016,93018,93020,93022,93024,93026],{"class":68,"line":80},[66,93017,413],{"class":76},[66,93019,52419],{"class":53084},[66,93021,53100],{"class":3793},[66,93023,99],{"class":76},[66,93025,53105],{"class":356},[66,93027,53091],{"class":76},[66,93029,93030],{"class":68,"line":112},[66,93031,109],{"emptyLinePlaceholder":108},[66,93033,93034,93036,93038],{"class":68,"line":129},[66,93035,413],{"class":76},[66,93037,53118],{"class":53084},[66,93039,53091],{"class":76},[66,93041,93042,93044,93046,93048,93050,93052],{"class":68,"line":138},[66,93043,53928],{"class":76},[66,93045,53128],{"class":53084},[66,93047,53131],{"class":3793},[66,93049,99],{"class":76},[66,93051,53136],{"class":356},[66,93053,53091],{"class":76},[66,93055,93056,93058,93060,93062,93064,93066,93068,93070,93072],{"class":68,"line":227},[66,93057,53928],{"class":76},[66,93059,53128],{"class":53084},[66,93061,16724],{"class":3793},[66,93063,99],{"class":76},[66,93065,53175],{"class":356},[66,93067,53155],{"class":3793},[66,93069,99],{"class":76},[66,93071,53182],{"class":356},[66,93073,53091],{"class":76},[66,93075,93076,93078,93080,93082,93084],{"class":68,"line":236},[66,93077,53928],{"class":76},[66,93079,53191],{"class":53084},[66,93081,53194],{"class":76},[66,93083,53191],{"class":53084},[66,93085,53091],{"class":76},[66,93087,93088,93090,93092],{"class":68,"line":241},[66,93089,53928],{"class":76},[66,93091,1903],{"class":53084},[66,93093,53091],{"class":76},[66,93095,93096,93098],{"class":68,"line":372},[66,93097,56533],{"class":3793},[66,93099,17375],{"class":76},[66,93101,93102,93104,93106,93108],{"class":68,"line":377},[66,93103,74375],{"class":102},[66,93105,53221],{"class":76},[66,93107,62285],{"class":102},[66,93109,3135],{"class":76},[66,93111,93112,93114,93116,93118,93120],{"class":68,"line":392},[66,93113,56552],{"class":102},[66,93115,53221],{"class":76},[66,93117,3552],{"class":102},[66,93119,53276],{"class":72},[66,93121,3135],{"class":76},[66,93123,93124,93126,93128,93130,93132],{"class":68,"line":405},[66,93125,56566],{"class":102},[66,93127,53221],{"class":76},[66,93129,3552],{"class":102},[66,93131,53276],{"class":72},[66,93133,3135],{"class":76},[66,93135,93136,93138,93140,93142],{"class":68,"line":418},[66,93137,56665],{"class":102},[66,93139,53221],{"class":76},[66,93141,91782],{"class":102},[66,93143,3135],{"class":76},[66,93145,93146,93148,93150,93152,93154],{"class":68,"line":430},[66,93147,56703],{"class":102},[66,93149,53221],{"class":76},[66,93151,2804],{"class":102},[66,93153,53276],{"class":72},[66,93155,3135],{"class":76},[66,93157,93158,93160,93162,93164],{"class":68,"line":438},[66,93159,59196],{"class":102},[66,93161,53221],{"class":76},[66,93163,62621],{"class":102},[66,93165,3135],{"class":76},[66,93167,93168,93170,93172,93174],{"class":68,"line":465},[66,93169,59066],{"class":102},[66,93171,53221],{"class":76},[66,93173,53376],{"class":102},[66,93175,3135],{"class":76},[66,93177,93178,93180,93182,93184,93186],{"class":68,"line":1805},[66,93179,91821],{"class":102},[66,93181,53221],{"class":76},[66,93183,752],{"class":102},[66,93185,53276],{"class":72},[66,93187,3135],{"class":76},[66,93189,93190],{"class":68,"line":1817},[66,93191,4013],{"class":76},[66,93193,93194,93196,93198],{"class":68,"line":1822},[66,93195,54199],{"class":76},[66,93197,1903],{"class":53084},[66,93199,53091],{"class":76},[66,93201,93202,93204,93206],{"class":68,"line":1829},[66,93203,53569],{"class":76},[66,93205,53118],{"class":53084},[66,93207,53091],{"class":76},[66,93209,93210],{"class":68,"line":3529},[66,93211,109],{"emptyLinePlaceholder":108},[66,93213,93214,93216,93218],{"class":68,"line":3557},[66,93215,413],{"class":76},[66,93217,53584],{"class":53084},[66,93219,53091],{"class":76},[66,93221,93222,93224,93226,93228,93230,93232,93234,93236],{"class":68,"line":3562},[66,93223,53928],{"class":76},[66,93225,53395],{"class":53084},[66,93227,55268],{"class":3793},[66,93229,99],{"class":76},[66,93231,55273],{"class":356},[66,93233,57095],{"class":76},[66,93235,53395],{"class":53084},[66,93237,53091],{"class":76},[66,93239,93240,93242,93244,93246,93248,93250,93252,93254],{"class":68,"line":3579},[66,93241,53928],{"class":76},[66,93243,53597],{"class":53084},[66,93245,57020],{"class":3793},[66,93247,99],{"class":76},[66,93249,90050],{"class":356},[66,93251,57095],{"class":76},[66,93253,53597],{"class":53084},[66,93255,53091],{"class":76},[66,93257,93258,93260,93262],{"class":68,"line":3584},[66,93259,53928],{"class":76},[66,93261,53597],{"class":53084},[66,93263,53091],{"class":76},[66,93265,93266,93268,93270,93272,93274,93276,93278,93280],{"class":68,"line":3589},[66,93267,13027],{"class":72},[66,93269,88709],{"class":102},[66,93271,15369],{"class":72},[66,93273,56177],{"class":76},[66,93275,56180],{"class":3793},[66,93277,348],{"class":76},[66,93279,91922],{"class":356},[66,93281,313],{"class":76},[66,93283,93284,93286,93288,93290],{"class":68,"line":3594},[66,93285,54003],{"class":72},[66,93287,117],{"class":76},[66,93289,99],{"class":72},[66,93291,197],{"class":102},[66,93293,93294,93296,93298],{"class":68,"line":3608},[66,93295,71863],{"class":72},[66,93297,91941],{"class":3793},[66,93299,12659],{"class":76},[66,93301,93302,93304,93306,93308],{"class":68,"line":3613},[66,93303,91948],{"class":76},[66,93305,99],{"class":72},[66,93307,1596],{"class":76},[66,93309,4526],{"class":72},[66,93311,93312],{"class":68,"line":4401},[66,93313,91959],{"class":758},[66,93315,93316],{"class":68,"line":4415},[66,93317,4013],{"class":76},[66,93319,93320],{"class":68,"line":4423},[66,93321,91968],{"class":758},[66,93323,93324],{"class":68,"line":4428},[66,93325,93326],{"class":758},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[66,93328,93329],{"class":68,"line":4434},[66,93330,93331],{"class":758},"    \u002F\u002F 1.声明一个定时器变量\n",[66,93333,93334],{"class":68,"line":4440},[66,93335,93336],{"class":758},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[66,93338,93339],{"class":68,"line":4445},[66,93340,93341],{"class":758},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[66,93343,93344],{"class":68,"line":9759},[66,93345,93346],{"class":758},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[66,93348,93349],{"class":68,"line":9783},[66,93350,93351],{"class":758},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[66,93353,93354,93356,93359,93361,93363,93365,93367],{"class":68,"line":9788},[66,93355,71863],{"class":72},[66,93357,93358],{"class":3793}," throttle",[66,93360,348],{"class":76},[66,93362,92413],{"class":1234},[66,93364,307],{"class":76},[66,93366,2699],{"class":1234},[66,93368,14247],{"class":76},[66,93370,93371,93373],{"class":68,"line":9794},[66,93372,81550],{"class":72},[66,93374,92426],{"class":76},[66,93376,93377,93379,93381],{"class":68,"line":9821},[66,93378,75761],{"class":72},[66,93380,60698],{"class":72},[66,93382,56233],{"class":76},[66,93384,93385,93387,93389,93391],{"class":68,"line":9826},[66,93386,4321],{"class":72},[66,93388,3492],{"class":76},[66,93390,2217],{"class":72},[66,93392,93393],{"class":76},"timer) {\n",[66,93395,93396,93399,93401,93403,93405,93407],{"class":68,"line":9832},[66,93397,93398],{"class":76},"          timer ",[66,93400,99],{"class":72},[66,93402,92467],{"class":3793},[66,93404,348],{"class":76},[66,93406,56230],{"class":72},[66,93408,56233],{"class":76},[66,93410,93411,93414],{"class":68,"line":9844},[66,93412,93413],{"class":3793},"            fn",[66,93415,1253],{"class":76},[66,93417,93418],{"class":68,"line":9856},[66,93419,93420],{"class":758},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[66,93422,93423],{"class":68,"line":9868},[66,93424,93425],{"class":758},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[66,93427,93428,93431,93433],{"class":68,"line":11523},[66,93429,93430],{"class":76},"            timer ",[66,93432,99],{"class":72},[66,93434,93435],{"class":102}," null\n",[66,93437,93438],{"class":68,"line":11548},[66,93439,93440],{"class":758},"            \u002F\u002F 不能用clearTimeout(timer)\n",[66,93442,93443],{"class":68,"line":11571},[66,93444,93445],{"class":758},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[66,93447,93448],{"class":68,"line":11595},[66,93449,93450],{"class":76},"          }, t)\n",[66,93452,93453],{"class":68,"line":11600},[66,93454,4353],{"class":76},[66,93456,93457],{"class":68,"line":11605},[66,93458,54180],{"class":76},[66,93460,93461],{"class":68,"line":11610},[66,93462,4013],{"class":76},[66,93464,93465,93467,93469,93471,93473,93475,93477,93479,93481],{"class":68,"line":11619},[66,93466,91983],{"class":76},[66,93468,59593],{"class":3793},[66,93470,348],{"class":76},[66,93472,91990],{"class":356},[66,93474,307],{"class":76},[66,93476,92949],{"class":3793},[66,93478,91999],{"class":76},[66,93480,66853],{"class":102},[66,93482,360],{"class":76},[66,93484,93485,93487,93489],{"class":68,"line":11624},[66,93486,54199],{"class":76},[66,93488,53597],{"class":53084},[66,93490,53091],{"class":76},[66,93492,93493,93495,93497],{"class":68,"line":11630},[66,93494,53569],{"class":76},[66,93496,53584],{"class":53084},[66,93498,53091],{"class":76},[66,93500,93501],{"class":68,"line":11651},[66,93502,109],{"emptyLinePlaceholder":108},[66,93504,93505,93507,93509],{"class":68,"line":11657},[66,93506,53569],{"class":76},[66,93508,52419],{"class":53084},[66,93510,53091],{"class":76},[484,93512,93514],{"id":93513},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[57,93516,93518],{"className":54849,"code":93517,"language":54851,"meta":62,"style":62},"\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",[23,93519,93520,93528,93536,93541,93546,93551,93556,93560,93568],{"__ignoreMap":62},[66,93521,93522,93524,93526],{"class":68,"line":69},[66,93523,413],{"class":76},[66,93525,53584],{"class":53084},[66,93527,53091],{"class":76},[66,93529,93530,93532,93534],{"class":68,"line":80},[66,93531,53928],{"class":76},[66,93533,53597],{"class":53084},[66,93535,53091],{"class":76},[66,93537,93538],{"class":68,"line":112},[66,93539,93540],{"class":76},"    let timer = null\n",[66,93542,93543],{"class":68,"line":129},[66,93544,93545],{"class":76},"    timer = setTimeout(() => {\n",[66,93547,93548],{"class":68,"line":138},[66,93549,93550],{"class":76},"      clearTimeout(timer)\n",[66,93552,93553],{"class":68,"line":227},[66,93554,93555],{"class":76},"      console.log(timer)\n",[66,93557,93558],{"class":68,"line":236},[66,93559,62005],{"class":76},[66,93561,93562,93564,93566],{"class":68,"line":241},[66,93563,54199],{"class":76},[66,93565,53597],{"class":53084},[66,93567,53091],{"class":76},[66,93569,93570,93572,93574],{"class":68,"line":372},[66,93571,53569],{"class":76},[66,93573,53584],{"class":53084},[66,93575,53091],{"class":76},[19,93577,93578],{},"输出为1",[19,93580,93581],{},"在开启的定时器里边写清除定时器",[19,93583,93584],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[484,93586,93588],{"id":93587},"_4174-节流综合案例","4.17.4 节流综合案例",[19,93590,93591],{},"页面打开，可以记录上一次的视频播放位置",[19,93593,93594],{},[3304,93595],{"alt":62,"src":93596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,93598,93599],{},[3304,93600],{"alt":62,"src":93601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[57,93603,93605],{"className":52417,"code":93604,"language":52419,"meta":62,"style":62},"\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",[23,93606,93607,93617,93631,93635,93643,93657,93677,93697,93719,93732,93740,93746,93756,93766,93776,93780,93784,93791,93804,93816,93820,93824,93834,93846,93860,93864,93868,93875,93885,93898,93910,93920,93930,93946,93958,93962,93966,93974,93984,93996,94006,94016,94026,94030,94034,94044,94055,94059,94067,94075,94079,94087,94102,94117,94132,94153,94161,94169,94184,94206,94214,94229,94255,94281,94307,94315,94323,94342,94350,94355,94374,94379,94397,94402,94407,94415,94420,94434,94442,94447,94464,94468,94473,94495,94499,94507,94515,94519],{"__ignoreMap":62},[66,93608,93609,93611,93613,93615],{"class":68,"line":69},[66,93610,53081],{"class":76},[66,93612,53085],{"class":53084},[66,93614,53088],{"class":3793},[66,93616,53091],{"class":76},[66,93618,93619,93621,93623,93625,93627,93629],{"class":68,"line":80},[66,93620,413],{"class":76},[66,93622,52419],{"class":53084},[66,93624,53100],{"class":3793},[66,93626,99],{"class":76},[66,93628,53105],{"class":356},[66,93630,53091],{"class":76},[66,93632,93633],{"class":68,"line":112},[66,93634,109],{"emptyLinePlaceholder":108},[66,93636,93637,93639,93641],{"class":68,"line":129},[66,93638,413],{"class":76},[66,93640,53118],{"class":53084},[66,93642,53091],{"class":76},[66,93644,93645,93647,93649,93651,93653,93655],{"class":68,"line":138},[66,93646,53928],{"class":76},[66,93648,53128],{"class":53084},[66,93650,53131],{"class":3793},[66,93652,99],{"class":76},[66,93654,53136],{"class":356},[66,93656,60907],{"class":76},[66,93658,93659,93661,93663,93665,93667,93669,93671,93673,93675],{"class":68,"line":227},[66,93660,53928],{"class":76},[66,93662,53128],{"class":53084},[66,93664,53147],{"class":3793},[66,93666,99],{"class":76},[66,93668,53152],{"class":356},[66,93670,53155],{"class":3793},[66,93672,99],{"class":76},[66,93674,53160],{"class":356},[66,93676,60907],{"class":76},[66,93678,93679,93681,93683,93685,93687,93689,93691,93693,93695],{"class":68,"line":236},[66,93680,53928],{"class":76},[66,93682,53128],{"class":53084},[66,93684,16724],{"class":3793},[66,93686,99],{"class":76},[66,93688,53175],{"class":356},[66,93690,53155],{"class":3793},[66,93692,99],{"class":76},[66,93694,53182],{"class":356},[66,93696,60907],{"class":76},[66,93698,93699,93701,93703,93705,93707,93710,93712,93714,93717],{"class":68,"line":241},[66,93700,53928],{"class":76},[66,93702,53128],{"class":53084},[66,93704,16724],{"class":3793},[66,93706,99],{"class":76},[66,93708,93709],{"class":356},"\"referrer\"",[66,93711,53155],{"class":3793},[66,93713,99],{"class":76},[66,93715,93716],{"class":356},"\"never\"",[66,93718,60907],{"class":76},[66,93720,93721,93723,93725,93728,93730],{"class":68,"line":372},[66,93722,53928],{"class":76},[66,93724,53191],{"class":53084},[66,93726,93727],{"class":76},">综合案例\u003C\u002F",[66,93729,53191],{"class":53084},[66,93731,53091],{"class":76},[66,93733,93734,93736,93738],{"class":68,"line":377},[66,93735,53928],{"class":76},[66,93737,1903],{"class":53084},[66,93739,53091],{"class":76},[66,93741,93742,93744],{"class":68,"line":392},[66,93743,8214],{"class":53084},[66,93745,17375],{"class":76},[66,93747,93748,93750,93752,93754],{"class":68,"line":405},[66,93749,56476],{"class":102},[66,93751,53221],{"class":76},[66,93753,2183],{"class":102},[66,93755,3135],{"class":76},[66,93757,93758,93760,93762,93764],{"class":68,"line":418},[66,93759,56487],{"class":102},[66,93761,53221],{"class":76},[66,93763,2183],{"class":102},[66,93765,3135],{"class":76},[66,93767,93768,93770,93772,93774],{"class":68,"line":430},[66,93769,74375],{"class":102},[66,93771,53221],{"class":76},[66,93773,62285],{"class":102},[66,93775,3135],{"class":76},[66,93777,93778],{"class":68,"line":438},[66,93779,4013],{"class":76},[66,93781,93782],{"class":68,"line":465},[66,93783,109],{"emptyLinePlaceholder":108},[66,93785,93786,93789],{"class":68,"line":1805},[66,93787,93788],{"class":3793},"    .container",[66,93790,17375],{"class":76},[66,93792,93793,93795,93797,93800,93802],{"class":68,"line":1817},[66,93794,56552],{"class":102},[66,93796,53221],{"class":76},[66,93798,93799],{"class":102},"1200",[66,93801,53276],{"class":72},[66,93803,3135],{"class":76},[66,93805,93806,93808,93810,93812,93814],{"class":68,"line":1822},[66,93807,56487],{"class":102},[66,93809,53221],{"class":76},[66,93811,2183],{"class":102},[66,93813,53340],{"class":102},[66,93815,3135],{"class":76},[66,93817,93818],{"class":68,"line":1829},[66,93819,4013],{"class":76},[66,93821,93822],{"class":68,"line":3529},[66,93823,109],{"emptyLinePlaceholder":108},[66,93825,93826,93829,93832],{"class":68,"line":3557},[66,93827,93828],{"class":3793},"    .video",[66,93830,93831],{"class":53084}," video",[66,93833,17375],{"class":76},[66,93835,93836,93838,93840,93842,93844],{"class":68,"line":3562},[66,93837,56552],{"class":102},[66,93839,53221],{"class":76},[66,93841,310],{"class":102},[66,93843,953],{"class":72},[66,93845,3135],{"class":76},[66,93847,93848,93850,93852,93854,93856,93858],{"class":68,"line":3579},[66,93849,56476],{"class":102},[66,93851,53221],{"class":76},[66,93853,2679],{"class":102},[66,93855,53276],{"class":72},[66,93857,962],{"class":102},[66,93859,3135],{"class":76},[66,93861,93862],{"class":68,"line":3584},[66,93863,4013],{"class":76},[66,93865,93866],{"class":68,"line":3589},[66,93867,109],{"emptyLinePlaceholder":108},[66,93869,93870,93873],{"class":68,"line":3594},[66,93871,93872],{"class":3793},"    .elevator",[66,93874,17375],{"class":76},[66,93876,93877,93879,93881,93883],{"class":68,"line":3608},[66,93878,56540],{"class":102},[66,93880,53221],{"class":76},[66,93882,88009],{"class":102},[66,93884,3135],{"class":76},[66,93886,93887,93889,93891,93894,93896],{"class":68,"line":3613},[66,93888,56728],{"class":102},[66,93890,53221],{"class":76},[66,93892,93893],{"class":102},"280",[66,93895,53276],{"class":72},[66,93897,3135],{"class":76},[66,93899,93900,93902,93904,93906,93908],{"class":68,"line":4401},[66,93901,88203],{"class":102},[66,93903,53221],{"class":76},[66,93905,2679],{"class":102},[66,93907,53276],{"class":72},[66,93909,3135],{"class":76},[66,93911,93912,93914,93916,93918],{"class":68,"line":4415},[66,93913,88016],{"class":102},[66,93915,53221],{"class":76},[66,93917,88021],{"class":102},[66,93919,3135],{"class":76},[66,93921,93922,93924,93926,93928],{"class":68,"line":4423},[66,93923,63500],{"class":102},[66,93925,53221],{"class":76},[66,93927,62621],{"class":102},[66,93929,3135],{"class":76},[66,93931,93932,93934,93936,93938,93940,93942,93944],{"class":68,"line":4428},[66,93933,63756],{"class":102},[66,93935,53221],{"class":76},[66,93937,304],{"class":102},[66,93939,53276],{"class":72},[66,93941,53305],{"class":102},[66,93943,64023],{"class":102},[66,93945,3135],{"class":76},[66,93947,93948,93950,93952,93954,93956],{"class":68,"line":4434},[66,93949,56552],{"class":102},[66,93951,53221],{"class":76},[66,93953,2885],{"class":102},[66,93955,53276],{"class":72},[66,93957,3135],{"class":76},[66,93959,93960],{"class":68,"line":4440},[66,93961,4013],{"class":76},[66,93963,93964],{"class":68,"line":4445},[66,93965,109],{"emptyLinePlaceholder":108},[66,93967,93968,93970,93972],{"class":68,"line":9759},[66,93969,93872],{"class":3793},[66,93971,3240],{"class":53084},[66,93973,17375],{"class":76},[66,93975,93976,93978,93980,93982],{"class":68,"line":9783},[66,93977,56790],{"class":102},[66,93979,53221],{"class":76},[66,93981,62648],{"class":102},[66,93983,3135],{"class":76},[66,93985,93986,93988,93990,93992,93994],{"class":68,"line":9788},[66,93987,56476],{"class":102},[66,93989,53221],{"class":76},[66,93991,790],{"class":102},[66,93993,53276],{"class":72},[66,93995,3135],{"class":76},[66,93997,93998,94000,94002,94004],{"class":68,"line":9794},[66,93999,65749],{"class":102},[66,94001,53221],{"class":76},[66,94003,56518],{"class":102},[66,94005,3135],{"class":76},[66,94007,94008,94010,94012,94014],{"class":68,"line":9821},[66,94009,59066],{"class":102},[66,94011,53221],{"class":76},[66,94013,53376],{"class":102},[66,94015,3135],{"class":76},[66,94017,94018,94020,94022,94024],{"class":68,"line":9826},[66,94019,59196],{"class":102},[66,94021,53221],{"class":76},[66,94023,63849],{"class":102},[66,94025,3135],{"class":76},[66,94027,94028],{"class":68,"line":9832},[66,94029,4013],{"class":76},[66,94031,94032],{"class":68,"line":9844},[66,94033,109],{"emptyLinePlaceholder":108},[66,94035,94036,94038,94040,94042],{"class":68,"line":9856},[66,94037,93872],{"class":3793},[66,94039,3240],{"class":53084},[66,94041,65803],{"class":3793},[66,94043,17375],{"class":76},[66,94045,94046,94048,94050,94053],{"class":68,"line":9868},[66,94047,59196],{"class":102},[66,94049,53221],{"class":76},[66,94051,94052],{"class":102},"#1286ff",[66,94054,3135],{"class":76},[66,94056,94057],{"class":68,"line":11523},[66,94058,4013],{"class":76},[66,94060,94061,94063,94065],{"class":68,"line":11548},[66,94062,54199],{"class":76},[66,94064,1903],{"class":53084},[66,94066,53091],{"class":76},[66,94068,94069,94071,94073],{"class":68,"line":11571},[66,94070,53569],{"class":76},[66,94072,53118],{"class":53084},[66,94074,53091],{"class":76},[66,94076,94077],{"class":68,"line":11595},[66,94078,109],{"emptyLinePlaceholder":108},[66,94080,94081,94083,94085],{"class":68,"line":11600},[66,94082,413],{"class":76},[66,94084,53584],{"class":53084},[66,94086,53091],{"class":76},[66,94088,94089,94091,94093,94095,94097,94100],{"class":68,"line":11605},[66,94090,53928],{"class":76},[66,94092,53395],{"class":53084},[66,94094,55268],{"class":3793},[66,94096,99],{"class":76},[66,94098,94099],{"class":356},"\"container\"",[66,94101,53091],{"class":76},[66,94103,94104,94106,94108,94110,94112,94115],{"class":68,"line":11610},[66,94105,53125],{"class":76},[66,94107,53395],{"class":53084},[66,94109,55268],{"class":3793},[66,94111,99],{"class":76},[66,94113,94114],{"class":356},"\"header\"",[66,94116,53091],{"class":76},[66,94118,94119,94121,94123,94125,94127,94130],{"class":68,"line":11619},[66,94120,57015],{"class":76},[66,94122,2229],{"class":53084},[66,94124,62836],{"class":3793},[66,94126,99],{"class":76},[66,94128,94129],{"class":356},"\"http:\u002F\u002Fpip.itcast.cn\"",[66,94131,53091],{"class":76},[66,94133,94134,94136,94138,94140,94142,94145,94147,94149,94151],{"class":68,"line":11624},[66,94135,57083],{"class":76},[66,94137,3304],{"class":53084},[66,94139,57020],{"class":3793},[66,94141,99],{"class":76},[66,94143,94144],{"class":356},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[66,94146,57028],{"class":3793},[66,94148,99],{"class":76},[66,94150,9463],{"class":356},[66,94152,60907],{"class":76},[66,94154,94155,94157,94159],{"class":68,"line":11630},[66,94156,57188],{"class":76},[66,94158,2229],{"class":53084},[66,94160,53091],{"class":76},[66,94162,94163,94165,94167],{"class":68,"line":11651},[66,94164,53560],{"class":76},[66,94166,53395],{"class":53084},[66,94168,53091],{"class":76},[66,94170,94171,94173,94175,94177,94179,94182],{"class":68,"line":11657},[66,94172,53125],{"class":76},[66,94174,53395],{"class":53084},[66,94176,55268],{"class":3793},[66,94178,99],{"class":76},[66,94180,94181],{"class":356},"\"video\"",[66,94183,53091],{"class":76},[66,94185,94186,94188,94190,94192,94194,94197,94200,94202,94204],{"class":68,"line":11671},[66,94187,57015],{"class":76},[66,94189,29984],{"class":53084},[66,94191,57020],{"class":3793},[66,94193,99],{"class":76},[66,94195,94196],{"class":356},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[66,94198,94199],{"class":3793}," controls",[66,94201,57095],{"class":76},[66,94203,29984],{"class":53084},[66,94205,53091],{"class":76},[66,94207,94208,94210,94212],{"class":68,"line":11677},[66,94209,53560],{"class":76},[66,94211,53395],{"class":53084},[66,94213,53091],{"class":76},[66,94215,94216,94218,94220,94222,94224,94227],{"class":68,"line":11704},[66,94217,53125],{"class":76},[66,94219,53395],{"class":53084},[66,94221,55268],{"class":3793},[66,94223,99],{"class":76},[66,94225,94226],{"class":356},"\"elevator\"",[66,94228,53091],{"class":76},[66,94230,94231,94233,94235,94237,94239,94241,94244,94246,94248,94251,94253],{"class":68,"line":11713},[66,94232,57015],{"class":76},[66,94234,2229],{"class":53084},[66,94236,62836],{"class":3793},[66,94238,99],{"class":76},[66,94240,66015],{"class":356},[66,94242,94243],{"class":3793}," data-ref",[66,94245,99],{"class":76},[66,94247,94181],{"class":356},[66,94249,94250],{"class":76},">视频介绍\u003C\u002F",[66,94252,2229],{"class":53084},[66,94254,53091],{"class":76},[66,94256,94257,94259,94261,94263,94265,94267,94269,94271,94274,94277,94279],{"class":68,"line":11719},[66,94258,57015],{"class":76},[66,94260,2229],{"class":53084},[66,94262,62836],{"class":3793},[66,94264,99],{"class":76},[66,94266,66015],{"class":356},[66,94268,94243],{"class":3793},[66,94270,99],{"class":76},[66,94272,94273],{"class":356},"\"intro\"",[66,94275,94276],{"class":76},">课程简介\u003C\u002F",[66,94278,2229],{"class":53084},[66,94280,53091],{"class":76},[66,94282,94283,94285,94287,94289,94291,94293,94295,94297,94300,94303,94305],{"class":68,"line":11727},[66,94284,57015],{"class":76},[66,94286,2229],{"class":53084},[66,94288,62836],{"class":3793},[66,94290,99],{"class":76},[66,94292,66015],{"class":356},[66,94294,94243],{"class":3793},[66,94296,99],{"class":76},[66,94298,94299],{"class":356},"\"outline\"",[66,94301,94302],{"class":76},">评论列表\u003C\u002F",[66,94304,2229],{"class":53084},[66,94306,53091],{"class":76},[66,94308,94309,94311,94313],{"class":68,"line":11732},[66,94310,53560],{"class":76},[66,94312,53395],{"class":53084},[66,94314,53091],{"class":76},[66,94316,94317,94319,94321],{"class":68,"line":18407},[66,94318,54199],{"class":76},[66,94320,53395],{"class":53084},[66,94322,53091],{"class":76},[66,94324,94325,94327,94329,94331,94333,94336,94338,94340],{"class":68,"line":18413},[66,94326,53928],{"class":76},[66,94328,53597],{"class":53084},[66,94330,57020],{"class":3793},[66,94332,99],{"class":76},[66,94334,94335],{"class":356},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[66,94337,57095],{"class":76},[66,94339,53597],{"class":53084},[66,94341,53091],{"class":76},[66,94343,94344,94346,94348],{"class":68,"line":18436},[66,94345,53928],{"class":76},[66,94347,53597],{"class":53084},[66,94349,53091],{"class":76},[66,94351,94352],{"class":68,"line":18442},[66,94353,94354],{"class":758},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[66,94356,94357,94359,94361,94363,94365,94367,94369,94372],{"class":68,"line":18465},[66,94358,13027],{"class":72},[66,94360,93831],{"class":102},[66,94362,15369],{"class":72},[66,94364,56177],{"class":76},[66,94366,56180],{"class":3793},[66,94368,348],{"class":76},[66,94370,94371],{"class":356},"'video'",[66,94373,313],{"class":76},[66,94375,94376],{"class":68,"line":18479},[66,94377,94378],{"class":758},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[66,94380,94381,94384,94386,94388,94390,94393,94395],{"class":68,"line":18499},[66,94382,94383],{"class":76},"    video.ontimeupdate ",[66,94385,99],{"class":72},[66,94387,90131],{"class":76},[66,94389,92949],{"class":3793},[66,94391,94392],{"class":76},"(() ",[66,94394,86498],{"class":72},[66,94396,17375],{"class":76},[66,94398,94399],{"class":68,"line":18505},[66,94400,94401],{"class":758},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[66,94403,94404],{"class":68,"line":18516},[66,94405,94406],{"class":758},"      \u002F\u002F 控制台输出当前的时间\n",[66,94408,94409,94412],{"class":68,"line":18539},[66,94410,94411],{"class":758},"      \u002F\u002F console.log(video.currentTime)",[66,94413,94414],{"class":758},"  \u002F\u002F获得当前的视频时间\n",[66,94416,94417],{"class":68,"line":18561},[66,94418,94419],{"class":758},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[66,94421,94422,94424,94426,94428,94431],{"class":68,"line":18566},[66,94423,76462],{"class":76},[66,94425,73433],{"class":3793},[66,94427,348],{"class":76},[66,94429,94430],{"class":356},"'currentTime'",[66,94432,94433],{"class":76},", video.currentTime)\n",[66,94435,94436,94438,94440],{"class":68,"line":18572},[66,94437,56316],{"class":76},[66,94439,8221],{"class":102},[66,94441,313],{"class":76},[66,94443,94444],{"class":68,"line":18586},[66,94445,94446],{"class":758},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[66,94448,94449,94452,94455,94457,94460,94462],{"class":68,"line":18599},[66,94450,94451],{"class":76},"    video.",[66,94453,94454],{"class":3793},"onloadeddata",[66,94456,15369],{"class":72},[66,94458,94459],{"class":76}," () ",[66,94461,86498],{"class":72},[66,94463,17375],{"class":76},[66,94465,94466],{"class":68,"line":18604},[66,94467,61792],{"class":758},[66,94469,94470],{"class":68,"line":18618},[66,94471,94472],{"class":758},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[66,94474,94475,94478,94480,94483,94485,94487,94489,94491,94493],{"class":68,"line":18623},[66,94476,94477],{"class":76},"      video.currentTime ",[66,94479,99],{"class":72},[66,94481,94482],{"class":76}," localStorage.",[66,94484,73464],{"class":3793},[66,94486,348],{"class":76},[66,94488,94430],{"class":356},[66,94490,15519],{"class":76},[66,94492,73136],{"class":72},[66,94494,197],{"class":102},[66,94496,94497],{"class":68,"line":18629},[66,94498,4013],{"class":76},[66,94500,94501,94503,94505],{"class":68,"line":18634},[66,94502,54199],{"class":76},[66,94504,53597],{"class":53084},[66,94506,53091],{"class":76},[66,94508,94509,94511,94513],{"class":68,"line":18648},[66,94510,53569],{"class":76},[66,94512,53584],{"class":53084},[66,94514,53091],{"class":76},[66,94516,94517],{"class":68,"line":18653},[66,94518,109],{"emptyLinePlaceholder":108},[66,94520,94521,94523,94525],{"class":68,"line":18658},[66,94522,53569],{"class":76},[66,94524,52419],{"class":53084},[66,94526,53091],{"class":76},[1903,94528,94529],{},"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":62,"searchDepth":80,"depth":80,"links":94531},[94532,94537,94541,94542,94543,94548,94553,94554,94555,94556,94563,94568,94569,94579,94583,94584,94588],{"id":78470,"depth":80,"text":78471,"children":94533},[94534,94535,94536],{"id":78474,"depth":112,"text":78475},{"id":78499,"depth":112,"text":78500},{"id":78511,"depth":112,"text":78512},{"id":78523,"depth":80,"text":78524,"children":94538},[94539,94540],{"id":78527,"depth":112,"text":78528},{"id":78542,"depth":112,"text":78543},{"id":78594,"depth":80,"text":78595},{"id":78638,"depth":80,"text":78639},{"id":78655,"depth":80,"text":78656,"children":94544},[94545,94546,94547],{"id":78659,"depth":112,"text":78660},{"id":78672,"depth":112,"text":78673},{"id":78777,"depth":112,"text":78778},{"id":79066,"depth":80,"text":79067,"children":94549},[94550,94551,94552],{"id":79070,"depth":112,"text":79071},{"id":79513,"depth":112,"text":79514},{"id":79923,"depth":112,"text":79924},{"id":79986,"depth":80,"text":79987},{"id":80065,"depth":80,"text":80066},{"id":80158,"depth":80,"text":80159},{"id":82003,"depth":80,"text":82004,"children":94557},[94558,94559,94560,94561,94562],{"id":82007,"depth":112,"text":82008},{"id":82019,"depth":112,"text":82020},{"id":82238,"depth":112,"text":82239},{"id":82256,"depth":112,"text":82257},{"id":82316,"depth":112,"text":82317},{"id":86582,"depth":80,"text":86583,"children":94564},[94565,94566,94567],{"id":86586,"depth":112,"text":86587},{"id":86604,"depth":112,"text":86605},{"id":86630,"depth":112,"text":86631},{"id":86639,"depth":80,"text":86640},{"id":86661,"depth":80,"text":86662,"children":94570},[94571,94572,94573,94574,94575,94576,94577,94578],{"id":86665,"depth":112,"text":86666},{"id":86926,"depth":112,"text":86927},{"id":87112,"depth":112,"text":87113},{"id":87479,"depth":112,"text":87480},{"id":87595,"depth":112,"text":87596},{"id":87631,"depth":112,"text":87632},{"id":87678,"depth":112,"text":87679},{"id":87712,"depth":112,"text":87713},{"id":89075,"depth":80,"text":89076,"children":94580},[94581,94582],{"id":89079,"depth":112,"text":89080},{"id":89116,"depth":112,"text":89117},{"id":90471,"depth":80,"text":90472},{"id":90842,"depth":80,"text":90843,"children":94585},[94586,94587],{"id":90846,"depth":112,"text":90847},{"id":90880,"depth":112,"text":90881},{"id":91609,"depth":80,"text":91610,"children":94589},[94590,94591,94592,94593],{"id":91613,"depth":112,"text":91614},{"id":92571,"depth":112,"text":92572},{"id":93513,"depth":112,"text":93514},{"id":93587,"depth":112,"text":93588},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":78459,"description":1926},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":94600,"title":94601,"body":94602,"description":94613,"extension":1927,"meta":94614,"navigation":108,"path":94616,"seo":94617,"stem":94618,"__hash__":94619},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":94603,"toc":94611},[94604],[19,94605,94606,94607],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[2229,94608,94609],{"href":94609,"rel":94610},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[25668],{"title":62,"searchDepth":80,"depth":80,"links":94612},[],"三件套第三套学习",{"category":94615},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":94601,"description":94613},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":94621,"title":94622,"body":94623,"description":1926,"extension":1927,"meta":94728,"navigation":108,"path":94729,"seo":94730,"stem":94731,"__hash__":94732},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":94624,"toc":94723},[94625,94632,94635,94638,94641,94645,94654,94657,94660,94664,94673,94676,94680,94683,94703,94706,94720],[19,94626,94627],{},[2229,94628,94631],{"href":94629,"rel":94630},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[25668],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,94633,94622],{"id":94634},"_1安装",[19,94636,94637],{},"numpy是科学计算基础库,底层是C语言",[19,94639,94640],{},"三种方式：",[14,94642,94644],{"id":94643},"_11-通过pip安装","1.1 通过pip安装",[57,94646,94648],{"className":59,"code":94647,"language":61,"meta":62,"style":62},"pip install numpy\n",[23,94649,94650],{"__ignoreMap":62},[66,94651,94652],{"class":68,"line":69},[66,94653,94647],{"class":76},[19,94655,94656],{},"首选方式，自动处理依赖项",[19,94658,94659],{},"在提示系统命令符中使用cmd",[14,94661,94663],{"id":94662},"_12-通过anaconda安装","1.2 通过Anaconda安装",[57,94665,94667],{"className":59,"code":94666,"language":61,"meta":62,"style":62},"conda install numpy\n",[23,94668,94669],{"__ignoreMap":62},[66,94670,94671],{"class":68,"line":69},[66,94672,94666],{"class":76},[19,94674,94675],{},"自动解决环境依赖",[14,94677,94679],{"id":94678},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,94681,94682],{},"对于Debian\u002FUbuntu",[57,94684,94686],{"className":59,"code":94685,"language":61,"meta":62,"style":62},"sudo apt-get install python3-numpy\n",[23,94687,94688],{"__ignoreMap":62},[66,94689,94690,94693,94695,94698,94700],{"class":68,"line":69},[66,94691,94692],{"class":76},"sudo apt",[66,94694,2511],{"class":72},[66,94696,94697],{"class":76},"get install python3",[66,94699,2511],{"class":72},[66,94701,94702],{"class":76},"numpy\n",[19,94704,94705],{},"对于Fedora:",[57,94707,94709],{"className":59,"code":94708,"language":61,"meta":62,"style":62},"sudo dnf install python3-numpy\n",[23,94710,94711],{"__ignoreMap":62},[66,94712,94713,94716,94718],{"class":68,"line":69},[66,94714,94715],{"class":76},"sudo dnf install python3",[66,94717,2511],{"class":72},[66,94719,94702],{"class":76},[1903,94721,94722],{},"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":62,"searchDepth":80,"depth":80,"links":94724},[94725,94726,94727],{"id":94643,"depth":80,"text":94644},{"id":94662,"depth":80,"text":94663},{"id":94678,"depth":80,"text":94679},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":94622,"description":1926},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":94734,"title":94735,"body":94736,"description":1926,"extension":1927,"meta":94849,"navigation":108,"path":94850,"seo":94851,"stem":94852,"__hash__":94853},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":94737,"toc":94847},[94738,94741,94744,94747,94750,94753,94756,94759,94762,94765,94841,94844],[10,94739,94735],{"id":94740},"_10算数函数",[19,94742,94743],{},"加减乘除运算跟python基础语法没区别",[19,94745,94746],{},"除了python那种方法外还可以使用函数",[19,94748,94749],{},"加：np.add(a,b)",[19,94751,94752],{},"减：np.subtract(a,b)",[19,94754,94755],{},"乘：np.multiply(a,b)",[19,94757,94758],{},"除：np.divide(a,b) == a\u002Fb",[19,94760,94761],{},"取余：np.mod(a,b) == a%b",[19,94763,94764],{},"必须会的用法：",[57,94766,94768],{"className":59,"code":94767,"language":61,"meta":62,"style":62},"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",[23,94769,94770,94792,94813,94823,94836],{"__ignoreMap":62},[66,94771,94772,94774,94776,94779,94781,94784,94786,94788,94790],{"class":68,"line":69},[66,94773,2229],{"class":76},[66,94775,99],{"class":72},[66,94777,94778],{"class":76},"np.arange(",[66,94780,2404],{"class":102},[66,94782,94783],{"class":76},").reshape(",[66,94785,1520],{"class":102},[66,94787,2362],{"class":76},[66,94789,1520],{"class":102},[66,94791,313],{"class":76},[66,94793,94794,94796,94798,94801,94803,94805,94807,94809,94811],{"class":68,"line":80},[66,94795,2253],{"class":76},[66,94797,99],{"class":72},[66,94799,94800],{"class":76},"np.array([",[66,94802,790],{"class":102},[66,94804,2362],{"class":76},[66,94806,790],{"class":102},[66,94808,2362],{"class":76},[66,94810,790],{"class":102},[66,94812,6473],{"class":76},[66,94814,94815,94818,94820],{"class":68,"line":112},[66,94816,94817],{"class":76},"result",[66,94819,99],{"class":72},[66,94821,94822],{"class":76},"np.empty_like(a)\n",[66,94824,94825,94828,94831,94833],{"class":68,"line":129},[66,94826,94827],{"class":76},"np.add(a,b,",[66,94829,94830],{"class":1234},"out",[66,94832,99],{"class":72},[66,94834,94835],{"class":76},"result)\n",[66,94837,94838],{"class":68,"line":138},[66,94839,94840],{"class":76},"result\n",[19,94842,94843],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[1903,94845,94846],{},"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":62,"searchDepth":80,"depth":80,"links":94848},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":94735,"description":1926},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":94855,"title":94856,"body":94857,"description":1926,"extension":1927,"meta":95619,"navigation":108,"path":95620,"seo":95621,"stem":95622,"__hash__":95623},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":94858,"toc":95606},[94859,94862,94865,94868,94872,94911,94915,94959,95019,95023,95026,95065,95068,95113,95117,95153,95157,95226,95230,95294,95298,95301,95304,95307,95310,95346,95350,95390,95394,95466,95469,95473,95536,95540,95603],[10,94860,94856],{"id":94861},"_11统计函数",[19,94863,94864],{},"sum max min mean",[19,94866,94867],{},"这些有axis参数，可以指定方向",[14,94869,94871],{"id":94870},"_111-sum求和函数","11.1 sum()求和函数",[57,94873,94875],{"className":59,"code":94874,"language":61,"meta":62,"style":62},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[23,94876,94877,94882,94903],{"__ignoreMap":62},[66,94878,94879],{"class":68,"line":69},[66,94880,94881],{"class":758},"#创建一维数组\n",[66,94883,94884,94886,94888,94891,94893,94895,94897,94899,94901],{"class":68,"line":80},[66,94885,2229],{"class":76},[66,94887,99],{"class":72},[66,94889,94890],{"class":76},"np.random.randint(",[66,94892,304],{"class":102},[66,94894,2362],{"class":76},[66,94896,310],{"class":102},[66,94898,2362],{"class":76},[66,94900,2679],{"class":102},[66,94902,313],{"class":76},[66,94904,94905,94908],{"class":68,"line":112},[66,94906,94907],{"class":76},"np.sum(a)",[66,94909,94910],{"class":758},"#求和\n",[14,94912,94914],{"id":94913},"_112-max求最大值函数","11.2 max()求最大值函数",[57,94916,94918],{"className":59,"code":94917,"language":61,"meta":62,"style":62},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[23,94919,94920,94924,94944,94949,94954],{"__ignoreMap":62},[66,94921,94922],{"class":68,"line":69},[66,94923,94881],{"class":758},[66,94925,94926,94928,94930,94932,94934,94936,94938,94940,94942],{"class":68,"line":80},[66,94927,2229],{"class":76},[66,94929,99],{"class":72},[66,94931,94890],{"class":76},[66,94933,304],{"class":102},[66,94935,2362],{"class":76},[66,94937,310],{"class":102},[66,94939,2362],{"class":76},[66,94941,2679],{"class":102},[66,94943,313],{"class":76},[66,94945,94946],{"class":68,"line":112},[66,94947,94948],{"class":76},"np.max(a)\n",[66,94950,94951],{"class":68,"line":129},[66,94952,94953],{"class":758},"#最大索引(求最大元素的索引)arg\n",[66,94955,94956],{"class":68,"line":138},[66,94957,94958],{"class":76},"np.argmax(a)\n",[57,94960,94962],{"className":59,"code":94961,"language":61,"meta":62,"style":62},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[23,94963,94964,94985,95005,95009],{"__ignoreMap":62},[66,94965,94966,94968,94970,94973,94975,94977,94979,94981,94983],{"class":68,"line":69},[66,94967,12725],{"class":76},[66,94969,99],{"class":72},[66,94971,94972],{"class":76}," np.array([",[66,94974,304],{"class":102},[66,94976,307],{"class":76},[66,94978,752],{"class":102},[66,94980,307],{"class":76},[66,94982,1520],{"class":102},[66,94984,6473],{"class":76},[66,94986,94987,94989,94991,94993,94995,94997,94999,95001,95003],{"class":68,"line":80},[66,94988,12751],{"class":76},[66,94990,99],{"class":72},[66,94992,94972],{"class":76},[66,94994,1520],{"class":102},[66,94996,307],{"class":76},[66,94998,795],{"class":102},[66,95000,307],{"class":76},[66,95002,1076],{"class":102},[66,95004,6473],{"class":76},[66,95006,95007],{"class":68,"line":112},[66,95008,109],{"emptyLinePlaceholder":108},[66,95010,95011,95013,95016],{"class":68,"line":129},[66,95012,244],{"class":102},[66,95014,95015],{"class":76},"(np.maximum(a, b))   ",[66,95017,95018],{"class":758},"# [3 5 4]，每个位置上取较大值\n",[14,95020,95022],{"id":95021},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,95024,95025],{},"①一维数组：",[57,95027,95029],{"className":59,"code":95028,"language":61,"meta":62,"style":62},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[23,95030,95031,95035,95055,95060],{"__ignoreMap":62},[66,95032,95033],{"class":68,"line":69},[66,95034,94881],{"class":758},[66,95036,95037,95039,95041,95043,95045,95047,95049,95051,95053],{"class":68,"line":80},[66,95038,2229],{"class":76},[66,95040,99],{"class":72},[66,95042,94890],{"class":76},[66,95044,304],{"class":102},[66,95046,2362],{"class":76},[66,95048,310],{"class":102},[66,95050,2362],{"class":76},[66,95052,2679],{"class":102},[66,95054,313],{"class":76},[66,95056,95057],{"class":68,"line":112},[66,95058,95059],{"class":758},"#求平均值\n",[66,95061,95062],{"class":68,"line":129},[66,95063,95064],{"class":76},"np.mean(a)\n",[19,95066,95067],{},"②二维数组",[57,95069,95071],{"className":59,"code":95070,"language":61,"meta":62,"style":62},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[23,95072,95073,95078,95103,95108],{"__ignoreMap":62},[66,95074,95075],{"class":68,"line":69},[66,95076,95077],{"class":758},"#二维数组\n",[66,95079,95080,95083,95085,95087,95089,95091,95093,95095,95097,95099,95101],{"class":68,"line":80},[66,95081,95082],{"class":76},"aa",[66,95084,99],{"class":72},[66,95086,94778],{"class":76},[66,95088,304],{"class":102},[66,95090,2362],{"class":76},[66,95092,2502],{"class":102},[66,95094,94783],{"class":76},[66,95096,1520],{"class":102},[66,95098,2362],{"class":76},[66,95100,1076],{"class":102},[66,95102,313],{"class":76},[66,95104,95105],{"class":68,"line":112},[66,95106,95107],{"class":758},"#对数组中的所有数求平均\n",[66,95109,95110],{"class":68,"line":129},[66,95111,95112],{"class":76},"np.mean(aa)\n",[14,95114,95116],{"id":95115},"_114-median求中位数函数","11.4 median()求中位数函数",[57,95118,95120],{"className":59,"code":95119,"language":61,"meta":62,"style":62},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[23,95121,95122,95127,95143,95148],{"__ignoreMap":62},[66,95123,95124],{"class":68,"line":69},[66,95125,95126],{"class":758},"#求中位数\n",[66,95128,95129,95131,95133,95135,95137,95139,95141],{"class":68,"line":80},[66,95130,2253],{"class":76},[66,95132,99],{"class":72},[66,95134,94778],{"class":76},[66,95136,304],{"class":102},[66,95138,2362],{"class":76},[66,95140,790],{"class":102},[66,95142,313],{"class":76},[66,95144,95145],{"class":68,"line":112},[66,95146,95147],{"class":76},"np.median(b)\n",[66,95149,95150],{"class":68,"line":129},[66,95151,95152],{"class":758},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,95154,95156],{"id":95155},"_115-power求幂运算函数","11.5 power()求幂运算函数",[57,95158,95160],{"className":59,"code":95159,"language":61,"meta":62,"style":62},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[23,95161,95162,95178,95183,95188,95197,95202,95211],{"__ignoreMap":62},[66,95163,95164,95166,95168,95170,95172,95174,95176],{"class":68,"line":69},[66,95165,2253],{"class":76},[66,95167,99],{"class":72},[66,95169,94778],{"class":76},[66,95171,304],{"class":102},[66,95173,2362],{"class":76},[66,95175,790],{"class":102},[66,95177,313],{"class":76},[66,95179,95180],{"class":68,"line":80},[66,95181,95182],{"class":758},"#幂运算\n",[66,95184,95185],{"class":68,"line":112},[66,95186,95187],{"class":758},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[66,95189,95190,95193,95195],{"class":68,"line":129},[66,95191,95192],{"class":76},"np.power(b,",[66,95194,795],{"class":102},[66,95196,313],{"class":76},[66,95198,95199],{"class":68,"line":138},[66,95200,95201],{"class":758},"#或者以下代码，将数据存储起来\n",[66,95203,95204,95206,95208],{"class":68,"line":227},[66,95205,2824],{"class":76},[66,95207,99],{"class":72},[66,95209,95210],{"class":76},"np.empty_like(b)\n",[66,95212,95213,95215,95217,95219,95221,95223],{"class":68,"line":236},[66,95214,95192],{"class":76},[66,95216,795],{"class":102},[66,95218,2362],{"class":76},[66,95220,94830],{"class":1234},[66,95222,99],{"class":72},[66,95224,95225],{"class":76},"y)\n",[14,95227,95229],{"id":95228},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[57,95231,95233],{"className":59,"code":95232,"language":61,"meta":62,"style":62},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[23,95234,95235,95251,95256,95261,95265,95283],{"__ignoreMap":62},[66,95236,95237,95239,95241,95243,95245,95247,95249],{"class":68,"line":69},[66,95238,2253],{"class":76},[66,95240,99],{"class":72},[66,95242,94778],{"class":76},[66,95244,304],{"class":102},[66,95246,2362],{"class":76},[66,95248,790],{"class":102},[66,95250,313],{"class":76},[66,95252,95253],{"class":68,"line":80},[66,95254,95255],{"class":758},"#开方\n",[66,95257,95258],{"class":68,"line":112},[66,95259,95260],{"class":76},"np.sqrt(b)\n",[66,95262,95263],{"class":68,"line":129},[66,95264,95201],{"class":758},[66,95266,95267,95269,95271,95274,95277,95279,95281],{"class":68,"line":138},[66,95268,2824],{"class":76},[66,95270,99],{"class":72},[66,95272,95273],{"class":76},"np.empty_like(b,",[66,95275,95276],{"class":1234},"dtype",[66,95278,99],{"class":72},[66,95280,2038],{"class":102},[66,95282,313],{"class":76},[66,95284,95285,95288,95290,95292],{"class":68,"line":227},[66,95286,95287],{"class":76},"np.sqrt(b,",[66,95289,94830],{"class":1234},[66,95291,99],{"class":72},[66,95293,95225],{"class":76},[14,95295,95297],{"id":95296},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,95299,95300],{},"对数组中的元素累计求和，可指定轴",[19,95302,95303],{},"#累计求和的意思是：",[19,95305,95306],{},"a = np.array([1, 2, 3, 4])",[19,95308,95309],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[57,95311,95313],{"className":59,"code":95312,"language":61,"meta":62,"style":62},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[23,95314,95315,95331,95336,95341],{"__ignoreMap":62},[66,95316,95317,95319,95321,95323,95325,95327,95329],{"class":68,"line":69},[66,95318,2253],{"class":76},[66,95320,99],{"class":72},[66,95322,94778],{"class":76},[66,95324,304],{"class":102},[66,95326,2362],{"class":76},[66,95328,790],{"class":102},[66,95330,313],{"class":76},[66,95332,95333],{"class":68,"line":80},[66,95334,95335],{"class":76},"np.cumsum(b)\n",[66,95337,95338],{"class":68,"line":112},[66,95339,95340],{"class":758},"#结果：\n",[66,95342,95343],{"class":68,"line":129},[66,95344,95345],{"class":758},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,95347,95349],{"id":95348},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[57,95351,95353],{"className":59,"code":95352,"language":61,"meta":62,"style":62},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[23,95354,95355,95371,95376,95381,95385],{"__ignoreMap":62},[66,95356,95357,95359,95361,95363,95365,95367,95369],{"class":68,"line":69},[66,95358,2253],{"class":76},[66,95360,99],{"class":72},[66,95362,94778],{"class":76},[66,95364,304],{"class":102},[66,95366,2362],{"class":76},[66,95368,790],{"class":102},[66,95370,313],{"class":76},[66,95372,95373],{"class":68,"line":80},[66,95374,95375],{"class":758},"#对数组中的元素累计求积，可指定轴\n",[66,95377,95378],{"class":68,"line":112},[66,95379,95380],{"class":76},"np.cumprod(b)\n",[66,95382,95383],{"class":68,"line":129},[66,95384,95340],{"class":758},[66,95386,95387],{"class":68,"line":138},[66,95388,95389],{"class":758},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,95391,95393],{"id":95392},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[57,95395,95397],{"className":59,"code":95396,"language":61,"meta":62,"style":62},"#删除数组中的重复数据，并对数据进行排序\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",[23,95398,95399,95404,95452,95457,95461],{"__ignoreMap":62},[66,95400,95401],{"class":68,"line":69},[66,95402,95403],{"class":758},"#删除数组中的重复数据，并对数据进行排序\n",[66,95405,95406,95408,95410,95412,95414,95416,95418,95420,95422,95424,95426,95428,95430,95432,95434,95436,95438,95440,95442,95444,95446,95448,95450],{"class":68,"line":80},[66,95407,2229],{"class":76},[66,95409,99],{"class":72},[66,95411,94800],{"class":76},[66,95413,304],{"class":102},[66,95415,2362],{"class":76},[66,95417,795],{"class":102},[66,95419,2362],{"class":76},[66,95421,1520],{"class":102},[66,95423,2362],{"class":76},[66,95425,2477],{"class":102},[66,95427,2362],{"class":76},[66,95429,1520],{"class":102},[66,95431,2362],{"class":76},[66,95433,790],{"class":102},[66,95435,2362],{"class":76},[66,95437,2189],{"class":102},[66,95439,2362],{"class":76},[66,95441,2183],{"class":102},[66,95443,2362],{"class":76},[66,95445,2754],{"class":102},[66,95447,2362],{"class":76},[66,95449,1076],{"class":102},[66,95451,6473],{"class":76},[66,95453,95454],{"class":68,"line":112},[66,95455,95456],{"class":76},"np.unique(a)\n",[66,95458,95459],{"class":68,"line":129},[66,95460,95340],{"class":758},[66,95462,95463],{"class":68,"line":138},[66,95464,95465],{"class":758},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,95467,95468],{},"升序形式排序",[14,95470,95472],{"id":95471},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[57,95474,95476],{"className":59,"code":95475,"language":61,"meta":62,"style":62},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[23,95477,95478,95526,95531],{"__ignoreMap":62},[66,95479,95480,95482,95484,95486,95488,95490,95492,95494,95496,95498,95500,95502,95504,95506,95508,95510,95512,95514,95516,95518,95520,95522,95524],{"class":68,"line":69},[66,95481,2229],{"class":76},[66,95483,99],{"class":72},[66,95485,94800],{"class":76},[66,95487,304],{"class":102},[66,95489,2362],{"class":76},[66,95491,795],{"class":102},[66,95493,2362],{"class":76},[66,95495,1520],{"class":102},[66,95497,2362],{"class":76},[66,95499,2477],{"class":102},[66,95501,2362],{"class":76},[66,95503,1520],{"class":102},[66,95505,2362],{"class":76},[66,95507,790],{"class":102},[66,95509,2362],{"class":76},[66,95511,2189],{"class":102},[66,95513,2362],{"class":76},[66,95515,2183],{"class":102},[66,95517,2362],{"class":76},[66,95519,2754],{"class":102},[66,95521,2362],{"class":76},[66,95523,1076],{"class":102},[66,95525,6473],{"class":76},[66,95527,95528],{"class":68,"line":80},[66,95529,95530],{"class":758},"#返回数组中非零元素的索引\n",[66,95532,95533],{"class":68,"line":112},[66,95534,95535],{"class":76},"np.nonzero(a)\n",[14,95537,95539],{"id":95538},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[57,95541,95543],{"className":59,"code":95542,"language":61,"meta":62,"style":62},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[23,95544,95545,95593,95598],{"__ignoreMap":62},[66,95546,95547,95549,95551,95553,95555,95557,95559,95561,95563,95565,95567,95569,95571,95573,95575,95577,95579,95581,95583,95585,95587,95589,95591],{"class":68,"line":69},[66,95548,2229],{"class":76},[66,95550,99],{"class":72},[66,95552,94800],{"class":76},[66,95554,304],{"class":102},[66,95556,2362],{"class":76},[66,95558,795],{"class":102},[66,95560,2362],{"class":76},[66,95562,1520],{"class":102},[66,95564,2362],{"class":76},[66,95566,2477],{"class":102},[66,95568,2362],{"class":76},[66,95570,1520],{"class":102},[66,95572,2362],{"class":76},[66,95574,790],{"class":102},[66,95576,2362],{"class":76},[66,95578,2189],{"class":102},[66,95580,2362],{"class":76},[66,95582,2183],{"class":102},[66,95584,2362],{"class":76},[66,95586,2754],{"class":102},[66,95588,2362],{"class":76},[66,95590,1076],{"class":102},[66,95592,6473],{"class":76},[66,95594,95595],{"class":68,"line":80},[66,95596,95597],{"class":758},"#计算一组数中最大值与最小值的差，可指定轴\n",[66,95599,95600],{"class":68,"line":112},[66,95601,95602],{"class":76},"np.ptp(a)\n",[1903,95604,95605],{},"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":62,"searchDepth":80,"depth":80,"links":95607},[95608,95609,95610,95611,95612,95613,95614,95615,95616,95617,95618],{"id":94870,"depth":80,"text":94871},{"id":94913,"depth":80,"text":94914},{"id":95021,"depth":80,"text":95022},{"id":95115,"depth":80,"text":95116},{"id":95155,"depth":80,"text":95156},{"id":95228,"depth":80,"text":95229},{"id":95296,"depth":80,"text":95297},{"id":95348,"depth":80,"text":95349},{"id":95392,"depth":80,"text":95393},{"id":95471,"depth":80,"text":95472},{"id":95538,"depth":80,"text":95539},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":94856,"description":1926},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":95625,"title":95626,"body":95627,"description":1926,"extension":1927,"meta":96282,"navigation":108,"path":96283,"seo":96284,"stem":96285,"__hash__":96286},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":95628,"toc":96270},[95629,95632,95636,95639,95855,95859,95862,96071,96075,96141,96146,96150,96153,96156,96194,96198,96201,96206,96210,96213,96216,96221,96225,96228,96232,96235,96238,96243,96247,96250,96253,96258,96262,96267],[10,95630,95626],{"id":95631},"_12其他常用函数",[14,95633,95635],{"id":95634},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,95637,95638],{},"将数组的数据按照行列复制扩展",[57,95640,95642],{"className":59,"code":95641,"language":61,"meta":62,"style":62},"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",[23,95643,95644,95660,95669,95673,95678,95683,95696,95700,95705,95710,95715,95719,95724,95748,95760,95764,95768,95773,95778,95783,95788,95792,95805,95809,95813,95818,95823,95828,95833,95838,95842,95846,95851],{"__ignoreMap":62},[66,95645,95646,95648,95650,95652,95654,95656,95658],{"class":68,"line":69},[66,95647,2229],{"class":76},[66,95649,99],{"class":72},[66,95651,94778],{"class":76},[66,95653,304],{"class":102},[66,95655,2362],{"class":76},[66,95657,752],{"class":102},[66,95659,313],{"class":76},[66,95661,95662,95665,95667],{"class":68,"line":80},[66,95663,95664],{"class":76},"np.tile(a,",[66,95666,795],{"class":102},[66,95668,313],{"class":76},[66,95670,95671],{"class":68,"line":112},[66,95672,95340],{"class":758},[66,95674,95675],{"class":68,"line":129},[66,95676,95677],{"class":758},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[66,95679,95680],{"class":68,"line":138},[66,95681,95682],{"class":758},"#行复制两次，列复制三次\n",[66,95684,95685,95688,95690,95692,95694],{"class":68,"line":227},[66,95686,95687],{"class":76},"np.tile(a,(",[66,95689,795],{"class":102},[66,95691,2362],{"class":76},[66,95693,1520],{"class":102},[66,95695,360],{"class":76},[66,95697,95698],{"class":68,"line":236},[66,95699,95340],{"class":758},[66,95701,95702],{"class":68,"line":241},[66,95703,95704],{"class":356},"'''\n",[66,95706,95707],{"class":68,"line":372},[66,95708,95709],{"class":356},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[66,95711,95712],{"class":68,"line":377},[66,95713,95714],{"class":356},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[66,95716,95717],{"class":68,"line":392},[66,95718,95704],{"class":356},[66,95720,95721],{"class":68,"line":405},[66,95722,95723],{"class":758},"#创建二维数组\n",[66,95725,95726,95728,95730,95732,95734,95736,95738,95740,95742,95744,95746],{"class":68,"line":418},[66,95727,95082],{"class":76},[66,95729,99],{"class":72},[66,95731,94778],{"class":76},[66,95733,304],{"class":102},[66,95735,2362],{"class":76},[66,95737,2502],{"class":102},[66,95739,94783],{"class":76},[66,95741,1076],{"class":102},[66,95743,2362],{"class":76},[66,95745,1520],{"class":102},[66,95747,313],{"class":76},[66,95749,95750,95753,95755,95757],{"class":68,"line":430},[66,95751,95752],{"class":76},"np.tile(aa,",[66,95754,795],{"class":102},[66,95756,2413],{"class":76},[66,95758,95759],{"class":758},"#一个数的时候就是行\n",[66,95761,95762],{"class":68,"line":438},[66,95763,95340],{"class":758},[66,95765,95766],{"class":68,"line":465},[66,95767,95704],{"class":356},[66,95769,95770],{"class":68,"line":1805},[66,95771,95772],{"class":356},"array([[ 1,  2,  3,  1,  2,  3],\n",[66,95774,95775],{"class":68,"line":1817},[66,95776,95777],{"class":356},"       [ 4,  5,  6,  4,  5,  6],\n",[66,95779,95780],{"class":68,"line":1822},[66,95781,95782],{"class":356},"       [ 7,  8,  9,  7,  8,  9],\n",[66,95784,95785],{"class":68,"line":1829},[66,95786,95787],{"class":356},"       [10, 11, 12, 10, 11, 12]])\n",[66,95789,95790],{"class":68,"line":3529},[66,95791,95704],{"class":356},[66,95793,95794,95797,95799,95801,95803],{"class":68,"line":3557},[66,95795,95796],{"class":76},"np.tile(aa,(",[66,95798,795],{"class":102},[66,95800,2362],{"class":76},[66,95802,1520],{"class":102},[66,95804,360],{"class":76},[66,95806,95807],{"class":68,"line":3562},[66,95808,95340],{"class":758},[66,95810,95811],{"class":68,"line":3579},[66,95812,95704],{"class":356},[66,95814,95815],{"class":68,"line":3584},[66,95816,95817],{"class":356},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[66,95819,95820],{"class":68,"line":3589},[66,95821,95822],{"class":356},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[66,95824,95825],{"class":68,"line":3594},[66,95826,95827],{"class":356},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[66,95829,95830],{"class":68,"line":3608},[66,95831,95832],{"class":356},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[66,95834,95835],{"class":68,"line":3613},[66,95836,95837],{"class":356},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[66,95839,95840],{"class":68,"line":4401},[66,95841,95822],{"class":356},[66,95843,95844],{"class":68,"line":4415},[66,95845,95827],{"class":356},[66,95847,95848],{"class":68,"line":4423},[66,95849,95850],{"class":356},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[66,95852,95853],{"class":68,"line":4428},[66,95854,95704],{"class":356},[14,95856,95858],{"id":95857},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,95860,95861],{},"repeat()将数组中的每个元素重复若干次",[57,95863,95865],{"className":59,"code":95864,"language":61,"meta":62,"style":62},"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",[23,95866,95867,95883,95892,95896,95901,95925,95930,95939,95943,95948,95952,95957,95973,95977,95981,95986,95991,95996,96000,96005,96009,96014,96019,96023,96039,96043,96047,96052,96057,96062,96067],{"__ignoreMap":62},[66,95868,95869,95871,95873,95875,95877,95879,95881],{"class":68,"line":69},[66,95870,2229],{"class":76},[66,95872,99],{"class":72},[66,95874,94778],{"class":76},[66,95876,304],{"class":102},[66,95878,2362],{"class":76},[66,95880,752],{"class":102},[66,95882,313],{"class":76},[66,95884,95885,95888,95890],{"class":68,"line":80},[66,95886,95887],{"class":76},"np.repeat(a,",[66,95889,1520],{"class":102},[66,95891,313],{"class":76},[66,95893,95894],{"class":68,"line":112},[66,95895,95340],{"class":758},[66,95897,95898],{"class":68,"line":129},[66,95899,95900],{"class":758},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[66,95902,95903,95905,95907,95909,95911,95913,95915,95917,95919,95921,95923],{"class":68,"line":138},[66,95904,95082],{"class":76},[66,95906,99],{"class":72},[66,95908,94778],{"class":76},[66,95910,304],{"class":102},[66,95912,2362],{"class":76},[66,95914,2502],{"class":102},[66,95916,94783],{"class":76},[66,95918,1076],{"class":102},[66,95920,2362],{"class":76},[66,95922,1520],{"class":102},[66,95924,313],{"class":76},[66,95926,95927],{"class":68,"line":227},[66,95928,95929],{"class":758},"#这个重复之后二维变成一维\n",[66,95931,95932,95935,95937],{"class":68,"line":236},[66,95933,95934],{"class":76},"np.repeat(aa,",[66,95936,795],{"class":102},[66,95938,313],{"class":76},[66,95940,95941],{"class":68,"line":241},[66,95942,95704],{"class":356},[66,95944,95945],{"class":68,"line":372},[66,95946,95947],{"class":356},"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",[66,95949,95950],{"class":68,"line":377},[66,95951,95704],{"class":356},[66,95953,95954],{"class":68,"line":392},[66,95955,95956],{"class":758},"#指定axis\n",[66,95958,95959,95961,95963,95965,95967,95969,95971],{"class":68,"line":405},[66,95960,95934],{"class":76},[66,95962,795],{"class":102},[66,95964,2362],{"class":76},[66,95966,49298],{"class":1234},[66,95968,99],{"class":72},[66,95970,2183],{"class":102},[66,95972,313],{"class":76},[66,95974,95975],{"class":68,"line":418},[66,95976,95340],{"class":758},[66,95978,95979],{"class":68,"line":430},[66,95980,95704],{"class":356},[66,95982,95983],{"class":68,"line":438},[66,95984,95985],{"class":356},"array([[ 1,  2,  3],\n",[66,95987,95988],{"class":68,"line":465},[66,95989,95990],{"class":356},"       [ 1,  2,  3],\n",[66,95992,95993],{"class":68,"line":1805},[66,95994,95995],{"class":356},"       [ 4,  5,  6],\n",[66,95997,95998],{"class":68,"line":1817},[66,95999,95995],{"class":356},[66,96001,96002],{"class":68,"line":1822},[66,96003,96004],{"class":356},"       [ 7,  8,  9],\n",[66,96006,96007],{"class":68,"line":1829},[66,96008,96004],{"class":356},[66,96010,96011],{"class":68,"line":3529},[66,96012,96013],{"class":356},"       [10, 11, 12],\n",[66,96015,96016],{"class":68,"line":3557},[66,96017,96018],{"class":356},"       [10, 11, 12]])\n",[66,96020,96021],{"class":68,"line":3562},[66,96022,95704],{"class":356},[66,96024,96025,96027,96029,96031,96033,96035,96037],{"class":68,"line":3579},[66,96026,95934],{"class":76},[66,96028,795],{"class":102},[66,96030,2362],{"class":76},[66,96032,49298],{"class":1234},[66,96034,99],{"class":72},[66,96036,304],{"class":102},[66,96038,313],{"class":76},[66,96040,96041],{"class":68,"line":3584},[66,96042,95340],{"class":758},[66,96044,96045],{"class":68,"line":3589},[66,96046,95704],{"class":356},[66,96048,96049],{"class":68,"line":3594},[66,96050,96051],{"class":356},"array([[ 1,  1,  2,  2,  3,  3],\n",[66,96053,96054],{"class":68,"line":3608},[66,96055,96056],{"class":356},"       [ 4,  4,  5,  5,  6,  6],\n",[66,96058,96059],{"class":68,"line":3613},[66,96060,96061],{"class":356},"       [ 7,  7,  8,  8,  9,  9],\n",[66,96063,96064],{"class":68,"line":4401},[66,96065,96066],{"class":356},"       [10, 10, 11, 11, 12, 12]])\n",[66,96068,96069],{"class":68,"line":4415},[66,96070,95704],{"class":356},[14,96072,96074],{"id":96073},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[57,96076,96078],{"className":59,"code":96077,"language":61,"meta":62,"style":62},"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",[23,96079,96080,96096,96101,96113,96117,96122,96132,96136],{"__ignoreMap":62},[66,96081,96082,96084,96086,96088,96090,96092,96094],{"class":68,"line":69},[66,96083,2229],{"class":76},[66,96085,99],{"class":72},[66,96087,94778],{"class":76},[66,96089,304],{"class":102},[66,96091,2362],{"class":76},[66,96093,752],{"class":102},[66,96095,313],{"class":76},[66,96097,96098],{"class":68,"line":80},[66,96099,96100],{"class":758},"#array([，2，3，4])\n",[66,96102,96103,96106,96108,96110],{"class":68,"line":112},[66,96104,96105],{"class":76},"np.roll(a,",[66,96107,795],{"class":102},[66,96109,2413],{"class":76},[66,96111,96112],{"class":758},"#传正数向后调多少位，传负数向前调多少位\n",[66,96114,96115],{"class":68,"line":129},[66,96116,95340],{"class":758},[66,96118,96119],{"class":68,"line":138},[66,96120,96121],{"class":758},"#array([3, 4, 1, 2])\n",[66,96123,96124,96126,96128,96130],{"class":68,"line":227},[66,96125,96105],{"class":76},[66,96127,2511],{"class":72},[66,96129,304],{"class":102},[66,96131,313],{"class":76},[66,96133,96134],{"class":68,"line":236},[66,96135,95340],{"class":758},[66,96137,96138],{"class":68,"line":241},[66,96139,96140],{"class":758},"#array([2, 3, 4, 1])\n",[19,96142,96143],{},[3304,96144],{"alt":62,"src":96145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,96147,96149],{"id":96148},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,96151,96152],{},"resize()重新调整数组的大小",[19,96154,96155],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[57,96157,96159],{"className":59,"code":96158,"language":61,"meta":62,"style":62},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[23,96160,96161,96166,96179],{"__ignoreMap":62},[66,96162,96163],{"class":68,"line":69},[66,96164,96165],{"class":758},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[66,96167,96168,96171,96173,96175,96177],{"class":68,"line":80},[66,96169,96170],{"class":76},"np.resize(aa,(",[66,96172,795],{"class":102},[66,96174,2362],{"class":76},[66,96176,519],{"class":102},[66,96178,360],{"class":76},[66,96180,96181,96183,96185,96187,96189,96191],{"class":68,"line":112},[66,96182,96170],{"class":76},[66,96184,795],{"class":102},[66,96186,2362],{"class":76},[66,96188,2404],{"class":102},[66,96190,84548],{"class":76},[66,96192,96193],{"class":758},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,96195,96197],{"id":96196},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,96199,96200],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,96202,96203],{},[3304,96204],{"alt":62,"src":96205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,96207,96209],{"id":96208},"_126-保存加载文件","12.6 保存加载文件",[19,96211,96212],{},"savetxt():将数据保存到txt文件中",[19,96214,96215],{},"loadtxt():从文件加载数据",[19,96217,96218],{},[3304,96219],{"alt":62,"src":96220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,96222,96224],{"id":96223},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,96226,96227],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,96229,96231],{"id":96230},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,96233,96234],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,96236,96237],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,96239,96240],{},[3304,96241],{"alt":62,"src":96242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,96244,96246],{"id":96245},"_129-where语句","12.9 where语句",[19,96248,96249],{},"np.where(条件,x,y)",[19,96251,96252],{},"如果条件为True,对应值为x,否则对应值为y",[19,96254,96255],{},[3304,96256],{"alt":62,"src":96257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,96259,96261],{"id":96260},"_1210-dot矩阵","12.10 dot()矩阵",[19,96263,96264],{},[3304,96265],{"alt":62,"src":96266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[1903,96268,96269],{},"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":62,"searchDepth":80,"depth":80,"links":96271},[96272,96273,96274,96275,96276,96277,96278,96279,96280,96281],{"id":95634,"depth":80,"text":95635},{"id":95857,"depth":80,"text":95858},{"id":96073,"depth":80,"text":96074},{"id":96148,"depth":80,"text":96149},{"id":96196,"depth":80,"text":96197},{"id":96208,"depth":80,"text":96209},{"id":96223,"depth":80,"text":96224},{"id":96230,"depth":80,"text":96231},{"id":96245,"depth":80,"text":96246},{"id":96260,"depth":80,"text":96261},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":95626,"description":1926},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":96288,"title":96289,"body":96290,"description":1926,"extension":1927,"meta":96643,"navigation":108,"path":96644,"seo":96645,"stem":96646,"__hash__":96647},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":96291,"toc":96641},[96292,96295,96298,96301,96304,96307,96372,96374,96638],[10,96293,96289],{"id":96294},"_13数组排序",[19,96296,96297],{},"排序主要用到的方法是np.sort和np.argsort",[19,96299,96300],{},"其中np.sort()对数组直接排序",[19,96302,96303],{},"而np.argsort()是返回排序后的原始索引",[19,96305,96306],{},"①一维数组",[57,96308,96310],{"className":59,"code":96309,"language":61,"meta":62,"style":62},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[23,96311,96312,96316,96356,96364],{"__ignoreMap":62},[66,96313,96314],{"class":68,"line":69},[66,96315,94881],{"class":758},[66,96317,96318,96320,96322,96324,96326,96328,96330,96332,96334,96336,96338,96340,96342,96344,96346,96348,96350,96352,96354],{"class":68,"line":80},[66,96319,2229],{"class":76},[66,96321,99],{"class":72},[66,96323,94800],{"class":76},[66,96325,1520],{"class":102},[66,96327,2362],{"class":76},[66,96329,2477],{"class":102},[66,96331,2362],{"class":76},[66,96333,2379],{"class":102},[66,96335,2362],{"class":76},[66,96337,2754],{"class":102},[66,96339,2362],{"class":76},[66,96341,2269],{"class":102},[66,96343,2362],{"class":76},[66,96345,2872],{"class":102},[66,96347,2362],{"class":76},[66,96349,519],{"class":102},[66,96351,2362],{"class":76},[66,96353,790],{"class":102},[66,96355,6473],{"class":76},[66,96357,96358,96361],{"class":68,"line":112},[66,96359,96360],{"class":76},"np.sort(a)",[66,96362,96363],{"class":758},"#升序排序\n",[66,96365,96366,96369],{"class":68,"line":129},[66,96367,96368],{"class":76},"np.argsort(a)",[66,96370,96371],{"class":758},"#按照元素大小来索引排序\n",[19,96373,95067],{},[57,96375,96377],{"className":59,"code":96376,"language":61,"meta":62,"style":62},"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",[23,96378,96379,96391,96417,96422,96426,96431,96436,96441,96446,96450,96458,96462,96467,96472,96477,96482,96486,96491,96504,96508,96513,96518,96523,96528,96532,96537,96549,96553,96557,96561,96565,96569,96573,96578,96593,96598,96607,96612,96616,96620,96625,96629,96634],{"__ignoreMap":62},[66,96380,96381,96384,96386,96388],{"class":68,"line":69},[66,96382,96383],{"class":76},"np.random.seed(",[66,96385,2183],{"class":102},[66,96387,2413],{"class":76},[66,96389,96390],{"class":758},"#保证每次值一样\n",[66,96392,96393,96395,96397,96399,96401,96403,96405,96407,96409,96411,96413,96415],{"class":68,"line":80},[66,96394,95082],{"class":76},[66,96396,99],{"class":72},[66,96398,94890],{"class":76},[66,96400,310],{"class":102},[66,96402,2362],{"class":76},[66,96404,33289],{"class":1234},[66,96406,99],{"class":72},[66,96408,348],{"class":76},[66,96410,1076],{"class":102},[66,96412,2362],{"class":76},[66,96414,519],{"class":102},[66,96416,360],{"class":76},[66,96418,96419],{"class":68,"line":112},[66,96420,96421],{"class":758},"#原数组：\n",[66,96423,96424],{"class":68,"line":129},[66,96425,95704],{"class":356},[66,96427,96428],{"class":68,"line":138},[66,96429,96430],{"class":356},"array([[44, 47, 64, 67, 67,  9],\n",[66,96432,96433],{"class":68,"line":227},[66,96434,96435],{"class":356},"       [83, 21, 36, 87, 70, 88],\n",[66,96437,96438],{"class":68,"line":236},[66,96439,96440],{"class":356},"       [88, 12, 58, 65, 39, 87],\n",[66,96442,96443],{"class":68,"line":241},[66,96444,96445],{"class":356},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[66,96447,96448],{"class":68,"line":372},[66,96449,95704],{"class":356},[66,96451,96452,96455],{"class":68,"line":377},[66,96453,96454],{"class":76},"np.sort(aa)",[66,96456,96457],{"class":758},"#每行进行了排序\n",[66,96459,96460],{"class":68,"line":392},[66,96461,95704],{"class":356},[66,96463,96464],{"class":68,"line":405},[66,96465,96466],{"class":356},"array([[ 9, 44, 47, 64, 67, 67],\n",[66,96468,96469],{"class":68,"line":418},[66,96470,96471],{"class":356},"       [21, 36, 70, 83, 87, 88],\n",[66,96473,96474],{"class":68,"line":430},[66,96475,96476],{"class":356},"       [12, 39, 58, 65, 87, 88],\n",[66,96478,96479],{"class":68,"line":438},[66,96480,96481],{"class":356},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[66,96483,96484],{"class":68,"line":465},[66,96485,95704],{"class":356},[66,96487,96488],{"class":68,"line":1805},[66,96489,96490],{"class":758},"#axis=0时\n",[66,96492,96493,96496,96498,96500,96502],{"class":68,"line":1817},[66,96494,96495],{"class":76},"np.sort(aa,",[66,96497,49298],{"class":1234},[66,96499,99],{"class":72},[66,96501,2183],{"class":102},[66,96503,313],{"class":76},[66,96505,96506],{"class":68,"line":1822},[66,96507,95704],{"class":356},[66,96509,96510],{"class":68,"line":1829},[66,96511,96512],{"class":356},"array([[44, 12, 36, 37, 25,  9],\n",[66,96514,96515],{"class":68,"line":3529},[66,96516,96517],{"class":356},"       [46, 21, 58, 65, 39, 77],\n",[66,96519,96520],{"class":68,"line":3557},[66,96521,96522],{"class":356},"       [83, 47, 64, 67, 67, 87],\n",[66,96524,96525],{"class":68,"line":3562},[66,96526,96527],{"class":356},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[66,96529,96530],{"class":68,"line":3579},[66,96531,95704],{"class":356},[66,96533,96534],{"class":68,"line":3584},[66,96535,96536],{"class":758},"#axis=1时,为默认值\n",[66,96538,96539,96541,96543,96545,96547],{"class":68,"line":3589},[66,96540,96495],{"class":76},[66,96542,49298],{"class":1234},[66,96544,99],{"class":72},[66,96546,304],{"class":102},[66,96548,313],{"class":76},[66,96550,96551],{"class":68,"line":3594},[66,96552,95704],{"class":356},[66,96554,96555],{"class":68,"line":3608},[66,96556,96466],{"class":356},[66,96558,96559],{"class":68,"line":3613},[66,96560,96471],{"class":356},[66,96562,96563],{"class":68,"line":4401},[66,96564,96476],{"class":356},[66,96566,96567],{"class":68,"line":4415},[66,96568,96481],{"class":356},[66,96570,96571],{"class":68,"line":4423},[66,96572,95704],{"class":356},[66,96574,96575],{"class":68,"line":4428},[66,96576,96577],{"class":758},"#按最后一列排序\n",[66,96579,96580,96582,96584,96587,96589,96591],{"class":68,"line":4434},[66,96581,2253],{"class":76},[66,96583,99],{"class":72},[66,96585,96586],{"class":76},"aa[:,",[66,96588,2511],{"class":72},[66,96590,304],{"class":102},[66,96592,704],{"class":76},[66,96594,96595],{"class":68,"line":4440},[66,96596,96597],{"class":758},"#获取最后一列排好序的索引\n",[66,96599,96600,96602,96604],{"class":68,"line":4445},[66,96601,75837],{"class":76},[66,96603,99],{"class":72},[66,96605,96606],{"class":76},"np.argsort(b)\n",[66,96608,96609],{"class":68,"line":9759},[66,96610,96611],{"class":76},"aa[index]\n",[66,96613,96614],{"class":68,"line":9783},[66,96615,95704],{"class":356},[66,96617,96618],{"class":68,"line":9788},[66,96619,96430],{"class":356},[66,96621,96622],{"class":68,"line":9794},[66,96623,96624],{"class":356},"       [46, 88, 81, 37, 25, 77],\n",[66,96626,96627],{"class":68,"line":9821},[66,96628,96440],{"class":356},[66,96630,96631],{"class":68,"line":9826},[66,96632,96633],{"class":356},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[66,96635,96636],{"class":68,"line":9832},[66,96637,95704],{"class":356},[1903,96639,96640],{},"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":62,"searchDepth":80,"depth":80,"links":96642},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":96289,"description":1926},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":96649,"title":96650,"body":96651,"description":1926,"extension":1927,"meta":96681,"navigation":108,"path":96682,"seo":96683,"stem":96684,"__hash__":96685},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":96652,"toc":96679},[96653,96656,96659,96662,96665,96668,96671,96674],[10,96654,96650],{"id":96655},"_14广播机制",[19,96657,96658],{},"广播的规则：",[19,96660,96661],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,96663,96664],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,96666,96667],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,96669,96670],{},"3.如果没有维度形状为1，则会引发异常",[19,96672,96673],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,96675,96676],{},[3304,96677],{"alt":62,"src":96678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":62,"searchDepth":80,"depth":80,"links":96680},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":96650,"description":1926},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":96687,"title":96688,"body":96689,"description":1926,"extension":1927,"meta":96787,"navigation":108,"path":96788,"seo":96789,"stem":96790,"__hash__":96791},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":96690,"toc":96785},[96691,96694,96697,96782],[10,96692,96688],{"id":96693},"_15比较掩码",[19,96695,96696],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[57,96698,96700],{"className":59,"code":96699,"language":61,"meta":62,"style":62},"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",[23,96701,96702,96748,96759,96773,96777],{"__ignoreMap":62},[66,96703,96704,96706,96708,96711,96713,96715,96717,96719,96721,96723,96725,96727,96729,96731,96733,96735,96737,96739,96741,96743,96745],{"class":68,"line":69},[66,96705,2229],{"class":76},[66,96707,99],{"class":72},[66,96709,96710],{"class":76},"np.array([[",[66,96712,304],{"class":102},[66,96714,2362],{"class":76},[66,96716,795],{"class":102},[66,96718,2362],{"class":76},[66,96720,1520],{"class":102},[66,96722,49814],{"class":76},[66,96724,2452],{"class":102},[66,96726,2362],{"class":76},[66,96728,2477],{"class":102},[66,96730,2362],{"class":76},[66,96732,2502],{"class":102},[66,96734,49814],{"class":76},[66,96736,2704],{"class":102},[66,96738,2362],{"class":76},[66,96740,2729],{"class":102},[66,96742,2362],{"class":76},[66,96744,2754],{"class":102},[66,96746,96747],{"class":76},"]])\n",[66,96749,96750,96752,96754,96756],{"class":68,"line":80},[66,96751,2229],{"class":76},[66,96753,413],{"class":72},[66,96755,2679],{"class":102},[66,96757,96758],{"class":758},"#结果是一个由True,False组成的数组\n",[66,96760,96761,96764,96766,96768,96770],{"class":68,"line":112},[66,96762,96763],{"class":76},"a[a",[66,96765,413],{"class":72},[66,96767,2679],{"class":102},[66,96769,2917],{"class":76},[66,96771,96772],{"class":758},"#小于20的元素会存到这个数组中\n",[66,96774,96775],{"class":68,"line":129},[66,96776,95340],{"class":758},[66,96778,96779],{"class":68,"line":138},[66,96780,96781],{"class":758},"#array([ 1,  2,  3, 11, 12, 13])\n",[1903,96783,96784],{},"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":62,"searchDepth":80,"depth":80,"links":96786},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":96688,"description":1926},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":96793,"title":96794,"body":96795,"description":1926,"extension":1927,"meta":96887,"navigation":108,"path":96888,"seo":96889,"stem":96890,"__hash__":96891},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":96796,"toc":96885},[96797,96800,96803,96806,96809,96812,96877,96882],[10,96798,96794],{"id":96799},"_16魔法命令time",[19,96801,96802],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,96804,96805],{},"%:行模式",[19,96807,96808],{},"%%:单元格模式",[19,96810,96811],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[57,96813,96815],{"className":59,"code":96814,"language":61,"meta":62,"style":62},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[23,96816,96817,96822,96829,96834,96843,96856,96860,96868],{"__ignoreMap":62},[66,96818,96819],{"class":68,"line":69},[66,96820,96821],{"class":758},"#程序执行时间\n",[66,96823,96824,96826],{"class":68,"line":80},[66,96825,284],{"class":72},[66,96827,96828],{"class":76}," time \n",[66,96830,96831],{"class":68,"line":112},[66,96832,96833],{"class":758},"#获取时间\n",[66,96835,96836,96839,96841],{"class":68,"line":129},[66,96837,96838],{"class":76},"start",[66,96840,99],{"class":72},[66,96842,34210],{"class":76},[66,96844,96845,96848,96851,96853],{"class":68,"line":138},[66,96846,96847],{"class":76},"time.sleep(",[66,96849,96850],{"class":102},"0.4",[66,96852,2413],{"class":76},[66,96854,96855],{"class":758},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[66,96857,96858],{"class":68,"line":227},[66,96859,96833],{"class":758},[66,96861,96862,96864,96866],{"class":68,"line":236},[66,96863,1235],{"class":76},[66,96865,99],{"class":72},[66,96867,34210],{"class":76},[66,96869,96870,96872,96874],{"class":68,"line":241},[66,96871,1235],{"class":76},[66,96873,2511],{"class":72},[66,96875,96876],{"class":76},"start\n",[19,96878,96879],{},[3304,96880],{"alt":62,"src":96881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[1903,96883,96884],{},"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":62,"searchDepth":80,"depth":80,"links":96886},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":96794,"description":1926},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":96893,"title":96894,"body":96895,"description":1926,"extension":1927,"meta":96930,"navigation":108,"path":96931,"seo":96932,"stem":96933,"__hash__":96934},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":96896,"toc":96928},[96897,96900,96903,96906,96909,96912,96915,96918,96923],[10,96898,96894],{"id":96899},"_17魔法命令timeit",[19,96901,96902],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,96904,96905],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,96907,96908],{},"单元格模式：",[19,96910,96911],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,96913,96914],{},"初始化语句执行次数由轮数来决定",[19,96916,96917],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,96919,96920],{},[3304,96921],{"alt":62,"src":96922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,96924,96925],{},[3304,96926],{"alt":62,"src":96927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":62,"searchDepth":80,"depth":80,"links":96929},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":96894,"description":1926},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":96936,"title":96937,"body":96938,"description":1926,"extension":1927,"meta":96956,"navigation":108,"path":96957,"seo":96958,"stem":96959,"__hash__":96960},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":96939,"toc":96954},[96940,96943,96946,96949],[10,96941,96937],{"id":96942},"_18魔法命令writefile和run",[19,96944,96945],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,96947,96948],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,96950,96951],{},[3304,96952],{"alt":62,"src":96953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":62,"searchDepth":80,"depth":80,"links":96955},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":96937,"description":1926},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":96962,"title":96963,"body":96964,"description":1926,"extension":1927,"meta":97017,"navigation":108,"path":97018,"seo":97019,"stem":97020,"__hash__":97021},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":96965,"toc":97015},[96966,96969,96972,96974,96977,96980,96985,96988,96991,96994,96997,97000,97003,97006,97009,97012],[10,96967,96963],{"id":96968},"_19魔法命令memit",[19,96970,96971],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,96973,26403],{},[19,96975,96976],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,96978,96979],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,96981,96982],{},[3304,96983],{"alt":62,"src":96984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,96986,96987],{},"补充：",[19,96989,96990],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,96992,96993],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,96995,96996],{},"解决方法：",[19,96998,96999],{},"1.cmd",[19,97001,97002],{},"2.依次输入以下代码：",[19,97004,97005],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,97007,97008],{},"pip install --upgrade ipython",[19,97010,97011],{},"#升级 memory_profiler 和 setuptools",[19,97013,97014],{},"pip install --upgrade memory_profiler setuptools",{"title":62,"searchDepth":80,"depth":80,"links":97016},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":96963,"description":1926},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":97023,"title":97024,"body":97025,"description":1926,"extension":1927,"meta":98670,"navigation":108,"path":98671,"seo":98672,"stem":98673,"__hash__":98674},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":97026,"toc":98640},[97027,97030,97034,97038,97098,97101,97106,97110,97115,97120,97125,97130,97133,97138,97142,97146,97179,97182,97185,97188,97240,97243,97279,97282,97324,97328,97349,97351,97388,97390,97395,97397,97402,97406,97409,97437,97441,97445,97498,97502,97594,97598,97602,97605,97610,97614,97639,97644,97648,97651,97654,97657,97660,97663,97666,97669,97681,97685,97689,97692,97724,97727,97750,97753,97779,97782,97808,97811,97845,97848,97910,97914,97917,97921,97924,97950,97953,97956,97961,97964,98033,98035,98040,98101,98104,98115,98121,98126,98130,98133,98146,98150,98165,98167,98190,98192,98218,98221,98224,98227,98275,98277,98282,98286,98290,98317,98321,98348,98351,98356,98361,98451,98455,98513,98518,98521,98524,98566,98570,98626,98631,98634,98637],[10,97028,97024],{"id":97029},"_2创建数组",[14,97031,97033],{"id":97032},"_21-array函数创建数组","2.1 array()函数创建数组",[484,97035,97037],{"id":97036},"_221-函数语句","2.2.1 函数语句",[57,97039,97041],{"className":59,"code":97040,"language":61,"meta":62,"style":62},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[23,97042,97043],{"__ignoreMap":62},[66,97044,97045,97048,97051,97053,97055,97057,97059,97061,97064,97066,97068,97070,97073,97075,97077,97079,97082,97084,97087,97089,97092,97094,97096],{"class":68,"line":69},[66,97046,97047],{"class":76},"numpy.array(",[66,97049,97050],{"class":102},"object",[66,97052,307],{"class":76},[66,97054,95276],{"class":1234},[66,97056,15369],{"class":72},[66,97058,40721],{"class":102},[66,97060,307],{"class":76},[66,97062,97063],{"class":1234},"copy",[66,97065,15369],{"class":72},[66,97067,333],{"class":102},[66,97069,307],{"class":76},[66,97071,97072],{"class":1234},"order",[66,97074,15369],{"class":72},[66,97076,40721],{"class":102},[66,97078,307],{"class":76},[66,97080,97081],{"class":1234},"subok",[66,97083,15369],{"class":72},[66,97085,97086],{"class":102}," False",[66,97088,307],{"class":76},[66,97090,97091],{"class":1234},"ndmin",[66,97093,15369],{"class":72},[66,97095,962],{"class":102},[66,97097,313],{"class":76},[19,97099,97100],{},"参数：",[19,97102,97103],{},[3304,97104],{"alt":62,"src":97105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[484,97107,97109],{"id":97108},"_222-实例","2.2.2 实例",[19,97111,97112],{},[3304,97113],{"alt":62,"src":97114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,97116,97117],{},[3304,97118],{"alt":62,"src":97119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,97121,97122],{},[3304,97123],{"alt":62,"src":97124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,97126,97127],{},[3304,97128],{"alt":62,"src":97129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,97131,97132],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,97134,97135],{},[3304,97136],{"alt":62,"src":97137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,97139,97141],{"id":97140},"_22-随机数创建数组","2.2 随机数创建数组",[484,97143,97145],{"id":97144},"_221-random语句","2.2.1 random语句",[57,97147,97149],{"className":59,"code":97148,"language":61,"meta":62,"style":62},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[23,97150,97151,97156,97161,97169,97174],{"__ignoreMap":62},[66,97152,97153],{"class":68,"line":69},[66,97154,97155],{"class":758},"#random.random()\n",[66,97157,97158],{"class":68,"line":80},[66,97159,97160],{"class":758},"#确定随机种子,就是每次运行结果是相同的\n",[66,97162,97163,97165,97167],{"class":68,"line":112},[66,97164,96383],{"class":76},[66,97166,2183],{"class":102},[66,97168,313],{"class":76},[66,97170,97171],{"class":68,"line":129},[66,97172,97173],{"class":76},"np.random.random()\n",[66,97175,97176],{"class":68,"line":138},[66,97177,97178],{"class":758},"#生成一个随机的数目\n",[19,97180,97181],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,97183,97184],{},"可以指定数组形状 size",[19,97186,97187],{},"①生成一维数组",[57,97189,97191],{"className":59,"code":97190,"language":61,"meta":62,"style":62},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[23,97192,97193,97198,97211,97216,97232],{"__ignoreMap":62},[66,97194,97195],{"class":68,"line":69},[66,97196,97197],{"class":758},"#random.random(size())\n",[66,97199,97200,97203,97205,97207,97209],{"class":68,"line":80},[66,97201,97202],{"class":76},"np.random.random(",[66,97204,33289],{"class":1234},[66,97206,99],{"class":72},[66,97208,752],{"class":102},[66,97210,313],{"class":76},[66,97212,97213],{"class":68,"line":112},[66,97214,97215],{"class":758},"#生成一位的五个元素\n",[66,97217,97218,97220,97222,97224,97226,97228,97230],{"class":68,"line":129},[66,97219,2229],{"class":76},[66,97221,99],{"class":72},[66,97223,97202],{"class":76},[66,97225,33289],{"class":1234},[66,97227,99],{"class":72},[66,97229,1076],{"class":102},[66,97231,313],{"class":76},[66,97233,97234,97237],{"class":68,"line":138},[66,97235,97236],{"class":76},"a.shape ",[66,97238,97239],{"class":758},"#输出数组形状\n",[19,97241,97242],{},"②生成二维数组",[57,97244,97246],{"className":59,"code":97245,"language":61,"meta":62,"style":62},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[23,97247,97248,97252,97274],{"__ignoreMap":62},[66,97249,97250],{"class":68,"line":69},[66,97251,95077],{"class":758},[66,97253,97254,97256,97258,97260,97262,97264,97266,97268,97270,97272],{"class":68,"line":80},[66,97255,95082],{"class":76},[66,97257,99],{"class":72},[66,97259,97202],{"class":76},[66,97261,33289],{"class":1234},[66,97263,99],{"class":72},[66,97265,348],{"class":76},[66,97267,1076],{"class":102},[66,97269,2362],{"class":76},[66,97271,752],{"class":102},[66,97273,360],{"class":76},[66,97275,97276],{"class":68,"line":112},[66,97277,97278],{"class":758},"#生成四行五列的数组\n",[19,97280,97281],{},"③生成三维数组",[57,97283,97285],{"className":59,"code":97284,"language":61,"meta":62,"style":62},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[23,97286,97287,97292,97319],{"__ignoreMap":62},[66,97288,97289],{"class":68,"line":69},[66,97290,97291],{"class":758},"#三维数组\n",[66,97293,97294,97297,97299,97301,97303,97305,97307,97309,97311,97313,97315,97317],{"class":68,"line":80},[66,97295,97296],{"class":76},"aaa",[66,97298,99],{"class":72},[66,97300,97202],{"class":76},[66,97302,33289],{"class":1234},[66,97304,99],{"class":72},[66,97306,348],{"class":76},[66,97308,795],{"class":102},[66,97310,2362],{"class":76},[66,97312,1520],{"class":102},[66,97314,2362],{"class":76},[66,97316,1076],{"class":102},[66,97318,360],{"class":76},[66,97320,97321],{"class":68,"line":112},[66,97322,97323],{"class":76},"aaa.shape\n",[484,97325,97327],{"id":97326},"_222-randint语句","2.2.2 randint语句",[57,97329,97331],{"className":59,"code":97330,"language":61,"meta":62,"style":62},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[23,97332,97333,97338],{"__ignoreMap":62},[66,97334,97335],{"class":68,"line":69},[66,97336,97337],{"class":758},"#生成随机的整数 random.randint(low,high,size)\n",[66,97339,97340,97342,97344,97346],{"class":68,"line":80},[66,97341,94890],{"class":76},[66,97343,752],{"class":102},[66,97345,15519],{"class":76},[66,97347,97348],{"class":758},"#0~5中的随机一个数\n",[19,97350,97187],{},[57,97352,97354],{"className":59,"code":97353,"language":61,"meta":62,"style":62},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[23,97355,97356,97361,97383],{"__ignoreMap":62},[66,97357,97358],{"class":68,"line":69},[66,97359,97360],{"class":758},"#一维\n",[66,97362,97363,97365,97367,97369,97371,97373,97375,97377,97379,97381],{"class":68,"line":80},[66,97364,94890],{"class":76},[66,97366,304],{"class":102},[66,97368,2362],{"class":76},[66,97370,2452],{"class":102},[66,97372,2362],{"class":76},[66,97374,33289],{"class":1234},[66,97376,99],{"class":72},[66,97378,348],{"class":76},[66,97380,790],{"class":102},[66,97382,360],{"class":76},[66,97384,97385],{"class":68,"line":112},[66,97386,97387],{"class":758},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,97389,97242],{},[19,97391,97392],{},[3304,97393],{"alt":62,"src":97394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,97396,97281],{},[19,97398,97399],{},[3304,97400],{"alt":62,"src":97401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[484,97403,97405],{"id":97404},"_222-rand语句","2.2.2 rand语句",[19,97407,97408],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[57,97410,97412],{"className":59,"code":97411,"language":61,"meta":62,"style":62},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[23,97413,97414,97427,97432],{"__ignoreMap":62},[66,97415,97416,97419,97421,97423,97425],{"class":68,"line":69},[66,97417,97418],{"class":76},"np.random.rand(",[66,97420,310],{"class":102},[66,97422,2362],{"class":76},[66,97424,790],{"class":102},[66,97426,313],{"class":76},[66,97428,97429],{"class":68,"line":80},[66,97430,97431],{"class":758},"#第一个参数100：行数，表示有100个样本\n",[66,97433,97434],{"class":68,"line":112},[66,97435,97436],{"class":758},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,97438,97440],{"id":97439},"_23-arange创建数组","2.3 arange()创建数组",[484,97442,97444],{"id":97443},"_231-函数语句","2.3.1 函数语句",[57,97446,97448],{"className":59,"code":97447,"language":61,"meta":62,"style":62},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[23,97449,97450,97464,97469,97474,97479,97484,97489,97494],{"__ignoreMap":62},[66,97451,97452,97455,97457,97459,97462],{"class":68,"line":69},[66,97453,97454],{"class":76},"numpy.arange([start,] stop[, step], ",[66,97456,95276],{"class":1234},[66,97458,99],{"class":72},[66,97460,97461],{"class":102},"None",[66,97463,313],{"class":76},[66,97465,97466],{"class":68,"line":80},[66,97467,97468],{"class":758},"#参数\n",[66,97470,97471],{"class":68,"line":112},[66,97472,97473],{"class":356},"\"\"\"\n",[66,97475,97476],{"class":68,"line":129},[66,97477,97478],{"class":356},"start:起始值，可选，默认从 0 开始。\n",[66,97480,97481],{"class":68,"line":138},[66,97482,97483],{"class":356},"stop:结束值（不包含该值）。\n",[66,97485,97486],{"class":68,"line":227},[66,97487,97488],{"class":356},"step:步长，可选，默认是 1。可以为浮点数。\n",[66,97490,97491],{"class":68,"line":236},[66,97492,97493],{"class":356},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[66,97495,97496],{"class":68,"line":241},[66,97497,97473],{"class":356},[484,97499,97501],{"id":97500},"_232-实例","2.3.2 实例",[57,97503,97505],{"className":59,"code":97504,"language":61,"meta":62,"style":62},"#创建一维数组\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",[23,97506,97507,97511,97535,97540,97545,97549,97572,97576,97580,97585,97590],{"__ignoreMap":62},[66,97508,97509],{"class":68,"line":69},[66,97510,94881],{"class":758},[66,97512,97513,97515,97517,97519,97521,97523,97525,97527,97529,97531,97533],{"class":68,"line":80},[66,97514,94778],{"class":76},[66,97516,304],{"class":102},[66,97518,2362],{"class":76},[66,97520,2704],{"class":102},[66,97522,2362],{"class":76},[66,97524,304],{"class":102},[66,97526,2362],{"class":76},[66,97528,95276],{"class":1234},[66,97530,99],{"class":72},[66,97532,2003],{"class":102},[66,97534,313],{"class":76},[66,97536,97537],{"class":68,"line":112},[66,97538,97539],{"class":758},"#输出结果：\n",[66,97541,97542],{"class":68,"line":129},[66,97543,97544],{"class":758},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[66,97546,97547],{"class":68,"line":138},[66,97548,95723],{"class":758},[66,97550,97551,97554,97556,97558,97560,97563,97565,97567,97569],{"class":68,"line":227},[66,97552,97553],{"class":76},"np.array([np.arange(",[66,97555,304],{"class":102},[66,97557,2362],{"class":76},[66,97559,1076],{"class":102},[66,97561,97562],{"class":76},"),np.arange(",[66,97564,1076],{"class":102},[66,97566,2362],{"class":76},[66,97568,2353],{"class":102},[66,97570,97571],{"class":76},")])\n",[66,97573,97574],{"class":68,"line":236},[66,97575,95340],{"class":758},[66,97577,97578],{"class":68,"line":241},[66,97579,97473],{"class":356},[66,97581,97582],{"class":68,"line":372},[66,97583,97584],{"class":356},"array([[1, 2, 3],\n",[66,97586,97587],{"class":68,"line":377},[66,97588,97589],{"class":356},"       [4, 5, 6]])\n",[66,97591,97592],{"class":68,"line":392},[66,97593,97473],{"class":356},[14,97595,97597],{"id":97596},"_24-生态分布","2.4 生态分布",[484,97599,97601],{"id":97600},"_241-标准正态分布","2.4.1 标准正态分布",[19,97603,97604],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,97606,97607],{},[3304,97608],{"alt":62,"src":97609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[484,97611,97613],{"id":97612},"_242-常规正态分布","2.4.2 常规正态分布",[57,97615,97617],{"className":59,"code":97616,"language":61,"meta":62,"style":62},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[23,97618,97619,97624,97629,97634],{"__ignoreMap":62},[66,97620,97621],{"class":68,"line":69},[66,97622,97623],{"class":76},"random.normal(loc,scale,size)也可以生成正态分布\n",[66,97625,97626],{"class":68,"line":80},[66,97627,97628],{"class":758},"#loc:期望\n",[66,97630,97631],{"class":68,"line":112},[66,97632,97633],{"class":758},"#scale:方差\n",[66,97635,97636],{"class":68,"line":129},[66,97637,97638],{"class":758},"#size:用于确定是几维的数列\n",[19,97640,97641],{},[3304,97642],{"alt":62,"src":97643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,97645,97647],{"id":97646},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,97649,97650],{},"ndim:秩，维度个数",[19,97652,97653],{},"size:数组元素的个数",[19,97655,97656],{},"shape:数组的形状",[19,97658,97659],{},"dtype:数组元素的类型",[19,97661,97662],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,97664,97665],{},"他们都是属性，通过数组.属性的形式来确定",[19,97667,97668],{},"如果需要输出多个可以通过以下方式：",[57,97670,97672],{"className":59,"code":97671,"language":61,"meta":62,"style":62},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[23,97673,97674],{"__ignoreMap":62},[66,97675,97676,97678],{"class":68,"line":69},[66,97677,244],{"class":102},[66,97679,97680],{"class":76},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,97682,97684],{"id":97683},"_26-其他方式创建数组","2.6 其他方式创建数组",[484,97686,97688],{"id":97687},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,97690,97691],{},"①创建一维数组",[57,97693,97695],{"className":59,"code":97694,"language":61,"meta":62,"style":62},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[23,97696,97697,97706,97710,97715,97720],{"__ignoreMap":62},[66,97698,97699,97702,97704],{"class":68,"line":69},[66,97700,97701],{"class":76},"np.zeros(",[66,97703,790],{"class":102},[66,97705,313],{"class":76},[66,97707,97708],{"class":68,"line":80},[66,97709,97473],{"class":356},[66,97711,97712],{"class":68,"line":112},[66,97713,97714],{"class":356},"输出结果：\n",[66,97716,97717],{"class":68,"line":129},[66,97718,97719],{"class":356},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[66,97721,97722],{"class":68,"line":138},[66,97723,97473],{"class":356},[19,97725,97726],{},"上方代码等价于：",[57,97728,97730],{"className":59,"code":97729,"language":61,"meta":62,"style":62},"np.zeros(shape=(10))#创建10个元素的0数组\n",[23,97731,97732],{"__ignoreMap":62},[66,97733,97734,97736,97739,97741,97743,97745,97747],{"class":68,"line":69},[66,97735,97701],{"class":76},[66,97737,97738],{"class":1234},"shape",[66,97740,99],{"class":72},[66,97742,348],{"class":76},[66,97744,790],{"class":102},[66,97746,84548],{"class":76},[66,97748,97749],{"class":758},"#创建10个元素的0数组\n",[19,97751,97752],{},"也可以指定类型",[57,97754,97756],{"className":59,"code":97755,"language":61,"meta":62,"style":62},"#指定类型\nnp.zeros(5,dtype=int)\n",[23,97757,97758,97763],{"__ignoreMap":62},[66,97759,97760],{"class":68,"line":69},[66,97761,97762],{"class":758},"#指定类型\n",[66,97764,97765,97767,97769,97771,97773,97775,97777],{"class":68,"line":80},[66,97766,97701],{"class":76},[66,97768,752],{"class":102},[66,97770,2362],{"class":76},[66,97772,95276],{"class":1234},[66,97774,99],{"class":72},[66,97776,2003],{"class":102},[66,97778,313],{"class":76},[19,97780,97781],{},"②创建二维数组",[57,97783,97785],{"className":59,"code":97784,"language":61,"meta":62,"style":62},"np.zeros((3,4),dtype=int)\n",[23,97786,97787],{"__ignoreMap":62},[66,97788,97789,97792,97794,97796,97798,97800,97802,97804,97806],{"class":68,"line":69},[66,97790,97791],{"class":76},"np.zeros((",[66,97793,1520],{"class":102},[66,97795,2362],{"class":76},[66,97797,1076],{"class":102},[66,97799,44043],{"class":76},[66,97801,95276],{"class":1234},[66,97803,99],{"class":72},[66,97805,2003],{"class":102},[66,97807,313],{"class":76},[19,97809,97810],{},"③创建三维数组",[57,97812,97814],{"className":59,"code":97813,"language":61,"meta":62,"style":62},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[23,97815,97816,97821],{"__ignoreMap":62},[66,97817,97818],{"class":68,"line":69},[66,97819,97820],{"class":758},"#创建三维数组\n",[66,97822,97823,97825,97827,97829,97831,97833,97835,97837,97839,97841,97843],{"class":68,"line":80},[66,97824,97791],{"class":76},[66,97826,1520],{"class":102},[66,97828,2362],{"class":76},[66,97830,1076],{"class":102},[66,97832,2362],{"class":76},[66,97834,752],{"class":102},[66,97836,44043],{"class":76},[66,97838,95276],{"class":1234},[66,97840,99],{"class":72},[66,97842,2003],{"class":102},[66,97844,313],{"class":76},[19,97846,97847],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[57,97849,97851],{"className":59,"code":97850,"language":61,"meta":62,"style":62},"#使用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",[23,97852,97853,97858,97873,97878,97883,97905],{"__ignoreMap":62},[66,97854,97855],{"class":68,"line":69},[66,97856,97857],{"class":758},"#使用zeros_like将创建的一维数组变成全0的数组\n",[66,97859,97860,97862,97864,97866,97868,97870],{"class":68,"line":80},[66,97861,2229],{"class":76},[66,97863,99],{"class":72},[66,97865,94778],{"class":76},[66,97867,1076],{"class":102},[66,97869,2413],{"class":76},[66,97871,97872],{"class":758},"#这个得到的结果：一维数组0，1，2，3\n",[66,97874,97875],{"class":68,"line":112},[66,97876,97877],{"class":76},"np.zeros_like(a)\n",[66,97879,97880],{"class":68,"line":129},[66,97881,97882],{"class":758},"#使用zeros_like将创建的二维数组变成全0的数组\n",[66,97884,97885,97887,97889,97891,97893,97895,97897,97899,97901,97903],{"class":68,"line":138},[66,97886,95082],{"class":76},[66,97888,99],{"class":72},[66,97890,97202],{"class":76},[66,97892,33289],{"class":1234},[66,97894,99],{"class":72},[66,97896,348],{"class":76},[66,97898,1076],{"class":102},[66,97900,2362],{"class":76},[66,97902,752],{"class":102},[66,97904,360],{"class":76},[66,97906,97907],{"class":68,"line":227},[66,97908,97909],{"class":76},"np.zeros_like(aa)\n",[484,97911,97913],{"id":97912},"_262-ones创建数组","2.6.2 ones()创建数组",[19,97915,97916],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[484,97918,97920],{"id":97919},"_263-empty创建数组","2.6.3 empty()创建数组",[19,97922,97923],{},"①empty()用法",[57,97925,97927],{"className":59,"code":97926,"language":61,"meta":62,"style":62},"numpy.empty(shape,dtype=float,order='c')\n",[23,97928,97929],{"__ignoreMap":62},[66,97930,97931,97934,97936,97938,97940,97942,97944,97946,97948],{"class":68,"line":69},[66,97932,97933],{"class":76},"numpy.empty(shape,",[66,97935,95276],{"class":1234},[66,97937,99],{"class":72},[66,97939,2038],{"class":102},[66,97941,2362],{"class":76},[66,97943,97072],{"class":1234},[66,97945,99],{"class":72},[66,97947,77807],{"class":356},[66,97949,313],{"class":76},[19,97951,97952],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,97954,97955],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,97957,97958],{},[3304,97959],{"alt":62,"src":97960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,97962,97963],{},"②empty()用法",[57,97965,97967],{"className":59,"code":97966,"language":61,"meta":62,"style":62},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[23,97968,97969,97990,98002,98023,98028],{"__ignoreMap":62},[66,97970,97971,97973,97975,97978,97980,97982,97984,97986,97988],{"class":68,"line":69},[66,97972,2824],{"class":76},[66,97974,99],{"class":72},[66,97976,97977],{"class":76},"np.empty(",[66,97979,790],{"class":102},[66,97981,2362],{"class":76},[66,97983,95276],{"class":1234},[66,97985,99],{"class":72},[66,97987,2003],{"class":102},[66,97989,313],{"class":76},[66,97991,97992,97994,97996,97998,98000],{"class":68,"line":80},[66,97993,2799],{"class":76},[66,97995,99],{"class":72},[66,97997,94778],{"class":76},[66,97999,752],{"class":102},[66,98001,313],{"class":76},[66,98003,98004,98007,98009,98012,98014,98016,98019,98021],{"class":68,"line":112},[66,98005,98006],{"class":76},"np.add(",[66,98008,795],{"class":102},[66,98010,98011],{"class":76},",x,",[66,98013,94830],{"class":1234},[66,98015,99],{"class":72},[66,98017,98018],{"class":76},"y[:",[66,98020,752],{"class":102},[66,98022,6473],{"class":76},[66,98024,98025],{"class":68,"line":129},[66,98026,98027],{"class":758},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[66,98029,98030],{"class":68,"line":138},[66,98031,98032],{"class":76},"y\n",[19,98034,13320],{},[19,98036,98037],{},[3304,98038],{"alt":62,"src":98039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[57,98041,98043],{"className":59,"code":98042,"language":61,"meta":62,"style":62},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[23,98044,98045,98061,98081,98096],{"__ignoreMap":62},[66,98046,98047,98049,98051,98053,98055,98057,98059],{"class":68,"line":69},[66,98048,2799],{"class":76},[66,98050,99],{"class":72},[66,98052,94778],{"class":76},[66,98054,304],{"class":102},[66,98056,2362],{"class":76},[66,98058,519],{"class":102},[66,98060,313],{"class":76},[66,98062,98063,98065,98067,98069,98071,98073,98075,98077,98079],{"class":68,"line":80},[66,98064,2824],{"class":76},[66,98066,99],{"class":72},[66,98068,97977],{"class":76},[66,98070,752],{"class":102},[66,98072,2362],{"class":76},[66,98074,95276],{"class":1234},[66,98076,99],{"class":72},[66,98078,2003],{"class":102},[66,98080,313],{"class":76},[66,98082,98083,98086,98088,98090,98092,98094],{"class":68,"line":112},[66,98084,98085],{"class":76},"np.add(x,",[66,98087,795],{"class":102},[66,98089,2362],{"class":76},[66,98091,94830],{"class":1234},[66,98093,99],{"class":72},[66,98095,95225],{"class":76},[66,98097,98098],{"class":68,"line":129},[66,98099,98100],{"class":758},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,98102,98103],{},"③empty_like()",[19,98105,98106],{},[2141,98107,98108,98109,98114],{},"创建一个",[2141,98110,98111],{},[2141,98112,98113],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,98116,98117,98120],{},[23,98118,98119],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,98122,98123],{},[3304,98124],{"alt":62,"src":98125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[484,98127,98129],{"id":98128},"_264-用法","2.6.4 ？？用法",[19,98131,98132],{},"当想查看一个函数的参数时，可以通过？？来实现",[57,98134,98136],{"className":59,"code":98135,"language":61,"meta":62,"style":62},"np.full??\n",[23,98137,98138],{"__ignoreMap":62},[66,98139,98140,98143],{"class":68,"line":69},[66,98141,98142],{"class":76},"np.full",[66,98144,98145],{"class":79182},"??\n",[484,98147,98149],{"id":98148},"_265-full创建数组","2.6.5 full()创建数组",[57,98151,98153],{"className":59,"code":98152,"language":61,"meta":62,"style":62},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[23,98154,98155,98160],{"__ignoreMap":62},[66,98156,98157],{"class":68,"line":69},[66,98158,98159],{"class":76},"full(shape,fill_value)\n",[66,98161,98162],{"class":68,"line":80},[66,98163,98164],{"class":76},"创建全为某个指定值的数组\n",[19,98166,96306],{},[57,98168,98170],{"className":59,"code":98169,"language":61,"meta":62,"style":62},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[23,98171,98172,98177],{"__ignoreMap":62},[66,98173,98174],{"class":68,"line":69},[66,98175,98176],{"class":758},"#创建一个一维数组,以20进行填充\n",[66,98178,98179,98182,98184,98186,98188],{"class":68,"line":80},[66,98180,98181],{"class":76},"np.full(",[66,98183,790],{"class":102},[66,98185,2362],{"class":76},[66,98187,2679],{"class":102},[66,98189,313],{"class":76},[19,98191,95067],{},[57,98193,98195],{"className":59,"code":98194,"language":61,"meta":62,"style":62},"#创建二维数组\nnp.full((3,5),11)\n",[23,98196,98197,98201],{"__ignoreMap":62},[66,98198,98199],{"class":68,"line":69},[66,98200,95723],{"class":758},[66,98202,98203,98206,98208,98210,98212,98214,98216],{"class":68,"line":80},[66,98204,98205],{"class":76},"np.full((",[66,98207,1520],{"class":102},[66,98209,2362],{"class":76},[66,98211,752],{"class":102},[66,98213,44043],{"class":76},[66,98215,2452],{"class":102},[66,98217,313],{"class":76},[19,98219,98220],{},"③full_like用法",[19,98222,98223],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,98225,98226],{},"这里是指定填充而已",[57,98228,98230],{"className":59,"code":98229,"language":61,"meta":62,"style":62},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[23,98231,98232,98237,98261,98266],{"__ignoreMap":62},[66,98233,98234],{"class":68,"line":69},[66,98235,98236],{"class":758},"#创建一个指定形状数组\n",[66,98238,98239,98241,98243,98245,98247,98249,98251,98253,98255,98257,98259],{"class":68,"line":80},[66,98240,2229],{"class":76},[66,98242,99],{"class":72},[66,98244,94778],{"class":76},[66,98246,304],{"class":102},[66,98248,2362],{"class":76},[66,98250,2312],{"class":102},[66,98252,94783],{"class":76},[66,98254,1076],{"class":102},[66,98256,2362],{"class":76},[66,98258,2404],{"class":102},[66,98260,313],{"class":76},[66,98262,98263],{"class":68,"line":112},[66,98264,98265],{"class":758},"#进行指定填充\n",[66,98267,98268,98271,98273],{"class":68,"line":129},[66,98269,98270],{"class":76},"np.full_like(a,",[66,98272,790],{"class":102},[66,98274,313],{"class":76},[19,98276,13320],{},[19,98278,98279],{},[3304,98280],{"alt":62,"src":98281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[484,98283,98285],{"id":98284},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[23801,98287,98289],{"id":98288},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[57,98291,98293],{"className":59,"code":98292,"language":61,"meta":62,"style":62},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[23,98294,98295,98312],{"__ignoreMap":62},[66,98296,98297,98300,98302,98304,98306,98308,98310],{"class":68,"line":69},[66,98298,98299],{"class":76},"np.eye(",[66,98301,1076],{"class":102},[66,98303,2362],{"class":76},[66,98305,95276],{"class":1234},[66,98307,99],{"class":72},[66,98309,2003],{"class":102},[66,98311,313],{"class":76},[66,98313,98314],{"class":68,"line":80},[66,98315,98316],{"class":758},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[23801,98318,98320],{"id":98319},"_2662-法2identity","2.6.6.2 法2：identity()",[57,98322,98324],{"className":59,"code":98323,"language":61,"meta":62,"style":62},"#identity()\nnp.identity(5,dtype=int)\n",[23,98325,98326,98331],{"__ignoreMap":62},[66,98327,98328],{"class":68,"line":69},[66,98329,98330],{"class":758},"#identity()\n",[66,98332,98333,98336,98338,98340,98342,98344,98346],{"class":68,"line":80},[66,98334,98335],{"class":76},"np.identity(",[66,98337,752],{"class":102},[66,98339,2362],{"class":76},[66,98341,95276],{"class":1234},[66,98343,99],{"class":72},[66,98345,2003],{"class":102},[66,98347,313],{"class":76},[19,98349,98350],{},"两个函数是有区别的",[19,98352,98353],{},[3304,98354],{"alt":62,"src":98355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,98357,98358],{},[3304,98359],{"alt":62,"src":98360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[57,98362,98364],{"className":59,"code":98363,"language":61,"meta":62,"style":62},"# 创建一个 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",[23,98365,98366,98371,98383,98388,98393,98398,98403,98407,98412,98432,98436,98441,98446],{"__ignoreMap":62},[66,98367,98368],{"class":68,"line":69},[66,98369,98370],{"class":758},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[66,98372,98373,98375,98377,98379,98381],{"class":68,"line":80},[66,98374,98299],{"class":76},[66,98376,1520],{"class":102},[66,98378,307],{"class":76},[66,98380,1076],{"class":102},[66,98382,313],{"class":76},[66,98384,98385],{"class":68,"line":112},[66,98386,98387],{"class":758},"# 输出:\n",[66,98389,98390],{"class":68,"line":129},[66,98391,98392],{"class":758},"# [[1. 0. 0. 0.]\n",[66,98394,98395],{"class":68,"line":138},[66,98396,98397],{"class":758},"#  [0. 1. 0. 0.]\n",[66,98399,98400],{"class":68,"line":227},[66,98401,98402],{"class":758},"#  [0. 0. 1. 0.]]\n",[66,98404,98405],{"class":68,"line":236},[66,98406,109],{"emptyLinePlaceholder":108},[66,98408,98409],{"class":68,"line":241},[66,98410,98411],{"class":758},"# 对角线向上偏移1\n",[66,98413,98414,98416,98418,98420,98422,98424,98426,98428,98430],{"class":68,"line":372},[66,98415,98299],{"class":76},[66,98417,1520],{"class":102},[66,98419,307],{"class":76},[66,98421,1076],{"class":102},[66,98423,307],{"class":76},[66,98425,2472],{"class":1234},[66,98427,99],{"class":72},[66,98429,304],{"class":102},[66,98431,313],{"class":76},[66,98433,98434],{"class":68,"line":377},[66,98435,98387],{"class":758},[66,98437,98438],{"class":68,"line":392},[66,98439,98440],{"class":758},"# [[0. 1. 0. 0.]\n",[66,98442,98443],{"class":68,"line":405},[66,98444,98445],{"class":758},"#  [0. 0. 1. 0.]\n",[66,98447,98448],{"class":68,"line":418},[66,98449,98450],{"class":758},"#  [0. 0. 0. 1.]]\n",[484,98452,98454],{"id":98453},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[57,98456,98458],{"className":59,"code":98457,"language":61,"meta":62,"style":62},"#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",[23,98459,98460,98465,98469,98474,98479,98484,98489,98494,98499,98504,98509],{"__ignoreMap":62},[66,98461,98462],{"class":68,"line":69},[66,98463,98464],{"class":758},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[66,98466,98467],{"class":68,"line":80},[66,98468,97473],{"class":356},[66,98470,98471],{"class":68,"line":112},[66,98472,98473],{"class":356},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[66,98475,98476],{"class":68,"line":129},[66,98477,98478],{"class":356},"参数介绍：\n",[66,98480,98481],{"class":68,"line":138},[66,98482,98483],{"class":356},"start：序列的起始值\n",[66,98485,98486],{"class":68,"line":227},[66,98487,98488],{"class":356},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[66,98490,98491],{"class":68,"line":236},[66,98492,98493],{"class":356},"num：要生长的等步长的样本数量，默认为50\n",[66,98495,98496],{"class":68,"line":241},[66,98497,98498],{"class":356},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[66,98500,98501],{"class":68,"line":372},[66,98502,98503],{"class":356},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[66,98505,98506],{"class":68,"line":377},[66,98507,98508],{"class":356},"dtype：ndarry的数据类型\n",[66,98510,98511],{"class":68,"line":392},[66,98512,97473],{"class":356},[19,98514,98515],{},[3304,98516],{"alt":62,"src":98517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,98519,98520],{},"这里num=是可以省略的",[19,98522,98523],{},"也就是下方两行代码结果是一模一样的",[57,98525,98527],{"className":59,"code":98526,"language":61,"meta":62,"style":62},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[23,98528,98529,98546],{"__ignoreMap":62},[66,98530,98531,98534,98536,98538,98540,98542,98544],{"class":68,"line":69},[66,98532,98533],{"class":76},"np.linspace(",[66,98535,304],{"class":102},[66,98537,2362],{"class":76},[66,98539,752],{"class":102},[66,98541,2362],{"class":76},[66,98543,752],{"class":102},[66,98545,313],{"class":76},[66,98547,98548,98550,98552,98554,98556,98558,98560,98562,98564],{"class":68,"line":80},[66,98549,98533],{"class":76},[66,98551,304],{"class":102},[66,98553,2362],{"class":76},[66,98555,752],{"class":102},[66,98557,2362],{"class":76},[66,98559,3499],{"class":1234},[66,98561,99],{"class":72},[66,98563,752],{"class":102},[66,98565,313],{"class":76},[484,98567,98569],{"id":98568},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[57,98571,98573],{"className":59,"code":98572,"language":61,"meta":62,"style":62},"#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",[23,98574,98575,98580,98584,98589,98594,98599,98604,98608,98613,98618,98622],{"__ignoreMap":62},[66,98576,98577],{"class":68,"line":69},[66,98578,98579],{"class":758},"#logspace函数用于创建一个等比数列，格式如下：\n",[66,98581,98582],{"class":68,"line":80},[66,98583,97473],{"class":356},[66,98585,98586],{"class":68,"line":112},[66,98587,98588],{"class":356},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[66,98590,98591],{"class":68,"line":129},[66,98592,98593],{"class":356},"参数为：\n",[66,98595,98596],{"class":68,"line":138},[66,98597,98598],{"class":356},"start:序列的起始位置为：base**start\n",[66,98600,98601],{"class":68,"line":227},[66,98602,98603],{"class":356},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[66,98605,98606],{"class":68,"line":236},[66,98607,98493],{"class":356},[66,98609,98610],{"class":68,"line":241},[66,98611,98612],{"class":356},"endpoint：是否包含 stop 这个值，默认是 True\n",[66,98614,98615],{"class":68,"line":372},[66,98616,98617],{"class":356},"base：对数的底数，默认是 10（常见对数）\n",[66,98619,98620],{"class":68,"line":377},[66,98621,98508],{"class":356},[66,98623,98624],{"class":68,"line":392},[66,98625,97473],{"class":356},[19,98627,98628],{},[3304,98629],{"alt":62,"src":98630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,98632,98633],{},"logspace()函数中的num参数也是可以不写num=的",[19,98635,98636],{},"endpoint是不可以省略的",[1903,98638,98639],{},"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":62,"searchDepth":80,"depth":80,"links":98641},[98642,98646,98651,98655,98659,98660],{"id":97032,"depth":80,"text":97033,"children":98643},[98644,98645],{"id":97036,"depth":112,"text":97037},{"id":97108,"depth":112,"text":97109},{"id":97140,"depth":80,"text":97141,"children":98647},[98648,98649,98650],{"id":97144,"depth":112,"text":97145},{"id":97326,"depth":112,"text":97327},{"id":97404,"depth":112,"text":97405},{"id":97439,"depth":80,"text":97440,"children":98652},[98653,98654],{"id":97443,"depth":112,"text":97444},{"id":97500,"depth":112,"text":97501},{"id":97596,"depth":80,"text":97597,"children":98656},[98657,98658],{"id":97600,"depth":112,"text":97601},{"id":97612,"depth":112,"text":97613},{"id":97646,"depth":80,"text":97647},{"id":97683,"depth":80,"text":97684,"children":98661},[98662,98663,98664,98665,98666,98667,98668,98669],{"id":97687,"depth":112,"text":97688},{"id":97912,"depth":112,"text":97913},{"id":97919,"depth":112,"text":97920},{"id":98128,"depth":112,"text":98129},{"id":98148,"depth":112,"text":98149},{"id":98284,"depth":112,"text":98285},{"id":98453,"depth":112,"text":98454},{"id":98568,"depth":112,"text":98569},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":97024,"description":1926},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":98676,"title":98677,"body":98678,"description":1926,"extension":1927,"meta":98771,"navigation":108,"path":98772,"seo":98773,"stem":98774,"__hash__":98775},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":98679,"toc":98769},[98680,98683,98686,98689,98692,98695,98698,98701,98704,98707,98710,98713,98715,98718,98721,98726,98729,98732,98766],[10,98681,98677],{"id":98682},"_20魔法命令mprun",[19,98684,98685],{},"逐行分析数据内存的使用情况",[19,98687,98688],{},"语法格式：",[19,98690,98691],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,98693,98694],{},"分析结果列如下：",[19,98696,98697],{},"Line行号",[19,98699,98700],{},"Mem usage内存使用大小",[19,98702,98703],{},"increment内存增量",[19,98705,98706],{},"Line content代码内容",[19,98708,98709],{},"补充说明：",[19,98711,98712],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,98714,96979],{},[19,98716,98717],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,98719,98720],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,98722,98723],{},[3304,98724],{"alt":62,"src":98725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,98727,98728],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,98730,98731],{},"这时候需要重新加载模块",[57,98733,98735],{"className":59,"code":98734,"language":61,"meta":62,"style":62},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[23,98736,98737,98742,98749,98754],{"__ignoreMap":62},[66,98738,98739],{"class":68,"line":69},[66,98740,98741],{"class":758},"#重新加载模块\n",[66,98743,98744,98746],{"class":68,"line":80},[66,98745,284],{"class":72},[66,98747,98748],{"class":76}," importlib\n",[66,98750,98751],{"class":68,"line":112},[66,98752,98753],{"class":76},"importlib.reload(mprun_test)\n",[66,98755,98756,98758,98761,98763],{"class":68,"line":129},[66,98757,953],{"class":72},[66,98759,98760],{"class":76},"mprun ",[66,98762,2511],{"class":72},[66,98764,98765],{"class":76},"f mprun_test.fun_test mprun_test.fun_test()\n",[1903,98767,98768],{},"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":62,"searchDepth":80,"depth":80,"links":98770},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":98677,"description":1926},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":98777,"title":98778,"body":98779,"description":1926,"extension":1927,"meta":98796,"navigation":108,"path":98797,"seo":98798,"stem":98799,"__hash__":98800},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":98780,"toc":98794},[98781,98784,98789],[10,98782,98778],{"id":98783},"_3一维数组的索引和切片",[19,98785,98786],{},[3304,98787],{"alt":62,"src":98788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,98790,98791],{},[3304,98792],{"alt":62,"src":98793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":62,"searchDepth":80,"depth":80,"links":98795},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":98778,"description":1926},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":98802,"title":98803,"body":98804,"description":1926,"extension":1927,"meta":99287,"navigation":108,"path":99288,"seo":99289,"stem":99290,"__hash__":99291},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":98805,"toc":99285},[98806,98809,98812,98817,98850,98853,98891,98894,98928,98931,99036,99039,99076,99079,99180,99183,99234,99237,99279,99282],[10,98807,98803],{"id":98808},"_4二维数组的索引与切片",[19,98810,98811],{},"①获取指定单个元素",[19,98813,98814],{},[3304,98815],{"alt":62,"src":98816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[57,98818,98820],{"className":59,"code":98819,"language":61,"meta":62,"style":62},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[23,98821,98822,98827,98832,98837],{"__ignoreMap":62},[66,98823,98824],{"class":68,"line":69},[66,98825,98826],{"class":758},"#获取元素9\n",[66,98828,98829],{"class":68,"line":80},[66,98830,98831],{"class":758},"#先获取所在行，再获取所在列\n",[66,98833,98834],{"class":68,"line":112},[66,98835,98836],{"class":758},"#数组[行索引号，列索引号]\n",[66,98838,98839,98842,98844,98846,98848],{"class":68,"line":129},[66,98840,98841],{"class":76},"a[",[66,98843,304],{"class":102},[66,98845,2362],{"class":76},[66,98847,795],{"class":102},[66,98849,704],{"class":76},[19,98851,98852],{},"②获取整行元素",[57,98854,98856],{"className":59,"code":98855,"language":61,"meta":62,"style":62},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[23,98857,98858,98863,98868,98876,98881],{"__ignoreMap":62},[66,98859,98860],{"class":68,"line":69},[66,98861,98862],{"class":758},"#获取整行 数组[行索引号]\n",[66,98864,98865],{"class":68,"line":80},[66,98866,98867],{"class":758},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[66,98869,98870,98872,98874],{"class":68,"line":112},[66,98871,98841],{"class":76},[66,98873,795],{"class":102},[66,98875,704],{"class":76},[66,98877,98878],{"class":68,"line":129},[66,98879,98880],{"class":758},"#也可以负索引获取一行\n",[66,98882,98883,98885,98887,98889],{"class":68,"line":138},[66,98884,98841],{"class":76},[66,98886,2511],{"class":72},[66,98888,304],{"class":102},[66,98890,704],{"class":76},[19,98892,98893],{},"③获取整列元素",[57,98895,98897],{"className":59,"code":98896,"language":61,"meta":62,"style":62},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[23,98898,98899,98904,98913,98918],{"__ignoreMap":62},[66,98900,98901],{"class":68,"line":69},[66,98902,98903],{"class":758},"#获取整列 数组名[:,列索引]\n",[66,98905,98906,98909,98911],{"class":68,"line":80},[66,98907,98908],{"class":76},"a[:,",[66,98910,795],{"class":102},[66,98912,704],{"class":76},[66,98914,98915],{"class":68,"line":112},[66,98916,98917],{"class":758},"#也可以负索引获取一列\n",[66,98919,98920,98922,98924,98926],{"class":68,"line":129},[66,98921,98908],{"class":76},[66,98923,2511],{"class":72},[66,98925,304],{"class":102},[66,98927,704],{"class":76},[19,98929,98930],{},"④部分行部分列的元素",[57,98932,98934],{"className":59,"code":98933,"language":61,"meta":62,"style":62},"#部分行部分列 数组名[行切片，列切片]\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",[23,98935,98936,98941,98951,98955,98959,98964,98969,98973,98985,98989,98993,98998,99003,99008,99013,99017,99022],{"__ignoreMap":62},[66,98937,98938],{"class":68,"line":69},[66,98939,98940],{"class":758},"#部分行部分列 数组名[行切片，列切片]\n",[66,98942,98943,98946,98948],{"class":68,"line":80},[66,98944,98945],{"class":76},"a[:",[66,98947,795],{"class":102},[66,98949,98950],{"class":76},",:]\n",[66,98952,98953],{"class":68,"line":112},[66,98954,95340],{"class":758},[66,98956,98957],{"class":68,"line":129},[66,98958,95704],{"class":356},[66,98960,98961],{"class":68,"line":138},[66,98962,98963],{"class":356},"array([[ 1,  2,  3,  4,  5,  6],\n",[66,98965,98966],{"class":68,"line":227},[66,98967,98968],{"class":356},"       [ 7,  8,  9, 10, 11, 12]])\n",[66,98970,98971],{"class":68,"line":236},[66,98972,95704],{"class":356},[66,98974,98975,98977,98979,98981,98983],{"class":68,"line":241},[66,98976,98908],{"class":76},[66,98978,304],{"class":102},[66,98980,2838],{"class":76},[66,98982,1076],{"class":102},[66,98984,704],{"class":76},[66,98986,98987],{"class":68,"line":372},[66,98988,95340],{"class":758},[66,98990,98991],{"class":68,"line":377},[66,98992,95704],{"class":356},[66,98994,98995],{"class":68,"line":392},[66,98996,98997],{"class":356},"array([[ 2,  3,  4],\n",[66,98999,99000],{"class":68,"line":405},[66,99001,99002],{"class":356},"       [ 8,  9, 10],\n",[66,99004,99005],{"class":68,"line":418},[66,99006,99007],{"class":356},"       [14, 15, 16],\n",[66,99009,99010],{"class":68,"line":430},[66,99011,99012],{"class":356},"       [20, 21, 22]])\n",[66,99014,99015],{"class":68,"line":438},[66,99016,95704],{"class":356},[66,99018,99019],{"class":68,"line":465},[66,99020,99021],{"class":758},"#对列行同时进行切片，使用了step参数\n",[66,99023,99024,99027,99029,99032,99034],{"class":68,"line":1805},[66,99025,99026],{"class":76},"a[::",[66,99028,795],{"class":102},[66,99030,99031],{"class":76},",::",[66,99033,795],{"class":102},[66,99035,704],{"class":76},[19,99037,99038],{},"⑤同时获取两个元素",[57,99040,99042],{"className":59,"code":99041,"language":61,"meta":62,"style":62},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[23,99043,99044,99049,99054],{"__ignoreMap":62},[66,99045,99046],{"class":68,"line":69},[66,99047,99048],{"class":758},"#同时获取第三行第二列，第四行第一列\n",[66,99050,99051],{"class":68,"line":80},[66,99052,99053],{"class":758},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[66,99055,99056,99059,99061,99063,99065,99067,99069,99071,99073],{"class":68,"line":112},[66,99057,99058],{"class":76},"a[(",[66,99060,795],{"class":102},[66,99062,2362],{"class":76},[66,99064,1520],{"class":102},[66,99066,44034],{"class":76},[66,99068,304],{"class":102},[66,99070,2362],{"class":76},[66,99072,2183],{"class":102},[66,99074,99075],{"class":76},")]\n",[19,99077,99078],{},"⑥切片，对行进行反向获取",[57,99080,99082],{"className":59,"code":99081,"language":61,"meta":62,"style":62},"#切片 对所有行进行反向获取\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",[23,99083,99084,99089,99099,99103,99107,99112,99117,99122,99127,99131,99136,99152,99156,99161,99166,99171,99176],{"__ignoreMap":62},[66,99085,99086],{"class":68,"line":69},[66,99087,99088],{"class":758},"#切片 对所有行进行反向获取\n",[66,99090,99091,99093,99095,99097],{"class":68,"line":80},[66,99092,99026],{"class":76},[66,99094,2511],{"class":72},[66,99096,304],{"class":102},[66,99098,704],{"class":76},[66,99100,99101],{"class":68,"line":112},[66,99102,95340],{"class":758},[66,99104,99105],{"class":68,"line":129},[66,99106,95704],{"class":356},[66,99108,99109],{"class":68,"line":138},[66,99110,99111],{"class":356},"array([[19, 20, 21, 22, 23, 24],\n",[66,99113,99114],{"class":68,"line":227},[66,99115,99116],{"class":356},"       [13, 14, 15, 16, 17, 18],\n",[66,99118,99119],{"class":68,"line":236},[66,99120,99121],{"class":356},"       [ 7,  8,  9, 10, 11, 12],\n",[66,99123,99124],{"class":68,"line":241},[66,99125,99126],{"class":356},"       [ 1,  2,  3,  4,  5,  6]])\n",[66,99128,99129],{"class":68,"line":372},[66,99130,95704],{"class":356},[66,99132,99133],{"class":68,"line":377},[66,99134,99135],{"class":758},"#对行列都进行反向切片获取\n",[66,99137,99138,99140,99142,99144,99146,99148,99150],{"class":68,"line":392},[66,99139,99026],{"class":76},[66,99141,2511],{"class":72},[66,99143,304],{"class":102},[66,99145,99031],{"class":76},[66,99147,2511],{"class":72},[66,99149,304],{"class":102},[66,99151,704],{"class":76},[66,99153,99154],{"class":68,"line":405},[66,99155,95704],{"class":356},[66,99157,99158],{"class":68,"line":418},[66,99159,99160],{"class":356},"array([[24, 23, 22, 21, 20, 19],\n",[66,99162,99163],{"class":68,"line":430},[66,99164,99165],{"class":356},"       [18, 17, 16, 15, 14, 13],\n",[66,99167,99168],{"class":68,"line":438},[66,99169,99170],{"class":356},"       [12, 11, 10,  9,  8,  7],\n",[66,99172,99173],{"class":68,"line":465},[66,99174,99175],{"class":356},"       [ 6,  5,  4,  3,  2,  1]])\n",[66,99177,99178],{"class":68,"line":1805},[66,99179,95704],{"class":356},[19,99181,99182],{},"⑦修改元素",[57,99184,99186],{"className":59,"code":99185,"language":61,"meta":62,"style":62},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[23,99187,99188,99193,99211,99216],{"__ignoreMap":62},[66,99189,99190],{"class":68,"line":69},[66,99191,99192],{"class":758},"#获取前两行和前两列\n",[66,99194,99195,99198,99200,99202,99204,99207,99209],{"class":68,"line":80},[66,99196,99197],{"class":76},"sub_a",[66,99199,99],{"class":72},[66,99201,98945],{"class":76},[66,99203,795],{"class":102},[66,99205,99206],{"class":76},",:",[66,99208,795],{"class":102},[66,99210,704],{"class":76},[66,99212,99213],{"class":68,"line":112},[66,99214,99215],{"class":758},"#修改sub_a第一个元素的值\n",[66,99217,99218,99221,99223,99225,99227,99229,99231],{"class":68,"line":129},[66,99219,99220],{"class":76},"sub_a[",[66,99222,2183],{"class":102},[66,99224,2362],{"class":76},[66,99226,2183],{"class":102},[66,99228,2917],{"class":76},[66,99230,99],{"class":72},[66,99232,99233],{"class":102},"100\n",[19,99235,99236],{},"⑧数组复制copy()",[57,99238,99240],{"className":59,"code":99239,"language":61,"meta":62,"style":62},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[23,99241,99242,99247,99257,99262],{"__ignoreMap":62},[66,99243,99244],{"class":68,"line":69},[66,99245,99246],{"class":758},"#数组复制\n",[66,99248,99249,99252,99254],{"class":68,"line":80},[66,99250,99251],{"class":76},"copy_a",[66,99253,99],{"class":72},[66,99255,99256],{"class":76},"np.copy(sub_a)\n",[66,99258,99259],{"class":68,"line":112},[66,99260,99261],{"class":758},"#修改copy_a后不影响原数组\n",[66,99263,99264,99267,99269,99271,99273,99275,99277],{"class":68,"line":129},[66,99265,99266],{"class":76},"copy_a[",[66,99268,2183],{"class":102},[66,99270,2362],{"class":76},[66,99272,2183],{"class":102},[66,99274,2917],{"class":76},[66,99276,99],{"class":72},[66,99278,99233],{"class":102},[19,99280,99281],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[1903,99283,99284],{},"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":62,"searchDepth":80,"depth":80,"links":99286},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":98803,"description":1926},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":99293,"title":99294,"body":99295,"description":1926,"extension":1927,"meta":99787,"navigation":108,"path":99788,"seo":99789,"stem":99790,"__hash__":99791},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":99296,"toc":99779},[99297,99300,99304,99307,99310,99363,99366,99391,99394,99413,99433,99436,99452,99456,99502,99506,99548,99552,99555,99558,99561,99564,99567,99629,99689,99693,99696,99753,99757,99762,99771,99776],[10,99298,99294],{"id":99299},"_5改变数组的维度",[14,99301,99303],{"id":99302},"_51-使用reshape","5.1 使用reshape()",[19,99305,99306],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,99308,99309],{},"①一维数组转换为二维数组",[57,99311,99313],{"className":59,"code":99312,"language":61,"meta":62,"style":62},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[23,99314,99315,99331,99336,99341,99346],{"__ignoreMap":62},[66,99316,99317,99319,99321,99323,99325,99327,99329],{"class":68,"line":69},[66,99318,2229],{"class":76},[66,99320,99],{"class":72},[66,99322,94778],{"class":76},[66,99324,304],{"class":102},[66,99326,2362],{"class":76},[66,99328,2502],{"class":102},[66,99330,313],{"class":76},[66,99332,99333],{"class":68,"line":80},[66,99334,99335],{"class":758},"#将一维数组进行转换\n",[66,99337,99338],{"class":68,"line":112},[66,99339,99340],{"class":758},"#注意点：元素个数不可以变\n",[66,99342,99343],{"class":68,"line":129},[66,99344,99345],{"class":758},"#转换维度要保持一致，不一致就异常！！！\n",[66,99347,99348,99350,99352,99355,99357,99359,99361],{"class":68,"line":138},[66,99349,95082],{"class":76},[66,99351,99],{"class":72},[66,99353,99354],{"class":76},"a.reshape(",[66,99356,795],{"class":102},[66,99358,2362],{"class":76},[66,99360,519],{"class":102},[66,99362,313],{"class":76},[19,99364,99365],{},"②一维数组转换为三维数组",[57,99367,99369],{"className":59,"code":99368,"language":61,"meta":62,"style":62},"aaa=a.reshape(2,3,2)\n",[23,99370,99371],{"__ignoreMap":62},[66,99372,99373,99375,99377,99379,99381,99383,99385,99387,99389],{"class":68,"line":69},[66,99374,97296],{"class":76},[66,99376,99],{"class":72},[66,99378,99354],{"class":76},[66,99380,795],{"class":102},[66,99382,2362],{"class":76},[66,99384,1520],{"class":102},[66,99386,2362],{"class":76},[66,99388,795],{"class":102},[66,99390,313],{"class":76},[19,99392,99393],{},"③二维数组转化为一维数组",[57,99395,99397],{"className":59,"code":99396,"language":61,"meta":62,"style":62},"#知道元素个数：\naa.reshape(12)\n",[23,99398,99399,99404],{"__ignoreMap":62},[66,99400,99401],{"class":68,"line":69},[66,99402,99403],{"class":758},"#知道元素个数：\n",[66,99405,99406,99409,99411],{"class":68,"line":80},[66,99407,99408],{"class":76},"aa.reshape(",[66,99410,2477],{"class":102},[66,99412,313],{"class":76},[57,99414,99416],{"className":59,"code":99415,"language":61,"meta":62,"style":62},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[23,99417,99418,99423],{"__ignoreMap":62},[66,99419,99420],{"class":68,"line":69},[66,99421,99422],{"class":758},"#不知道元素个数，参数传递-1\n",[66,99424,99425,99427,99429,99431],{"class":68,"line":80},[66,99426,99408],{"class":76},[66,99428,2511],{"class":72},[66,99430,304],{"class":102},[66,99432,313],{"class":76},[19,99434,99435],{},"④三维数组转换为一维数组",[57,99437,99439],{"className":59,"code":99438,"language":61,"meta":62,"style":62},"aaa.reshape(-1)\n",[23,99440,99441],{"__ignoreMap":62},[66,99442,99443,99446,99448,99450],{"class":68,"line":69},[66,99444,99445],{"class":76},"aaa.reshape(",[66,99447,2511],{"class":72},[66,99449,304],{"class":102},[66,99451,313],{"class":76},[14,99453,99455],{"id":99454},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[57,99457,99459],{"className":59,"code":99458,"language":61,"meta":62,"style":62},"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",[23,99460,99461,99488,99493,99497],{"__ignoreMap":62},[66,99462,99463,99465,99467,99469,99471,99473,99475,99477,99479,99481,99483,99485],{"class":68,"line":69},[66,99464,95082],{"class":76},[66,99466,99],{"class":72},[66,99468,94778],{"class":76},[66,99470,304],{"class":102},[66,99472,2362],{"class":76},[66,99474,2502],{"class":102},[66,99476,94783],{"class":76},[66,99478,795],{"class":102},[66,99480,2362],{"class":76},[66,99482,519],{"class":102},[66,99484,2413],{"class":76},[66,99486,99487],{"class":758},"#转换为2行6列的数组\n",[66,99489,99490],{"class":68,"line":80},[66,99491,99492],{"class":76},"aa.revel()\n",[66,99494,99495],{"class":68,"line":112},[66,99496,95340],{"class":758},[66,99498,99499],{"class":68,"line":129},[66,99500,99501],{"class":758},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,99503,99505],{"id":99504},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[57,99507,99509],{"className":59,"code":99508,"language":61,"meta":62,"style":62},"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",[23,99510,99511,99535,99540,99544],{"__ignoreMap":62},[66,99512,99513,99515,99517,99519,99521,99523,99525,99527,99529,99531,99533],{"class":68,"line":69},[66,99514,95082],{"class":76},[66,99516,99],{"class":72},[66,99518,94778],{"class":76},[66,99520,304],{"class":102},[66,99522,2362],{"class":76},[66,99524,2502],{"class":102},[66,99526,94783],{"class":76},[66,99528,795],{"class":102},[66,99530,2362],{"class":76},[66,99532,519],{"class":102},[66,99534,313],{"class":76},[66,99536,99537],{"class":68,"line":80},[66,99538,99539],{"class":76},"aa.flatten()\n",[66,99541,99542],{"class":68,"line":112},[66,99543,95340],{"class":758},[66,99545,99546],{"class":68,"line":129},[66,99547,99501],{"class":758},[14,99549,99551],{"id":99550},"_54-使用resize","5.4 使用resize()",[19,99553,99554],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,99556,99557],{},"通过resize方法可以改变数组的维度",[19,99559,99560],{},"#resize修改数组维度",[19,99562,99563],{},"#以元组的形式指定形状",[19,99565,99566],{},"#改变的是原数组",[57,99568,99570],{"className":59,"code":99569,"language":61,"meta":62,"style":62},"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",[23,99571,99572,99588,99608,99621,99625],{"__ignoreMap":62},[66,99573,99574,99576,99578,99580,99582,99584,99586],{"class":68,"line":69},[66,99575,2229],{"class":76},[66,99577,99],{"class":72},[66,99579,94778],{"class":76},[66,99581,304],{"class":102},[66,99583,2362],{"class":76},[66,99585,2502],{"class":102},[66,99587,313],{"class":76},[66,99589,99590,99593,99595,99597,99599,99601,99603,99605],{"class":68,"line":80},[66,99591,99592],{"class":76},"a.shape",[66,99594,99],{"class":72},[66,99596,348],{"class":76},[66,99598,795],{"class":102},[66,99600,2362],{"class":76},[66,99602,519],{"class":102},[66,99604,2413],{"class":76},[66,99606,99607],{"class":758},"#改变了原数组\n",[66,99609,99610,99612,99614,99617,99619],{"class":68,"line":112},[66,99611,2229],{"class":76},[66,99613,99],{"class":72},[66,99615,99616],{"class":76},"resize((",[66,99618,2477],{"class":102},[66,99620,360],{"class":76},[66,99622,99623],{"class":68,"line":129},[66,99624,95340],{"class":758},[66,99626,99627],{"class":68,"line":138},[66,99628,99501],{"class":758},[57,99630,99632],{"className":59,"code":99631,"language":61,"meta":62,"style":62},"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",[23,99633,99634,99647,99651,99655,99660,99665,99670,99675,99680,99685],{"__ignoreMap":62},[66,99635,99636,99639,99641,99643,99645],{"class":68,"line":69},[66,99637,99638],{"class":76},"a.resize((",[66,99640,519],{"class":102},[66,99642,2362],{"class":76},[66,99644,795],{"class":102},[66,99646,360],{"class":76},[66,99648,99649],{"class":68,"line":80},[66,99650,95340],{"class":758},[66,99652,99653],{"class":68,"line":112},[66,99654,95704],{"class":356},[66,99656,99657],{"class":68,"line":129},[66,99658,99659],{"class":356},"array([[ 1,  2],\n",[66,99661,99662],{"class":68,"line":138},[66,99663,99664],{"class":356},"       [ 3,  4],\n",[66,99666,99667],{"class":68,"line":227},[66,99668,99669],{"class":356},"       [ 5,  6],\n",[66,99671,99672],{"class":68,"line":236},[66,99673,99674],{"class":356},"       [ 7,  8],\n",[66,99676,99677],{"class":68,"line":241},[66,99678,99679],{"class":356},"       [ 9, 10],\n",[66,99681,99682],{"class":68,"line":372},[66,99683,99684],{"class":356},"       [11, 12]])\n",[66,99686,99687],{"class":68,"line":377},[66,99688,95704],{"class":356},[14,99690,99692],{"id":99691},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,99694,99695],{},"改变了原数组",[57,99697,99699],{"className":59,"code":99698,"language":61,"meta":62,"style":62},"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",[23,99700,99701,99717,99733,99737,99741,99745,99749],{"__ignoreMap":62},[66,99702,99703,99705,99707,99709,99711,99713,99715],{"class":68,"line":69},[66,99704,2229],{"class":76},[66,99706,99],{"class":72},[66,99708,94778],{"class":76},[66,99710,304],{"class":102},[66,99712,2362],{"class":76},[66,99714,2502],{"class":102},[66,99716,313],{"class":76},[66,99718,99719,99721,99723,99725,99727,99729,99731],{"class":68,"line":80},[66,99720,99592],{"class":76},[66,99722,99],{"class":72},[66,99724,348],{"class":76},[66,99726,795],{"class":102},[66,99728,2362],{"class":76},[66,99730,519],{"class":102},[66,99732,313],{"class":76},[66,99734,99735],{"class":68,"line":112},[66,99736,95340],{"class":758},[66,99738,99739],{"class":68,"line":129},[66,99740,95704],{"class":356},[66,99742,99743],{"class":68,"line":138},[66,99744,98963],{"class":356},[66,99746,99747],{"class":68,"line":227},[66,99748,98968],{"class":356},[66,99750,99751],{"class":68,"line":236},[66,99752,95704],{"class":356},[14,99754,99756],{"id":99755},"_56-重要比较","5.6 重要比较：",[19,99758,99759],{},[3304,99760],{"alt":62,"src":99761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,99763,99764,99765,99767,99768,99770],{},"口诀：NumPy 函数要么用 ",[23,99766,97738],{},"，要么用 ",[23,99769,33289],{},"，创建结构用 shape，造数据用 size",[19,99772,99773],{},[3304,99774],{"alt":62,"src":99775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[1903,99777,99778],{},"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":62,"searchDepth":80,"depth":80,"links":99780},[99781,99782,99783,99784,99785,99786],{"id":99302,"depth":80,"text":99303},{"id":99454,"depth":80,"text":99455},{"id":99504,"depth":80,"text":99505},{"id":99550,"depth":80,"text":99551},{"id":99691,"depth":80,"text":99692},{"id":99755,"depth":80,"text":99756},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":99294,"description":1926},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":99793,"title":99794,"body":99795,"description":1926,"extension":1927,"meta":100867,"navigation":108,"path":100868,"seo":100869,"stem":100870,"__hash__":100871},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":99796,"toc":100861},[99797,99800,99804,99807,99810,99813,99878,99881,99921,99924,100006,100009,100014,100036,100038,100043,100048,100051,100054,100209,100212,100414,100418,100421,100424,100492,100494,100499,100502,100505,100585,100589,100592,100594,100667,100669,100674,100676,100756,100760,100763,100766,100769,100772,100775,100778,100858],[10,99798,99794],{"id":99799},"_6数组的拼接",[14,99801,99803],{"id":99802},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,99805,99806],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,99808,99809],{},"函数内部传两个数列构成的数列或者元组",[19,99811,99812],{},"①一维数组的拼接",[57,99814,99816],{"className":59,"code":99815,"language":61,"meta":62,"style":62},"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",[23,99817,99818,99838,99858,99863,99868,99873],{"__ignoreMap":62},[66,99819,99820,99822,99824,99826,99828,99830,99832,99834,99836],{"class":68,"line":69},[66,99821,2229],{"class":76},[66,99823,99],{"class":72},[66,99825,94800],{"class":76},[66,99827,304],{"class":102},[66,99829,2362],{"class":76},[66,99831,795],{"class":102},[66,99833,2362],{"class":76},[66,99835,1520],{"class":102},[66,99837,6473],{"class":76},[66,99839,99840,99842,99844,99846,99848,99850,99852,99854,99856],{"class":68,"line":80},[66,99841,2253],{"class":76},[66,99843,99],{"class":72},[66,99845,94800],{"class":76},[66,99847,1076],{"class":102},[66,99849,2362],{"class":76},[66,99851,752],{"class":102},[66,99853,2362],{"class":76},[66,99855,519],{"class":102},[66,99857,6473],{"class":76},[66,99859,99860],{"class":68,"line":112},[66,99861,99862],{"class":758},"#调用concatenate进行数组拼接\n",[66,99864,99865],{"class":68,"line":129},[66,99866,99867],{"class":76},"np.concatenate((a,b))\n",[66,99869,99870],{"class":68,"line":138},[66,99871,99872],{"class":758},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[66,99874,99875],{"class":68,"line":227},[66,99876,99877],{"class":758},"#np.concatenate([a,b])\n",[19,99879,99880],{},"②一维多个数组拼接",[57,99882,99884],{"className":59,"code":99883,"language":61,"meta":62,"style":62},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[23,99885,99886,99891,99911,99916],{"__ignoreMap":62},[66,99887,99888],{"class":68,"line":69},[66,99889,99890],{"class":758},"#也可以多个数组进行拼接\n",[66,99892,99893,99895,99897,99899,99901,99903,99905,99907,99909],{"class":68,"line":80},[66,99894,2278],{"class":76},[66,99896,99],{"class":72},[66,99898,94800],{"class":76},[66,99900,790],{"class":102},[66,99902,2362],{"class":76},[66,99904,2452],{"class":102},[66,99906,2362],{"class":76},[66,99908,2502],{"class":102},[66,99910,6473],{"class":76},[66,99912,99913],{"class":68,"line":112},[66,99914,99915],{"class":76},"c\n",[66,99917,99918],{"class":68,"line":129},[66,99919,99920],{"class":76},"np.concatenate((a,b,c))\n",[19,99922,99923],{},"③二维数组拼接",[57,99925,99927],{"className":59,"code":99926,"language":61,"meta":62,"style":62},"#二维数组使用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",[23,99928,99929,99934,99958,99983,99988,99993],{"__ignoreMap":62},[66,99930,99931],{"class":68,"line":69},[66,99932,99933],{"class":758},"#二维数组使用concatenate进行拼接\n",[66,99935,99936,99938,99940,99942,99944,99946,99948,99950,99952,99954,99956],{"class":68,"line":80},[66,99937,95082],{"class":76},[66,99939,99],{"class":72},[66,99941,94778],{"class":76},[66,99943,304],{"class":102},[66,99945,2362],{"class":76},[66,99947,2502],{"class":102},[66,99949,94783],{"class":76},[66,99951,1520],{"class":102},[66,99953,2362],{"class":76},[66,99955,1076],{"class":102},[66,99957,313],{"class":76},[66,99959,99960,99963,99965,99967,99969,99971,99973,99975,99977,99979,99981],{"class":68,"line":112},[66,99961,99962],{"class":76},"bb",[66,99964,99],{"class":72},[66,99966,94778],{"class":76},[66,99968,884],{"class":102},[66,99970,2362],{"class":76},[66,99972,2621],{"class":102},[66,99974,94783],{"class":76},[66,99976,1520],{"class":102},[66,99978,2362],{"class":76},[66,99980,1076],{"class":102},[66,99982,313],{"class":76},[66,99984,99985],{"class":68,"line":129},[66,99986,99987],{"class":758},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[66,99989,99990],{"class":68,"line":138},[66,99991,99992],{"class":758},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[66,99994,99995,99998,100000,100002,100004],{"class":68,"line":227},[66,99996,99997],{"class":76},"np.concatenate((aa,bb),",[66,99999,49298],{"class":1234},[66,100001,99],{"class":72},[66,100003,2183],{"class":102},[66,100005,313],{"class":76},[19,100007,100008],{},"结果：",[19,100010,100011],{},[3304,100012],{"alt":62,"src":100013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[57,100015,100017],{"className":59,"code":100016,"language":61,"meta":62,"style":62},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[23,100018,100019,100024],{"__ignoreMap":62},[66,100020,100021],{"class":68,"line":69},[66,100022,100023],{"class":758},"#指定axis为1进行拼接\n",[66,100025,100026,100028,100030,100032,100034],{"class":68,"line":80},[66,100027,99997],{"class":76},[66,100029,49298],{"class":1234},[66,100031,99],{"class":72},[66,100033,304],{"class":102},[66,100035,313],{"class":76},[19,100037,100008],{},[19,100039,100040],{},[3304,100041],{"alt":62,"src":100042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,100044,100045],{},[2141,100046,100047],{},"二维数组总结：0竖着方向，1横着方向",[19,100049,100050],{},"④三维数组拼接",[19,100052,100053],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[57,100055,100057],{"className":59,"code":100056,"language":61,"meta":62,"style":62},"#两个三行六列\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",[23,100058,100059,100064,100092,100122,100127,100144,100149,100154,100159,100176,100181,100186,100191,100204],{"__ignoreMap":62},[66,100060,100061],{"class":68,"line":69},[66,100062,100063],{"class":758},"#两个三行六列\n",[66,100065,100066,100068,100070,100072,100074,100076,100078,100080,100082,100084,100086,100088,100090],{"class":68,"line":80},[66,100067,97296],{"class":76},[66,100069,99],{"class":72},[66,100071,94778],{"class":76},[66,100073,304],{"class":102},[66,100075,2362],{"class":76},[66,100077,2312],{"class":102},[66,100079,94783],{"class":76},[66,100081,795],{"class":102},[66,100083,2362],{"class":76},[66,100085,1520],{"class":102},[66,100087,2362],{"class":76},[66,100089,519],{"class":102},[66,100091,313],{"class":76},[66,100093,100094,100097,100099,100101,100103,100105,100108,100110,100112,100114,100116,100118,100120],{"class":68,"line":112},[66,100095,100096],{"class":76},"bbb",[66,100098,99],{"class":72},[66,100100,94778],{"class":76},[66,100102,884],{"class":102},[66,100104,2362],{"class":76},[66,100106,100107],{"class":102},"137",[66,100109,94783],{"class":76},[66,100111,795],{"class":102},[66,100113,2362],{"class":76},[66,100115,1520],{"class":102},[66,100117,2362],{"class":76},[66,100119,519],{"class":102},[66,100121,313],{"class":76},[66,100123,100124],{"class":68,"line":129},[66,100125,100126],{"class":758},"#axis=0\n",[66,100128,100129,100131,100133,100136,100138,100140,100142],{"class":68,"line":138},[66,100130,2674],{"class":76},[66,100132,99],{"class":72},[66,100134,100135],{"class":76},"np.concatenate((aaa,bbb),",[66,100137,49298],{"class":1234},[66,100139,99],{"class":72},[66,100141,2183],{"class":102},[66,100143,313],{"class":76},[66,100145,100146],{"class":68,"line":227},[66,100147,100148],{"class":76},"s.shape\n",[66,100150,100151],{"class":68,"line":236},[66,100152,100153],{"class":758},"#输出：(4,3,6)\n",[66,100155,100156],{"class":68,"line":241},[66,100157,100158],{"class":758},"#axis=1\n",[66,100160,100161,100164,100166,100168,100170,100172,100174],{"class":68,"line":372},[66,100162,100163],{"class":76},"ss",[66,100165,99],{"class":72},[66,100167,100135],{"class":76},[66,100169,49298],{"class":1234},[66,100171,99],{"class":72},[66,100173,304],{"class":102},[66,100175,313],{"class":76},[66,100177,100178],{"class":68,"line":377},[66,100179,100180],{"class":76},"ss.shape\n",[66,100182,100183],{"class":68,"line":392},[66,100184,100185],{"class":758},"#输出：(2,6,6)\n",[66,100187,100188],{"class":68,"line":405},[66,100189,100190],{"class":758},"#axis=2\n",[66,100192,100193,100195,100197,100199,100201],{"class":68,"line":418},[66,100194,100135],{"class":76},[66,100196,49298],{"class":1234},[66,100198,99],{"class":72},[66,100200,795],{"class":102},[66,100202,100203],{"class":76},").shape\n",[66,100205,100206],{"class":68,"line":430},[66,100207,100208],{"class":758},"#输出：（2，3，12）\n",[19,100210,100211],{},"⑤四维数组拼接",[57,100213,100215],{"className":59,"code":100214,"language":61,"meta":62,"style":62},"#两个三行六列\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",[23,100216,100217,100221,100249,100277,100302,100328,100332,100345,100350,100354,100366,100371,100375,100387,100392,100397,100409],{"__ignoreMap":62},[66,100218,100219],{"class":68,"line":69},[66,100220,100063],{"class":758},[66,100222,100223,100225,100227,100229,100231,100233,100235,100237,100239,100241,100243,100245,100247],{"class":68,"line":80},[66,100224,97296],{"class":76},[66,100226,99],{"class":72},[66,100228,94778],{"class":76},[66,100230,304],{"class":102},[66,100232,2362],{"class":76},[66,100234,2312],{"class":102},[66,100236,94783],{"class":76},[66,100238,795],{"class":102},[66,100240,2362],{"class":76},[66,100242,1520],{"class":102},[66,100244,2362],{"class":76},[66,100246,519],{"class":102},[66,100248,313],{"class":76},[66,100250,100251,100253,100255,100257,100259,100261,100263,100265,100267,100269,100271,100273,100275],{"class":68,"line":112},[66,100252,100096],{"class":76},[66,100254,99],{"class":72},[66,100256,94778],{"class":76},[66,100258,884],{"class":102},[66,100260,2362],{"class":76},[66,100262,100107],{"class":102},[66,100264,94783],{"class":76},[66,100266,795],{"class":102},[66,100268,2362],{"class":76},[66,100270,1520],{"class":102},[66,100272,2362],{"class":76},[66,100274,519],{"class":102},[66,100276,313],{"class":76},[66,100278,100279,100282,100284,100286,100288,100290,100292,100294,100296,100298,100300],{"class":68,"line":129},[66,100280,100281],{"class":76},"aaaa",[66,100283,99],{"class":72},[66,100285,99445],{"class":76},[66,100287,795],{"class":102},[66,100289,2362],{"class":76},[66,100291,1520],{"class":102},[66,100293,2362],{"class":76},[66,100295,1520],{"class":102},[66,100297,2362],{"class":76},[66,100299,795],{"class":102},[66,100301,313],{"class":76},[66,100303,100304,100307,100309,100312,100314,100316,100318,100320,100322,100324,100326],{"class":68,"line":138},[66,100305,100306],{"class":76},"bbbb",[66,100308,99],{"class":72},[66,100310,100311],{"class":76},"bbb.reshape(",[66,100313,795],{"class":102},[66,100315,2362],{"class":76},[66,100317,1520],{"class":102},[66,100319,2362],{"class":76},[66,100321,1520],{"class":102},[66,100323,2362],{"class":76},[66,100325,795],{"class":102},[66,100327,313],{"class":76},[66,100329,100330],{"class":68,"line":227},[66,100331,100126],{"class":758},[66,100333,100334,100337,100339,100341,100343],{"class":68,"line":236},[66,100335,100336],{"class":76},"np.concatenate((aaaa,bbbb),",[66,100338,49298],{"class":1234},[66,100340,99],{"class":72},[66,100342,2183],{"class":102},[66,100344,100203],{"class":76},[66,100346,100347],{"class":68,"line":241},[66,100348,100349],{"class":758},"#结果：（4，3，3，2）\n",[66,100351,100352],{"class":68,"line":372},[66,100353,100158],{"class":758},[66,100355,100356,100358,100360,100362,100364],{"class":68,"line":377},[66,100357,100336],{"class":76},[66,100359,49298],{"class":1234},[66,100361,99],{"class":72},[66,100363,304],{"class":102},[66,100365,100203],{"class":76},[66,100367,100368],{"class":68,"line":392},[66,100369,100370],{"class":758},"#结果：（2，6，3，2）\n",[66,100372,100373],{"class":68,"line":405},[66,100374,100190],{"class":758},[66,100376,100377,100379,100381,100383,100385],{"class":68,"line":418},[66,100378,100336],{"class":76},[66,100380,49298],{"class":1234},[66,100382,99],{"class":72},[66,100384,795],{"class":102},[66,100386,100203],{"class":76},[66,100388,100389],{"class":68,"line":430},[66,100390,100391],{"class":758},"#结果：（2，3，6，2）\n",[66,100393,100394],{"class":68,"line":438},[66,100395,100396],{"class":758},"#axis=3\n",[66,100398,100399,100401,100403,100405,100407],{"class":68,"line":465},[66,100400,100336],{"class":76},[66,100402,49298],{"class":1234},[66,100404,99],{"class":72},[66,100406,1520],{"class":102},[66,100408,100203],{"class":76},[66,100410,100411],{"class":68,"line":1805},[66,100412,100413],{"class":758},"#结果：（2，3，3，4）\n",[14,100415,100417],{"id":100416},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,100419,100420],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,100422,100423],{},"①二维数组",[57,100425,100427],{"className":59,"code":100426,"language":61,"meta":62,"style":62},"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",[23,100428,100429,100453,100477,100482,100487],{"__ignoreMap":62},[66,100430,100431,100433,100435,100437,100439,100441,100443,100445,100447,100449,100451],{"class":68,"line":69},[66,100432,95082],{"class":76},[66,100434,99],{"class":72},[66,100436,94778],{"class":76},[66,100438,304],{"class":102},[66,100440,2362],{"class":76},[66,100442,2502],{"class":102},[66,100444,94783],{"class":76},[66,100446,1520],{"class":102},[66,100448,2362],{"class":76},[66,100450,1076],{"class":102},[66,100452,313],{"class":76},[66,100454,100455,100457,100459,100461,100463,100465,100467,100469,100471,100473,100475],{"class":68,"line":80},[66,100456,99962],{"class":76},[66,100458,99],{"class":72},[66,100460,94778],{"class":76},[66,100462,884],{"class":102},[66,100464,2362],{"class":76},[66,100466,2621],{"class":102},[66,100468,94783],{"class":76},[66,100470,1520],{"class":102},[66,100472,2362],{"class":76},[66,100474,1076],{"class":102},[66,100476,313],{"class":76},[66,100478,100479],{"class":68,"line":112},[66,100480,100481],{"class":76},"np.hstack((aa,bb))\n",[66,100483,100484],{"class":68,"line":129},[66,100485,100486],{"class":758},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[66,100488,100489],{"class":68,"line":138},[66,100490,100491],{"class":758},"#np.hstack([aa,bb])\n",[19,100493,100008],{},[19,100495,100496],{},[3304,100497],{"alt":62,"src":100498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,100500,100501],{},"等效于concatenate()函数中axis=1时的情况",[19,100503,100504],{},"②三维数组",[57,100506,100508],{"className":59,"code":100507,"language":61,"meta":62,"style":62},"#两个三行六列\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",[23,100509,100510,100514,100542,100570,100575,100580],{"__ignoreMap":62},[66,100511,100512],{"class":68,"line":69},[66,100513,100063],{"class":758},[66,100515,100516,100518,100520,100522,100524,100526,100528,100530,100532,100534,100536,100538,100540],{"class":68,"line":80},[66,100517,97296],{"class":76},[66,100519,99],{"class":72},[66,100521,94778],{"class":76},[66,100523,304],{"class":102},[66,100525,2362],{"class":76},[66,100527,2312],{"class":102},[66,100529,94783],{"class":76},[66,100531,795],{"class":102},[66,100533,2362],{"class":76},[66,100535,1520],{"class":102},[66,100537,2362],{"class":76},[66,100539,519],{"class":102},[66,100541,313],{"class":76},[66,100543,100544,100546,100548,100550,100552,100554,100556,100558,100560,100562,100564,100566,100568],{"class":68,"line":112},[66,100545,100096],{"class":76},[66,100547,99],{"class":72},[66,100549,94778],{"class":76},[66,100551,884],{"class":102},[66,100553,2362],{"class":76},[66,100555,100107],{"class":102},[66,100557,94783],{"class":76},[66,100559,795],{"class":102},[66,100561,2362],{"class":76},[66,100563,1520],{"class":102},[66,100565,2362],{"class":76},[66,100567,519],{"class":102},[66,100569,313],{"class":76},[66,100571,100572],{"class":68,"line":129},[66,100573,100574],{"class":758},"#使用hstack\n",[66,100576,100577],{"class":68,"line":138},[66,100578,100579],{"class":76},"np.hstack((aaa,bbb)).shape\n",[66,100581,100582],{"class":68,"line":227},[66,100583,100584],{"class":758},"#输出：（2，6，6）\n",[14,100586,100588],{"id":100587},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,100590,100591],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,100593,100423],{},[57,100595,100597],{"className":59,"code":100596,"language":61,"meta":62,"style":62},"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",[23,100598,100599,100623,100647,100652,100657,100662],{"__ignoreMap":62},[66,100600,100601,100603,100605,100607,100609,100611,100613,100615,100617,100619,100621],{"class":68,"line":69},[66,100602,95082],{"class":76},[66,100604,99],{"class":72},[66,100606,94778],{"class":76},[66,100608,304],{"class":102},[66,100610,2362],{"class":76},[66,100612,2502],{"class":102},[66,100614,94783],{"class":76},[66,100616,1520],{"class":102},[66,100618,2362],{"class":76},[66,100620,1076],{"class":102},[66,100622,313],{"class":76},[66,100624,100625,100627,100629,100631,100633,100635,100637,100639,100641,100643,100645],{"class":68,"line":80},[66,100626,99962],{"class":76},[66,100628,99],{"class":72},[66,100630,94778],{"class":76},[66,100632,884],{"class":102},[66,100634,2362],{"class":76},[66,100636,2621],{"class":102},[66,100638,94783],{"class":76},[66,100640,1520],{"class":102},[66,100642,2362],{"class":76},[66,100644,1076],{"class":102},[66,100646,313],{"class":76},[66,100648,100649],{"class":68,"line":112},[66,100650,100651],{"class":758},"#vstack 垂直方向进行堆叠\n",[66,100653,100654],{"class":68,"line":129},[66,100655,100656],{"class":76},"np.vstack((aa,bb))\n",[66,100658,100659],{"class":68,"line":138},[66,100660,100661],{"class":758},"#与hstack传的参数类似，等价于：\n",[66,100663,100664],{"class":68,"line":227},[66,100665,100666],{"class":76},"np.vstack([aa,bb])\n",[19,100668,100008],{},[19,100670,100671],{},[3304,100672],{"alt":62,"src":100673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,100675,100504],{},[57,100677,100679],{"className":59,"code":100678,"language":61,"meta":62,"style":62},"#两个三行六列\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",[23,100680,100681,100685,100713,100741,100746,100751],{"__ignoreMap":62},[66,100682,100683],{"class":68,"line":69},[66,100684,100063],{"class":758},[66,100686,100687,100689,100691,100693,100695,100697,100699,100701,100703,100705,100707,100709,100711],{"class":68,"line":80},[66,100688,97296],{"class":76},[66,100690,99],{"class":72},[66,100692,94778],{"class":76},[66,100694,304],{"class":102},[66,100696,2362],{"class":76},[66,100698,2312],{"class":102},[66,100700,94783],{"class":76},[66,100702,795],{"class":102},[66,100704,2362],{"class":76},[66,100706,1520],{"class":102},[66,100708,2362],{"class":76},[66,100710,519],{"class":102},[66,100712,313],{"class":76},[66,100714,100715,100717,100719,100721,100723,100725,100727,100729,100731,100733,100735,100737,100739],{"class":68,"line":112},[66,100716,100096],{"class":76},[66,100718,99],{"class":72},[66,100720,94778],{"class":76},[66,100722,884],{"class":102},[66,100724,2362],{"class":76},[66,100726,100107],{"class":102},[66,100728,94783],{"class":76},[66,100730,795],{"class":102},[66,100732,2362],{"class":76},[66,100734,1520],{"class":102},[66,100736,2362],{"class":76},[66,100738,519],{"class":102},[66,100740,313],{"class":76},[66,100742,100743],{"class":68,"line":129},[66,100744,100745],{"class":758},"#使用vstack\n",[66,100747,100748],{"class":68,"line":138},[66,100749,100750],{"class":76},"np.vstack((aaa,bbb)).shape\n",[66,100752,100753],{"class":68,"line":227},[66,100754,100755],{"class":758},"#输出：（4，3，6）\n",[14,100757,100759],{"id":100758},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,100761,100762],{},"该方法是三维数组特有的方法",[19,100764,100765],{},"也就是说",[19,100767,100768],{},"一维数组拼接方法用：concatenate()",[19,100770,100771],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,100773,100774],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,100776,100777],{},"四维数组及多维数组只能用concatenate进行拼接",[57,100779,100781],{"className":59,"code":100780,"language":61,"meta":62,"style":62},"#两个三行六列\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",[23,100782,100783,100787,100815,100843,100848,100853],{"__ignoreMap":62},[66,100784,100785],{"class":68,"line":69},[66,100786,100063],{"class":758},[66,100788,100789,100791,100793,100795,100797,100799,100801,100803,100805,100807,100809,100811,100813],{"class":68,"line":80},[66,100790,97296],{"class":76},[66,100792,99],{"class":72},[66,100794,94778],{"class":76},[66,100796,304],{"class":102},[66,100798,2362],{"class":76},[66,100800,2312],{"class":102},[66,100802,94783],{"class":76},[66,100804,795],{"class":102},[66,100806,2362],{"class":76},[66,100808,1520],{"class":102},[66,100810,2362],{"class":76},[66,100812,519],{"class":102},[66,100814,313],{"class":76},[66,100816,100817,100819,100821,100823,100825,100827,100829,100831,100833,100835,100837,100839,100841],{"class":68,"line":112},[66,100818,100096],{"class":76},[66,100820,99],{"class":72},[66,100822,94778],{"class":76},[66,100824,884],{"class":102},[66,100826,2362],{"class":76},[66,100828,100107],{"class":102},[66,100830,94783],{"class":76},[66,100832,795],{"class":102},[66,100834,2362],{"class":76},[66,100836,1520],{"class":102},[66,100838,2362],{"class":76},[66,100840,519],{"class":102},[66,100842,313],{"class":76},[66,100844,100845],{"class":68,"line":129},[66,100846,100847],{"class":758},"#使用dstack\n",[66,100849,100850],{"class":68,"line":138},[66,100851,100852],{"class":76},"np.dstack((aaa,bbb)).shape\n",[66,100854,100855],{"class":68,"line":227},[66,100856,100857],{"class":758},"#结果：（2，3，12）\n",[1903,100859,100860],{},"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":62,"searchDepth":80,"depth":80,"links":100862},[100863,100864,100865,100866],{"id":99802,"depth":80,"text":99803},{"id":100416,"depth":80,"text":100417},{"id":100587,"depth":80,"text":100588},{"id":100758,"depth":80,"text":100759},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":99794,"description":1926},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":100873,"title":100874,"body":100875,"description":1926,"extension":1927,"meta":101150,"navigation":108,"path":101151,"seo":101152,"stem":101153,"__hash__":101154},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":100876,"toc":101148},[100877,100880,100883,100977,100980,100983,100986,100989,100992,100995,100998,101001,101145],[10,100878,100874],{"id":100879},"_7数组转置",[19,100881,100882],{},"使用transpose()函数",[57,100884,100886],{"className":59,"code":100885,"language":61,"meta":62,"style":62},"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",[23,100887,100888,100898,100922,100927,100932,100937,100942,100950,100954,100958,100963,100968,100973],{"__ignoreMap":62},[66,100889,100890,100892,100894,100896],{"class":68,"line":69},[66,100891,284],{"class":72},[66,100893,33173],{"class":76},[66,100895,33176],{"class":72},[66,100897,33179],{"class":76},[66,100899,100900,100902,100904,100906,100908,100910,100912,100914,100916,100918,100920],{"class":68,"line":80},[66,100901,2229],{"class":76},[66,100903,99],{"class":72},[66,100905,33509],{"class":76},[66,100907,304],{"class":102},[66,100909,2362],{"class":76},[66,100911,2502],{"class":102},[66,100913,94783],{"class":76},[66,100915,1076],{"class":102},[66,100917,2362],{"class":76},[66,100919,1520],{"class":102},[66,100921,313],{"class":76},[66,100923,100924],{"class":68,"line":112},[66,100925,100926],{"class":758},"#二维数组转置\n",[66,100928,100929],{"class":68,"line":129},[66,100930,100931],{"class":758},"#调用transpose()函数\n",[66,100933,100934],{"class":68,"line":138},[66,100935,100936],{"class":76},"a.transpose()\n",[66,100938,100939],{"class":68,"line":227},[66,100940,100941],{"class":758},"#对于二维数组也可以采用.T来实现\n",[66,100943,100944,100947],{"class":68,"line":236},[66,100945,100946],{"class":76},"a.T",[66,100948,100949],{"class":758},"#与上述代码一样\n",[66,100951,100952],{"class":68,"line":241},[66,100953,95340],{"class":758},[66,100955,100956],{"class":68,"line":372},[66,100957,95704],{"class":356},[66,100959,100960],{"class":68,"line":377},[66,100961,100962],{"class":356},"array([[ 1,  4,  7, 10],\n",[66,100964,100965],{"class":68,"line":392},[66,100966,100967],{"class":356},"       [ 2,  5,  8, 11],\n",[66,100969,100970],{"class":68,"line":405},[66,100971,100972],{"class":356},"       [ 3,  6,  9, 12]])\n",[66,100974,100975],{"class":68,"line":418},[66,100976,95704],{"class":356},[19,100978,100979],{},"也可以使用np.transpose()的形式",[19,100981,100982],{},"#多维数组进行转置 np.transpose()",[19,100984,100985],{},"#对二维数组也可以使用np.transpose()进行转置",[19,100987,100988],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,100990,100991],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,100993,100994],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,100996,100997],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,100999,101000],{},"四维及以上的数组也是一样的道理",[57,101002,101004],{"className":59,"code":101003,"language":61,"meta":62,"style":62},"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",[23,101005,101006,101034,101039,101044,101049,101067,101072,101104,101109,101114,101119,101140],{"__ignoreMap":62},[66,101007,101008,101010,101012,101014,101016,101018,101020,101022,101024,101026,101028,101030,101032],{"class":68,"line":69},[66,101009,2799],{"class":76},[66,101011,99],{"class":72},[66,101013,94778],{"class":76},[66,101015,304],{"class":102},[66,101017,2362],{"class":76},[66,101019,2312],{"class":102},[66,101021,94783],{"class":76},[66,101023,1520],{"class":102},[66,101025,2362],{"class":76},[66,101027,519],{"class":102},[66,101029,2362],{"class":76},[66,101031,795],{"class":102},[66,101033,313],{"class":76},[66,101035,101036],{"class":68,"line":80},[66,101037,101038],{"class":76},"x.shape\n",[66,101040,101041],{"class":68,"line":112},[66,101042,101043],{"class":758},"#结果：（3,6,2）\n",[66,101045,101046],{"class":68,"line":129},[66,101047,101048],{"class":758},"#使用np.transpose()进行转置 变为(2,6,3)\n",[66,101050,101051,101054,101056,101058,101060,101062,101064],{"class":68,"line":138},[66,101052,101053],{"class":76},"np.transpose(x,(",[66,101055,795],{"class":102},[66,101057,2362],{"class":76},[66,101059,304],{"class":102},[66,101061,2362],{"class":76},[66,101063,2183],{"class":102},[66,101065,101066],{"class":76},")).shape\n",[66,101068,101069],{"class":68,"line":227},[66,101070,101071],{"class":758},"#结果：(2,6,3)\n",[66,101073,101074,101076,101078,101080,101082,101084,101086,101088,101090,101092,101094,101096,101098,101100,101102],{"class":68,"line":236},[66,101075,100281],{"class":76},[66,101077,99],{"class":72},[66,101079,94778],{"class":76},[66,101081,304],{"class":102},[66,101083,2362],{"class":76},[66,101085,2312],{"class":102},[66,101087,94783],{"class":76},[66,101089,1520],{"class":102},[66,101091,2362],{"class":76},[66,101093,795],{"class":102},[66,101095,2362],{"class":76},[66,101097,304],{"class":102},[66,101099,2362],{"class":76},[66,101101,519],{"class":102},[66,101103,313],{"class":76},[66,101105,101106],{"class":68,"line":241},[66,101107,101108],{"class":76},"aaaa.shape\n",[66,101110,101111],{"class":68,"line":372},[66,101112,101113],{"class":758},"#结果：（3，2，1，6）\n",[66,101115,101116],{"class":68,"line":377},[66,101117,101118],{"class":758},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[66,101120,101121,101124,101126,101128,101130,101132,101134,101136,101138],{"class":68,"line":392},[66,101122,101123],{"class":76},"np.transpose(aaaa,(",[66,101125,304],{"class":102},[66,101127,2362],{"class":76},[66,101129,795],{"class":102},[66,101131,2362],{"class":76},[66,101133,2183],{"class":102},[66,101135,2362],{"class":76},[66,101137,1520],{"class":102},[66,101139,101066],{"class":76},[66,101141,101142],{"class":68,"line":405},[66,101143,101144],{"class":758},"#结果：(2,1,3,6)\n",[1903,101146,101147],{},"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":62,"searchDepth":80,"depth":80,"links":101149},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":100874,"description":1926},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":101156,"title":101157,"body":101158,"description":1926,"extension":1927,"meta":101892,"navigation":108,"path":101893,"seo":101894,"stem":101895,"__hash__":101896},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":101159,"toc":101890},[101160,101163,101166,101169,101172,101175,101178,101181,101184,101293,101296,101299,101887],[10,101161,101157],{"id":101162},"_8数组分割",[19,101164,101165],{},"split分割",[19,101167,101168],{},"numpy.split(ary,indics_or_sections,axis)",[19,101170,101171],{},"解释：",[19,101173,101174],{},"ary:被分割的数组",[19,101176,101177],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,101179,101180],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,101182,101183],{},"①一维数组的分割",[57,101185,101187],{"className":59,"code":101186,"language":61,"meta":62,"style":62},"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",[23,101188,101189,101205,101210,101219,101223,101228,101236,101240,101245,101250,101263,101267,101272,101284,101288],{"__ignoreMap":62},[66,101190,101191,101193,101195,101197,101199,101201,101203],{"class":68,"line":69},[66,101192,2229],{"class":76},[66,101194,99],{"class":72},[66,101196,94778],{"class":76},[66,101198,304],{"class":102},[66,101200,2362],{"class":76},[66,101202,2404],{"class":102},[66,101204,313],{"class":76},[66,101206,101207],{"class":68,"line":80},[66,101208,101209],{"class":758},"#如果传入整数，必须能够平分，否则会报错\n",[66,101211,101212,101215,101217],{"class":68,"line":112},[66,101213,101214],{"class":76},"np.split(a,",[66,101216,795],{"class":102},[66,101218,313],{"class":76},[66,101220,101221],{"class":68,"line":129},[66,101222,95340],{"class":758},[66,101224,101225],{"class":68,"line":138},[66,101226,101227],{"class":758},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[66,101229,101230,101232,101234],{"class":68,"line":227},[66,101231,101214],{"class":76},[66,101233,1076],{"class":102},[66,101235,313],{"class":76},[66,101237,101238],{"class":68,"line":236},[66,101239,95340],{"class":758},[66,101241,101242],{"class":68,"line":241},[66,101243,101244],{"class":758},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[66,101246,101247],{"class":68,"line":372},[66,101248,101249],{"class":758},"#传入数组\n",[66,101251,101252,101255,101257,101259,101261],{"class":68,"line":377},[66,101253,101254],{"class":76},"np.split(a,[",[66,101256,1520],{"class":102},[66,101258,2362],{"class":76},[66,101260,752],{"class":102},[66,101262,6473],{"class":76},[66,101264,101265],{"class":68,"line":392},[66,101266,95340],{"class":758},[66,101268,101269],{"class":68,"line":405},[66,101270,101271],{"class":758},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[66,101273,101274,101276,101278,101280,101282],{"class":68,"line":418},[66,101275,101254],{"class":76},[66,101277,752],{"class":102},[66,101279,2362],{"class":76},[66,101281,2353],{"class":102},[66,101283,6473],{"class":76},[66,101285,101286],{"class":68,"line":430},[66,101287,95340],{"class":758},[66,101289,101290],{"class":68,"line":438},[66,101291,101292],{"class":758},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,101294,101295],{},"②二维数组的分割",[19,101297,101298],{},"使用split()",[57,101300,101302],{"className":59,"code":101301,"language":61,"meta":62,"style":62},"#二维数组分割\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",[23,101303,101304,101309,101333,101338,101347,101351,101355,101360,101365,101370,101375,101380,101385,101390,101394,101407,101411,101415,101419,101423,101427,101432,101437,101442,101446,101451,101467,101471,101475,101480,101485,101490,101495,101500,101505,101510,101515,101520,101525,101530,101535,101540,101545,101550,101555,101560,101565,101569,101573,101593,101597,101601,101606,101611,101616,101621,101626,101631,101636,101641,101646,101651,101656,101661,101666,101671,101676,101681,101686,101691,101695,101700,101709,101713,101717,101721,101725,101729,101733,101737,101741,101745,101754,101758,101762,101766,101770,101774,101778,101782,101786,101790,101794,101798,101802,101806,101810,101814,101818,101822,101826,101830,101834,101838,101851,101855,101859,101863,101867,101871,101875,101879,101883],{"__ignoreMap":62},[66,101305,101306],{"class":68,"line":69},[66,101307,101308],{"class":758},"#二维数组分割\n",[66,101310,101311,101313,101315,101317,101319,101321,101323,101325,101327,101329,101331],{"class":68,"line":80},[66,101312,95082],{"class":76},[66,101314,99],{"class":72},[66,101316,94778],{"class":76},[66,101318,304],{"class":102},[66,101320,2362],{"class":76},[66,101322,2312],{"class":102},[66,101324,94783],{"class":76},[66,101326,519],{"class":102},[66,101328,2362],{"class":76},[66,101330,519],{"class":102},[66,101332,313],{"class":76},[66,101334,101335],{"class":68,"line":112},[66,101336,101337],{"class":758},"#默认axis=0  传入整数平均分,按行来的\n",[66,101339,101340,101343,101345],{"class":68,"line":129},[66,101341,101342],{"class":76},"np.split(aa,",[66,101344,1520],{"class":102},[66,101346,313],{"class":76},[66,101348,101349],{"class":68,"line":138},[66,101350,97539],{"class":758},[66,101352,101353],{"class":68,"line":227},[66,101354,95704],{"class":356},[66,101356,101357],{"class":68,"line":236},[66,101358,101359],{"class":356},"[array([[ 1,  2,  3,  4,  5,  6],\n",[66,101361,101362],{"class":68,"line":241},[66,101363,101364],{"class":356},"        [ 7,  8,  9, 10, 11, 12]]),\n",[66,101366,101367],{"class":68,"line":372},[66,101368,101369],{"class":356}," array([[13, 14, 15, 16, 17, 18],\n",[66,101371,101372],{"class":68,"line":377},[66,101373,101374],{"class":356},"        [19, 20, 21, 22, 23, 24]]),\n",[66,101376,101377],{"class":68,"line":392},[66,101378,101379],{"class":356}," array([[25, 26, 27, 28, 29, 30],\n",[66,101381,101382],{"class":68,"line":405},[66,101383,101384],{"class":356},"        [31, 32, 33, 34, 35, 36]])]\n",[66,101386,101387],{"class":68,"line":418},[66,101388,101389],{"class":356}," '''\n",[66,101391,101392],{"class":68,"line":430},[66,101393,101249],{"class":758},[66,101395,101396,101399,101401,101403,101405],{"class":68,"line":438},[66,101397,101398],{"class":76},"np.split(aa,[",[66,101400,795],{"class":102},[66,101402,2362],{"class":76},[66,101404,752],{"class":102},[66,101406,6473],{"class":76},[66,101408,101409],{"class":68,"line":465},[66,101410,97539],{"class":758},[66,101412,101413],{"class":68,"line":1805},[66,101414,95704],{"class":356},[66,101416,101417],{"class":68,"line":1817},[66,101418,101359],{"class":356},[66,101420,101421],{"class":68,"line":1822},[66,101422,101364],{"class":356},[66,101424,101425],{"class":68,"line":1829},[66,101426,101369],{"class":356},[66,101428,101429],{"class":68,"line":3529},[66,101430,101431],{"class":356},"        [19, 20, 21, 22, 23, 24],\n",[66,101433,101434],{"class":68,"line":3557},[66,101435,101436],{"class":356},"        [25, 26, 27, 28, 29, 30]]),\n",[66,101438,101439],{"class":68,"line":3562},[66,101440,101441],{"class":356}," array([[31, 32, 33, 34, 35, 36]])]\n",[66,101443,101444],{"class":68,"line":3579},[66,101445,95704],{"class":356},[66,101447,101448],{"class":68,"line":3584},[66,101449,101450],{"class":758},"#axis=1 按照列来分\n",[66,101452,101453,101455,101457,101459,101461,101463,101465],{"class":68,"line":3589},[66,101454,101342],{"class":76},[66,101456,1520],{"class":102},[66,101458,2362],{"class":76},[66,101460,49298],{"class":1234},[66,101462,99],{"class":72},[66,101464,304],{"class":102},[66,101466,313],{"class":76},[66,101468,101469],{"class":68,"line":3594},[66,101470,97539],{"class":758},[66,101472,101473],{"class":68,"line":3608},[66,101474,95704],{"class":356},[66,101476,101477],{"class":68,"line":3613},[66,101478,101479],{"class":356},"[array([[ 1,  2],\n",[66,101481,101482],{"class":68,"line":4401},[66,101483,101484],{"class":356},"        [ 7,  8],\n",[66,101486,101487],{"class":68,"line":4415},[66,101488,101489],{"class":356},"        [13, 14],\n",[66,101491,101492],{"class":68,"line":4423},[66,101493,101494],{"class":356},"        [19, 20],\n",[66,101496,101497],{"class":68,"line":4428},[66,101498,101499],{"class":356},"        [25, 26],\n",[66,101501,101502],{"class":68,"line":4434},[66,101503,101504],{"class":356},"        [31, 32]]),\n",[66,101506,101507],{"class":68,"line":4440},[66,101508,101509],{"class":356}," array([[ 3,  4],\n",[66,101511,101512],{"class":68,"line":4445},[66,101513,101514],{"class":356},"        [ 9, 10],\n",[66,101516,101517],{"class":68,"line":9759},[66,101518,101519],{"class":356},"        [15, 16],\n",[66,101521,101522],{"class":68,"line":9783},[66,101523,101524],{"class":356},"        [21, 22],\n",[66,101526,101527],{"class":68,"line":9788},[66,101528,101529],{"class":356},"        [27, 28],\n",[66,101531,101532],{"class":68,"line":9794},[66,101533,101534],{"class":356},"        [33, 34]]),\n",[66,101536,101537],{"class":68,"line":9821},[66,101538,101539],{"class":356}," array([[ 5,  6],\n",[66,101541,101542],{"class":68,"line":9826},[66,101543,101544],{"class":356},"        [11, 12],\n",[66,101546,101547],{"class":68,"line":9832},[66,101548,101549],{"class":356},"        [17, 18],\n",[66,101551,101552],{"class":68,"line":9844},[66,101553,101554],{"class":356},"        [23, 24],\n",[66,101556,101557],{"class":68,"line":9856},[66,101558,101559],{"class":356},"        [29, 30],\n",[66,101561,101562],{"class":68,"line":9868},[66,101563,101564],{"class":356},"        [35, 36]])]\n",[66,101566,101567],{"class":68,"line":11523},[66,101568,101389],{"class":356},[66,101570,101571],{"class":68,"line":11548},[66,101572,101249],{"class":758},[66,101574,101575,101577,101579,101581,101583,101585,101587,101589,101591],{"class":68,"line":11571},[66,101576,101398],{"class":76},[66,101578,304],{"class":102},[66,101580,2362],{"class":76},[66,101582,795],{"class":102},[66,101584,43396],{"class":76},[66,101586,49298],{"class":1234},[66,101588,99],{"class":72},[66,101590,304],{"class":102},[66,101592,313],{"class":76},[66,101594,101595],{"class":68,"line":11595},[66,101596,95340],{"class":758},[66,101598,101599],{"class":68,"line":11600},[66,101600,95704],{"class":356},[66,101602,101603],{"class":68,"line":11605},[66,101604,101605],{"class":356},"[array([[ 1],\n",[66,101607,101608],{"class":68,"line":11610},[66,101609,101610],{"class":356},"        [ 7],\n",[66,101612,101613],{"class":68,"line":11619},[66,101614,101615],{"class":356},"        [13],\n",[66,101617,101618],{"class":68,"line":11624},[66,101619,101620],{"class":356},"        [19],\n",[66,101622,101623],{"class":68,"line":11630},[66,101624,101625],{"class":356},"        [25],\n",[66,101627,101628],{"class":68,"line":11651},[66,101629,101630],{"class":356},"        [31]]),\n",[66,101632,101633],{"class":68,"line":11657},[66,101634,101635],{"class":356}," array([[ 2],\n",[66,101637,101638],{"class":68,"line":11671},[66,101639,101640],{"class":356},"        [ 8],\n",[66,101642,101643],{"class":68,"line":11677},[66,101644,101645],{"class":356},"        [14],\n",[66,101647,101648],{"class":68,"line":11704},[66,101649,101650],{"class":356},"        [20],\n",[66,101652,101653],{"class":68,"line":11713},[66,101654,101655],{"class":356},"        [26],\n",[66,101657,101658],{"class":68,"line":11719},[66,101659,101660],{"class":356},"        [32]]),\n",[66,101662,101663],{"class":68,"line":11727},[66,101664,101665],{"class":356}," array([[ 3,  4,  5,  6],\n",[66,101667,101668],{"class":68,"line":11732},[66,101669,101670],{"class":356},"        [ 9, 10, 11, 12],\n",[66,101672,101673],{"class":68,"line":18407},[66,101674,101675],{"class":356},"        [15, 16, 17, 18],\n",[66,101677,101678],{"class":68,"line":18413},[66,101679,101680],{"class":356},"        [21, 22, 23, 24],\n",[66,101682,101683],{"class":68,"line":18436},[66,101684,101685],{"class":356},"        [27, 28, 29, 30],\n",[66,101687,101688],{"class":68,"line":18442},[66,101689,101690],{"class":356},"        [33, 34, 35, 36]])]\n",[66,101692,101693],{"class":68,"line":18465},[66,101694,95704],{"class":356},[66,101696,101697],{"class":68,"line":18479},[66,101698,101699],{"class":758},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[66,101701,101702,101705,101707],{"class":68,"line":18499},[66,101703,101704],{"class":76},"np.vsplit(aa,",[66,101706,1520],{"class":102},[66,101708,313],{"class":76},[66,101710,101711],{"class":68,"line":18505},[66,101712,95340],{"class":758},[66,101714,101715],{"class":68,"line":18516},[66,101716,95704],{"class":356},[66,101718,101719],{"class":68,"line":18539},[66,101720,101359],{"class":356},[66,101722,101723],{"class":68,"line":18561},[66,101724,101364],{"class":356},[66,101726,101727],{"class":68,"line":18566},[66,101728,101369],{"class":356},[66,101730,101731],{"class":68,"line":18572},[66,101732,101374],{"class":356},[66,101734,101735],{"class":68,"line":18586},[66,101736,101379],{"class":356},[66,101738,101739],{"class":68,"line":18599},[66,101740,101384],{"class":356},[66,101742,101743],{"class":68,"line":18604},[66,101744,95704],{"class":356},[66,101746,101747,101750,101752],{"class":68,"line":18618},[66,101748,101749],{"class":76},"np.hsplit(aa,",[66,101751,1520],{"class":102},[66,101753,313],{"class":76},[66,101755,101756],{"class":68,"line":18623},[66,101757,95340],{"class":758},[66,101759,101760],{"class":68,"line":18629},[66,101761,95704],{"class":356},[66,101763,101764],{"class":68,"line":18634},[66,101765,101479],{"class":356},[66,101767,101768],{"class":68,"line":18648},[66,101769,101484],{"class":356},[66,101771,101772],{"class":68,"line":18653},[66,101773,101489],{"class":356},[66,101775,101776],{"class":68,"line":18658},[66,101777,101494],{"class":356},[66,101779,101780],{"class":68,"line":18672},[66,101781,101499],{"class":356},[66,101783,101784],{"class":68,"line":18684},[66,101785,101504],{"class":356},[66,101787,101788],{"class":68,"line":18689},[66,101789,101509],{"class":356},[66,101791,101792],{"class":68,"line":18702},[66,101793,101514],{"class":356},[66,101795,101796],{"class":68,"line":18707},[66,101797,101519],{"class":356},[66,101799,101800],{"class":68,"line":18712},[66,101801,101524],{"class":356},[66,101803,101804],{"class":68,"line":18717},[66,101805,101529],{"class":356},[66,101807,101808],{"class":68,"line":18730},[66,101809,101534],{"class":356},[66,101811,101812],{"class":68,"line":18735},[66,101813,101539],{"class":356},[66,101815,101816],{"class":68,"line":34423},[66,101817,101544],{"class":356},[66,101819,101820],{"class":68,"line":34429},[66,101821,101549],{"class":356},[66,101823,101824],{"class":68,"line":34435},[66,101825,101554],{"class":356},[66,101827,101828],{"class":68,"line":34441},[66,101829,101559],{"class":356},[66,101831,101832],{"class":68,"line":34447},[66,101833,101564],{"class":356},[66,101835,101836],{"class":68,"line":34458},[66,101837,95704],{"class":356},[66,101839,101840,101843,101845,101847,101849],{"class":68,"line":34464},[66,101841,101842],{"class":76},"np.vsplit(aa,[",[66,101844,795],{"class":102},[66,101846,2362],{"class":76},[66,101848,752],{"class":102},[66,101850,6473],{"class":76},[66,101852,101853],{"class":68,"line":34484},[66,101854,95340],{"class":758},[66,101856,101857],{"class":68,"line":34490},[66,101858,95704],{"class":356},[66,101860,101861],{"class":68,"line":34501},[66,101862,101359],{"class":356},[66,101864,101865],{"class":68,"line":34507},[66,101866,101364],{"class":356},[66,101868,101869],{"class":68,"line":34513},[66,101870,101369],{"class":356},[66,101872,101873],{"class":68,"line":34519},[66,101874,101431],{"class":356},[66,101876,101877],{"class":68,"line":34525},[66,101878,101436],{"class":356},[66,101880,101881],{"class":68,"line":34531},[66,101882,101441],{"class":356},[66,101884,101885],{"class":68,"line":34537},[66,101886,101389],{"class":356},[1903,101888,101889],{},"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":62,"searchDepth":80,"depth":80,"links":101891},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":101157,"description":1926},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":101898,"title":101899,"body":101900,"description":1926,"extension":1927,"meta":102393,"navigation":108,"path":102394,"seo":102395,"stem":102396,"__hash__":102397},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":101901,"toc":102384},[101902,101905,101908,101932,101936,101995,102047,102051,102053,102089,102143,102145,102183,102254,102258,102263,102267,102270,102303,102306,102310,102313,102316,102319,102322,102327,102331,102334,102337,102340,102343,102348,102352,102357,102360,102381],[10,101903,101899],{"id":101904},"_9数学函数",[19,101906,101907],{},"补充回顾：python的列表推导式",[57,101909,101911],{"className":59,"code":101910,"language":61,"meta":62,"style":62},"[1\u002Fi for i in a]\n",[23,101912,101913],{"__ignoreMap":62},[66,101914,101915,101917,101919,101921,101923,101925,101927,101929],{"class":68,"line":69},[66,101916,2869],{"class":76},[66,101918,304],{"class":102},[66,101920,2563],{"class":72},[66,101922,96],{"class":76},[66,101924,502],{"class":72},[66,101926,117],{"class":76},[66,101928,507],{"class":72},[66,101930,101931],{"class":76}," a]\n",[14,101933,101935],{"id":101934},"_91-求倒数","9.1 求倒数",[57,101937,101939],{"className":59,"code":101938,"language":61,"meta":62,"style":62},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[23,101940,101941,101946,101974,101986],{"__ignoreMap":62},[66,101942,101943],{"class":68,"line":69},[66,101944,101945],{"class":758},"#数组求倒数\n",[66,101947,101948,101950,101952,101954,101956,101958,101960,101962,101964,101966,101968,101970,101972],{"class":68,"line":80},[66,101949,2229],{"class":76},[66,101951,99],{"class":72},[66,101953,2869],{"class":76},[66,101955,304],{"class":102},[66,101957,2362],{"class":76},[66,101959,795],{"class":102},[66,101961,2362],{"class":76},[66,101963,1520],{"class":102},[66,101965,2362],{"class":76},[66,101967,1076],{"class":102},[66,101969,2362],{"class":76},[66,101971,752],{"class":102},[66,101973,704],{"class":76},[66,101975,101976,101978,101980,101983],{"class":68,"line":112},[66,101977,2253],{"class":76},[66,101979,99],{"class":72},[66,101981,101982],{"class":76},"np.array(a)",[66,101984,101985],{"class":758},"#将列表转换为数组\n",[66,101987,101988,101990,101992],{"class":68,"line":129},[66,101989,304],{"class":102},[66,101991,2563],{"class":72},[66,101993,101994],{"class":76},"b\n",[57,101996,101998],{"className":59,"code":101997,"language":61,"meta":62,"style":62},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[23,101999,102000,102028,102037,102042],{"__ignoreMap":62},[66,102001,102002,102004,102006,102008,102010,102012,102014,102016,102018,102020,102022,102024,102026],{"class":68,"line":69},[66,102003,2229],{"class":76},[66,102005,99],{"class":72},[66,102007,2869],{"class":76},[66,102009,304],{"class":102},[66,102011,2362],{"class":76},[66,102013,795],{"class":102},[66,102015,2362],{"class":76},[66,102017,1520],{"class":102},[66,102019,2362],{"class":76},[66,102021,1076],{"class":102},[66,102023,2362],{"class":76},[66,102025,752],{"class":102},[66,102027,704],{"class":76},[66,102029,102030,102032,102034],{"class":68,"line":80},[66,102031,2253],{"class":76},[66,102033,99],{"class":72},[66,102035,102036],{"class":76},"np.array(a)\n",[66,102038,102039],{"class":68,"line":112},[66,102040,102041],{"class":758},"#调用numpy中的函数reciprocal()\n",[66,102043,102044],{"class":68,"line":129},[66,102045,102046],{"class":76},"np.reciprocal(b)\n",[14,102048,102050],{"id":102049},"_92-求平方","9.2 求平方",[19,102052,96306],{},[57,102054,102056],{"className":59,"code":102055,"language":61,"meta":62,"style":62},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[23,102057,102058,102063,102068,102084],{"__ignoreMap":62},[66,102059,102060],{"class":68,"line":69},[66,102061,102062],{"class":758},"#square()，求平方\n",[66,102064,102065],{"class":68,"line":80},[66,102066,102067],{"class":758},"#一维数组\n",[66,102069,102070,102072,102074,102076,102078,102080,102082],{"class":68,"line":112},[66,102071,2229],{"class":76},[66,102073,99],{"class":72},[66,102075,94778],{"class":76},[66,102077,304],{"class":102},[66,102079,2362],{"class":76},[66,102081,790],{"class":102},[66,102083,313],{"class":76},[66,102085,102086],{"class":68,"line":129},[66,102087,102088],{"class":76},"np.square(a)\n",[57,102090,102092],{"className":59,"code":102091,"language":61,"meta":62,"style":62},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[23,102093,102094,102099,102104,102125],{"__ignoreMap":62},[66,102095,102096],{"class":68,"line":69},[66,102097,102098],{"class":758},"#或者通过循环遍历的形式来计算\n",[66,102100,102101],{"class":68,"line":80},[66,102102,102103],{"class":758},"#这是一个列表\n",[66,102105,102106,102109,102111,102113,102115,102117,102119,102122],{"class":68,"line":112},[66,102107,102108],{"class":76},"[i",[66,102110,1208],{"class":72},[66,102112,96],{"class":76},[66,102114,502],{"class":72},[66,102116,117],{"class":76},[66,102118,507],{"class":72},[66,102120,102121],{"class":76}," a]",[66,102123,102124],{"class":758},"#这个求完之后在数列当中\n",[66,102126,102127,102130,102132,102134,102136,102138,102140],{"class":68,"line":129},[66,102128,102129],{"class":76},"np.array([i",[66,102131,1208],{"class":72},[66,102133,96],{"class":76},[66,102135,502],{"class":72},[66,102137,117],{"class":76},[66,102139,507],{"class":72},[66,102141,102142],{"class":76}," a])\n",[19,102144,95067],{},[57,102146,102148],{"className":59,"code":102147,"language":61,"meta":62,"style":62},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[23,102149,102150,102154,102178],{"__ignoreMap":62},[66,102151,102152],{"class":68,"line":69},[66,102153,95077],{"class":758},[66,102155,102156,102158,102160,102162,102164,102166,102168,102170,102172,102174,102176],{"class":68,"line":80},[66,102157,95082],{"class":76},[66,102159,99],{"class":72},[66,102161,94778],{"class":76},[66,102163,304],{"class":102},[66,102165,2362],{"class":76},[66,102167,2502],{"class":102},[66,102169,94783],{"class":76},[66,102171,1076],{"class":102},[66,102173,2362],{"class":76},[66,102175,1520],{"class":102},[66,102177,313],{"class":76},[66,102179,102180],{"class":68,"line":112},[66,102181,102182],{"class":76},"np.square(aa)\n",[57,102184,102186],{"className":59,"code":102185,"language":61,"meta":62,"style":62},"#传统的方式\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",[23,102187,102188,102193,102202,102218,102234,102249],{"__ignoreMap":62},[66,102189,102190],{"class":68,"line":69},[66,102191,102192],{"class":758},"#传统的方式\n",[66,102194,102195,102197,102199],{"class":68,"line":80},[66,102196,99962],{"class":76},[66,102198,99],{"class":72},[66,102200,102201],{"class":76},"np.empty_like(aa)\n",[66,102203,102204,102206,102208,102210,102212,102214,102216],{"class":68,"line":112},[66,102205,502],{"class":72},[66,102207,117],{"class":76},[66,102209,507],{"class":72},[66,102211,510],{"class":102},[66,102213,348],{"class":76},[66,102215,1076],{"class":102},[66,102217,522],{"class":76},[66,102219,102220,102222,102224,102226,102228,102230,102232],{"class":68,"line":129},[66,102221,1083],{"class":72},[66,102223,1086],{"class":76},[66,102225,507],{"class":72},[66,102227,510],{"class":102},[66,102229,348],{"class":76},[66,102231,1520],{"class":102},[66,102233,522],{"class":76},[66,102235,102236,102239,102241,102244,102246],{"class":68,"line":138},[66,102237,102238],{"class":76},"        bb[i,j]",[66,102240,99],{"class":72},[66,102242,102243],{"class":76},"aa[i,j]",[66,102245,1208],{"class":72},[66,102247,102248],{"class":76},"aa[i,j]\n",[66,102250,102251],{"class":68,"line":227},[66,102252,102253],{"class":76},"bb\n",[14,102255,102257],{"id":102256},"_93-求各元素的符号","9.3 求各元素的符号",[19,102259,102260],{},[3304,102261],{"alt":62,"src":102262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,102264,102266],{"id":102265},"_94-modf函数","9.4 modf函数",[19,102268,102269],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[57,102271,102273],{"className":59,"code":102272,"language":61,"meta":62,"style":62},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[23,102274,102275,102298],{"__ignoreMap":62},[66,102276,102277,102279,102281,102283,102285,102287,102289,102291,102293,102296],{"class":68,"line":69},[66,102278,2229],{"class":76},[66,102280,99],{"class":72},[66,102282,94778],{"class":76},[66,102284,2511],{"class":72},[66,102286,790],{"class":102},[66,102288,2362],{"class":76},[66,102290,790],{"class":102},[66,102292,2362],{"class":76},[66,102294,102295],{"class":102},"0.3",[66,102297,313],{"class":76},[66,102299,102300],{"class":68,"line":80},[66,102301,102302],{"class":76},"np.modf(a)\n",[19,102304,102305],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,102307,102309],{"id":102308},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,102311,102312],{},"np.cell()",[19,102314,102315],{},"np.floor()",[19,102317,102318],{},"np.rint()",[19,102320,102321],{},"对各元素分别向上取整、向下取整、四舍五入",[19,102323,102324],{},[3304,102325],{"alt":62,"src":102326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,102328,102330],{"id":102329},"_96-around函数","9.6 around()函数",[19,102332,102333],{},"around()函数也可以实现对数的小数位数进行操作",[19,102335,102336],{},"其中的参数：",[19,102338,102339],{},"1.要传的数组",[19,102341,102342],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,102344,102345],{},[3304,102346],{"alt":62,"src":102347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,102349,102351],{"id":102350},"_97-三角函数","9.7 三角函数",[19,102353,102354],{},[3304,102355],{"alt":62,"src":102356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,102358,102359],{},"引入图像模块非常重要",[57,102361,102363],{"className":59,"code":102362,"language":61,"meta":62,"style":62},"from matplotlib import pyplot as plt\n",[23,102364,102365],{"__ignoreMap":62},[66,102366,102367,102369,102372,102374,102377,102379],{"class":68,"line":69},[66,102368,32532],{"class":72},[66,102370,102371],{"class":76}," matplotlib ",[66,102373,284],{"class":72},[66,102375,102376],{"class":76}," pyplot ",[66,102378,33176],{"class":72},[66,102380,33230],{"class":76},[1903,102382,102383],{},"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":62,"searchDepth":80,"depth":80,"links":102385},[102386,102387,102388,102389,102390,102391,102392],{"id":101934,"depth":80,"text":101935},{"id":102049,"depth":80,"text":102050},{"id":102256,"depth":80,"text":102257},{"id":102265,"depth":80,"text":102266},{"id":102308,"depth":80,"text":102309},{"id":102329,"depth":80,"text":102330},{"id":102350,"depth":80,"text":102351},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":101899,"description":1926},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":102399,"title":102400,"body":102401,"description":1926,"extension":1927,"meta":102405,"navigation":108,"path":102406,"seo":102407,"stem":102408,"__hash__":102409},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":102402,"toc":102403},[],{"title":62,"searchDepth":80,"depth":80,"links":102404},[],{"category":52204},"\u002Fwiki\u002F2025-08-14-numpy",{"title":102400,"description":1926},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":102411,"title":102412,"body":102413,"description":62,"extension":1927,"meta":104420,"navigation":108,"path":104421,"seo":104422,"stem":104423,"__hash__":104424},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":102414,"toc":104396},[102415,102418,102422,102425,102428,102434,102437,102460,102463,102497,102500,102541,102545,102548,102641,102644,102688,102691,102708,102711,102725,102728,102731,102776,102779,102816,102820,102823,102829,102834,102854,102858,102861,102927,102930,102948,102952,102955,102984,102994,103000,103004,103007,103013,103024,103028,103031,103061,103064,103343,103346,103349,103360,103363,103366,103388,103395,103398,103416,103419,103422,103436,103444,103447,103473,103479,103482,103485,103495,103507,103527,103536,103556,103566,103590,103603,103617,103622,103663,103680,103705,103717,103737,103743,103788,103807,103824,103837,103853,103860,103872,103881,103916,103937,103962,103975,103999,104014,104039,104042,104063,104072,104075,104086,104090,104093,104099,104111,104118,104122,104125,104137,104140,104154,104157,104167,104177,104180,104220,104223,104227,104233,104236,104250,104254,104257,104290,104294,104297,104320,104328,104331,104337,104343,104346,104349,104377,104381,104384,104390,104393],[10,102416,102412],{"id":102417},"_1环境安装与第一个-mujoco-程序",[14,102419,102421],{"id":102420},"_1目标说明","1.目标说明",[19,102423,102424],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,102426,102427],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[57,102429,102432],{"className":102430,"code":102431,"language":555,"meta":62},[553],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[23,102433,102431],{"__ignoreMap":62},[19,102435,102436],{},"需要掌握:",[31,102438,102439,102442,102445,102450,102455],{},[34,102440,102441],{},"Fedora 44 下 MuJoCo 的系统依赖",[34,102443,102444],{},"Python 虚拟环境创建",[34,102446,102447],{},[23,102448,102449],{},"mujoco.MjModel",[34,102451,102452],{},[23,102453,102454],{},"mujoco.MjData",[34,102456,102457],{},[23,102458,102459],{},"mujoco.mj_step(model, data)",[19,102461,102462],{},"MuJoCo 中最重要的两个对象:",[2129,102464,102465,102475],{},[2132,102466,102467],{},[2135,102468,102469,102472],{},[2138,102470,102471],{"align":25539},"对象",[2138,102473,102474],{"align":25539},"含义",[2176,102476,102477,102487],{},[2135,102478,102479,102484],{},[2181,102480,102481],{"align":25539},[23,102482,102483],{},"MjModel",[2181,102485,102486],{"align":25539},"模型结构，来自 XML，基本不随时间变化",[2135,102488,102489,102494],{},[2181,102490,102491],{"align":25539},[23,102492,102493],{},"MjData",[2181,102495,102496],{"align":25539},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,102498,102499],{},"可以先用一个类比理解：",[2129,102501,102502,102512],{},[2132,102503,102504],{},[2135,102505,102506,102509],{},[2138,102507,102508],{"align":25539},"类比",[2138,102510,102511],{"align":25539},"MuJoCo 对象",[2176,102513,102514,102523,102532],{},[2135,102515,102516,102519],{},[2181,102517,102518],{"align":25539},"游戏地图和角色配置",[2181,102520,102521],{"align":25539},[23,102522,102483],{},[2135,102524,102525,102528],{},[2181,102526,102527],{"align":25539},"游戏运行到当前帧的状态",[2181,102529,102530],{"align":25539},[23,102531,102493],{},[2135,102533,102534,102537],{},[2181,102535,102536],{"align":25539},"前进一帧",[2181,102538,102539],{"align":25539},[23,102540,102459],{},[14,102542,102544],{"id":102543},"_2环境与依赖安装","2.环境与依赖安装",[19,102546,102547],{},"Fedora 44 系统依赖:",[57,102549,102551],{"className":25625,"code":102550,"language":25627,"meta":62,"style":62},"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",[23,102552,102553,102565,102578,102591,102601,102611,102630],{"__ignoreMap":62},[66,102554,102555,102557,102559,102561,102563],{"class":68,"line":69},[66,102556,26380],{"class":3793},[66,102558,28116],{"class":356},[66,102560,25637],{"class":356},[66,102562,28201],{"class":102},[66,102564,26481],{"class":102},[66,102566,102567,102570,102573,102576],{"class":68,"line":80},[66,102568,102569],{"class":356},"  python3",[66,102571,102572],{"class":356}," python3-pip",[66,102574,102575],{"class":356}," python3-virtualenv",[66,102577,26481],{"class":102},[66,102579,102580,102583,102586,102589],{"class":68,"line":112},[66,102581,102582],{"class":356},"  mesa-libGL",[66,102584,102585],{"class":356}," mesa-libGLU",[66,102587,102588],{"class":356}," mesa-dri-drivers",[66,102590,26481],{"class":102},[66,102592,102593,102596,102599],{"class":68,"line":129},[66,102594,102595],{"class":356},"  libglvnd-glx",[66,102597,102598],{"class":356}," libglvnd-opengl",[66,102600,26481],{"class":102},[66,102602,102603,102606,102609],{"class":68,"line":138},[66,102604,102605],{"class":356},"  glfw",[66,102607,102608],{"class":356}," glfw-devel",[66,102610,26481],{"class":102},[66,102612,102613,102616,102619,102622,102625,102628],{"class":68,"line":227},[66,102614,102615],{"class":356},"  libX11",[66,102617,102618],{"class":356}," libXcursor",[66,102620,102621],{"class":356}," libXi",[66,102623,102624],{"class":356}," libXinerama",[66,102626,102627],{"class":356}," libXrandr",[66,102629,26481],{"class":102},[66,102631,102632,102635,102638],{"class":68,"line":236},[66,102633,102634],{"class":356},"  gcc",[66,102636,102637],{"class":356}," gcc-c++",[66,102639,102640],{"class":356}," make\n",[19,102642,102643],{},"创建 Python 环境:",[57,102645,102647],{"className":25625,"code":102646,"language":25627,"meta":62,"style":62},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[23,102648,102649,102663,102671],{"__ignoreMap":62},[66,102650,102651,102654,102657,102660],{"class":68,"line":69},[66,102652,102653],{"class":3793},"python3",[66,102655,102656],{"class":102}," -m",[66,102658,102659],{"class":356}," venv",[66,102661,102662],{"class":356}," .venv\n",[66,102664,102665,102668],{"class":68,"line":80},[66,102666,102667],{"class":102},"source",[66,102669,102670],{"class":356}," .venv\u002Fbin\u002Factivate\n",[66,102672,102673,102675,102677,102680,102682,102685],{"class":68,"line":112},[66,102674,61],{"class":3793},[66,102676,102656],{"class":102},[66,102678,102679],{"class":356}," pip",[66,102681,25637],{"class":356},[66,102683,102684],{"class":102}," --upgrade",[66,102686,102687],{"class":356}," pip\n",[19,102689,102690],{},"pip 安装:",[57,102692,102694],{"className":25625,"code":102693,"language":25627,"meta":62,"style":62},"pip install \"mujoco>=2.3\" numpy\n",[23,102695,102696],{"__ignoreMap":62},[66,102697,102698,102700,102702,102705],{"class":68,"line":69},[66,102699,25634],{"class":3793},[66,102701,25637],{"class":356},[66,102703,102704],{"class":356}," \"mujoco>=2.3\"",[66,102706,102707],{"class":356}," numpy\n",[19,102709,102710],{},"安装完成后，先做最小检查：",[57,102712,102714],{"className":25625,"code":102713,"language":25627,"meta":62,"style":62},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[23,102715,102716],{"__ignoreMap":62},[66,102717,102718,102720,102722],{"class":68,"line":69},[66,102719,61],{"class":3793},[66,102721,32158],{"class":102},[66,102723,102724],{"class":356}," \"import mujoco; print(mujoco.__version__)\"\n",[19,102726,102727],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,102729,102730],{},"conda 安装:",[57,102732,102734],{"className":25625,"code":102733,"language":25627,"meta":62,"style":62},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[23,102735,102736,102756,102766],{"__ignoreMap":62},[66,102737,102738,102740,102742,102744,102747,102750,102753],{"class":68,"line":69},[66,102739,32130],{"class":3793},[66,102741,30976],{"class":356},[66,102743,26918],{"class":102},[66,102745,102746],{"class":356}," mujoco-study",[66,102748,102749],{"class":356}," python=",[66,102751,102752],{"class":102},"3.10",[66,102754,102755],{"class":102}," -y\n",[66,102757,102758,102760,102763],{"class":68,"line":80},[66,102759,32130],{"class":3793},[66,102761,102762],{"class":356}," activate",[66,102764,102765],{"class":356}," mujoco-study\n",[66,102767,102768,102770,102772,102774],{"class":68,"line":112},[66,102769,25634],{"class":3793},[66,102771,25637],{"class":356},[66,102773,102704],{"class":356},[66,102775,102707],{"class":356},[19,102777,102778],{},"版本冲突说明:",[31,102780,102781,102787,102797,102806],{},[34,102782,102783,102784,158],{},"不要安装 ",[23,102785,102786],{},"mujoco-py",[34,102788,102789,102790,102792,102793,102796],{},"如果旧项目里同时安装了 ",[23,102791,102786],{}," 和 ",[23,102794,102795],{},"mujoco","，建议新建干净虚拟环境。",[34,102798,102799,102802,102803,158],{},[23,102800,102801],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[23,102804,102805],{},"~\u002F.mujoco\u002Fmujoco210",[34,102807,102808,102809,84316,102812,102815],{},"离屏渲染可能涉及 OpenGL 后端，",[23,102810,102811],{},"MUJOCO_GL=egl",[23,102813,102814],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,102817,102819],{"id":102818},"_3核心概念解释","3.核心概念解释",[19,102821,102822],{},"MuJoCo 的基本执行流程:",[57,102824,102827],{"className":102825,"code":102826,"language":555,"meta":62},[553],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[23,102828,102826],{"__ignoreMap":62},[19,102830,102831,102833],{},[23,102832,102483],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,102835,102836,102838,102839,2204,102842,2204,102845,2204,102848,2204,102851,158],{},[23,102837,102493],{}," 存放仿真运行时状态，例如 ",[23,102840,102841],{},"data.time",[23,102843,102844],{},"data.qpos",[23,102846,102847],{},"data.qvel",[23,102849,102850],{},"data.ctrl",[23,102852,102853],{},"data.xpos",[484,102855,102857],{"id":102856},"xml-是什么","XML 是什么",[19,102859,102860],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[57,102862,102864],{"className":54849,"code":102863,"language":54851,"meta":62,"style":62},"\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",[23,102865,102866,102888,102919],{"__ignoreMap":62},[66,102867,102868,102870,102872,102874,102876,102878,102881,102883,102886],{"class":68,"line":69},[66,102869,413],{"class":76},[66,102871,53584],{"class":53084},[66,102873,16724],{"class":3793},[66,102875,99],{"class":76},[66,102877,55273],{"class":356},[66,102879,102880],{"class":3793}," pos",[66,102882,99],{"class":76},[66,102884,102885],{"class":356},"\"0 0 1\"",[66,102887,53091],{"class":76},[66,102889,102890,102892,102895,102897,102899,102902,102904,102906,102908,102911,102913,102916],{"class":68,"line":80},[66,102891,53928],{"class":76},[66,102893,102894],{"class":53084},"geom",[66,102896,16724],{"class":3793},[66,102898,99],{"class":76},[66,102900,102901],{"class":356},"\"box_geom\"",[66,102903,55605],{"class":3793},[66,102905,99],{"class":76},[66,102907,55273],{"class":356},[66,102909,102910],{"class":3793}," size",[66,102912,99],{"class":76},[66,102914,102915],{"class":356},"\"0.1 0.1 0.1\"",[66,102917,102918],{"class":76},"\u002F>\n",[66,102920,102921,102923,102925],{"class":68,"line":112},[66,102922,53569],{"class":76},[66,102924,53584],{"class":53084},[66,102926,53091],{"class":76},[19,102928,102929],{},"这段意思是：",[31,102931,102932,102938,102945],{},[34,102933,102934,102935,102937],{},"创建一个叫 ",[23,102936,55496],{}," 的刚体。",[34,102939,102940,102941,102944],{},"它初始放在 ",[23,102942,102943],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[34,102946,102947],{},"它里面有一个盒子形状的几何体。",[484,102949,102951],{"id":102950},"timestep-是什么","timestep 是什么",[19,102953,102954],{},"XML 里的：",[57,102956,102958],{"className":54849,"code":102957,"language":54851,"meta":62,"style":62},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[23,102959,102960],{"__ignoreMap":62},[66,102961,102962,102964,102966,102969,102971,102974,102977,102979,102982],{"class":68,"line":69},[66,102963,413],{"class":76},[66,102965,70945],{"class":53084},[66,102967,102968],{"class":3793}," timestep",[66,102970,99],{"class":76},[66,102972,102973],{"class":356},"\"0.01\"",[66,102975,102976],{"class":3793}," gravity",[66,102978,99],{"class":76},[66,102980,102981],{"class":356},"\"0 0 -9.81\"",[66,102983,102918],{"class":76},[19,102985,102986,102987,102990,102991,102993],{},"表示每调用一次 ",[23,102988,102989],{},"mj_step","，仿真时间前进 ",[23,102992,40774],{}," 秒。循环 100 次，大约就是 1 秒：",[57,102995,102998],{"className":102996,"code":102997,"language":555,"meta":62},[553],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[23,102999,102997],{"__ignoreMap":62},[484,103001,103003],{"id":103002},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,103005,103006],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[57,103008,103011],{"className":103009,"code":103010,"language":555,"meta":62},[553],"x y z qw qx qy qz\n",[23,103012,103010],{"__ignoreMap":62},[19,103014,103015,103016,103019,103020,103023],{},"表示一个自由刚体的位置和姿态。其中 ",[23,103017,103018],{},"x y z"," 是位置，",[23,103021,103022],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,103025,103027],{"id":103026},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,103029,103030],{},"新建文件:",[57,103032,103034],{"className":25625,"code":103033,"language":25627,"meta":62,"style":62},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[23,103035,103036,103046,103053],{"__ignoreMap":62},[66,103037,103038,103041,103043],{"class":68,"line":69},[66,103039,103040],{"class":3793},"mkdir",[66,103042,31016],{"class":102},[66,103044,103045],{"class":356}," mujoco_tutorial\n",[66,103047,103048,103051],{"class":68,"line":80},[66,103049,103050],{"class":102},"cd",[66,103052,103045],{"class":356},[66,103054,103055,103058],{"class":68,"line":112},[66,103056,103057],{"class":3793},"touch",[66,103059,103060],{"class":356}," ch1_first_sim.py\n",[19,103062,103063],{},"写入:",[57,103065,103067],{"className":59,"code":103066,"language":61,"meta":62,"style":62},"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",[23,103068,103069,103076,103080,103084,103094,103099,103104,103108,103113,103118,103122,103127,103132,103137,103142,103147,103152,103156,103160,103164,103177,103191,103201,103205,103217,103229,103241,103253,103265,103269,103286,103291,103295,103306,103317,103321,103325,103338],{"__ignoreMap":62},[66,103070,103071,103073],{"class":68,"line":69},[66,103072,284],{"class":72},[66,103074,103075],{"class":76}," mujoco\n",[66,103077,103078],{"class":68,"line":80},[66,103079,109],{"emptyLinePlaceholder":108},[66,103081,103082],{"class":68,"line":112},[66,103083,109],{"emptyLinePlaceholder":108},[66,103085,103086,103089,103091],{"class":68,"line":129},[66,103087,103088],{"class":102},"XML",[66,103090,15369],{"class":72},[66,103092,103093],{"class":356}," \"\"\"\n",[66,103095,103096],{"class":68,"line":138},[66,103097,103098],{"class":356},"\u003Cmujoco model=\"first_sim\">\n",[66,103100,103101],{"class":68,"line":227},[66,103102,103103],{"class":356},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[66,103105,103106],{"class":68,"line":236},[66,103107,109],{"emptyLinePlaceholder":108},[66,103109,103110],{"class":68,"line":241},[66,103111,103112],{"class":356},"  \u003Cworldbody>\n",[66,103114,103115],{"class":68,"line":372},[66,103116,103117],{"class":356},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[66,103119,103120],{"class":68,"line":377},[66,103121,109],{"emptyLinePlaceholder":108},[66,103123,103124],{"class":68,"line":392},[66,103125,103126],{"class":356},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[66,103128,103129],{"class":68,"line":405},[66,103130,103131],{"class":356},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[66,103133,103134],{"class":68,"line":418},[66,103135,103136],{"class":356},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[66,103138,103139],{"class":68,"line":430},[66,103140,103141],{"class":356},"    \u003C\u002Fbody>\n",[66,103143,103144],{"class":68,"line":438},[66,103145,103146],{"class":356},"  \u003C\u002Fworldbody>\n",[66,103148,103149],{"class":68,"line":465},[66,103150,103151],{"class":356},"\u003C\u002Fmujoco>\n",[66,103153,103154],{"class":68,"line":1805},[66,103155,97473],{"class":356},[66,103157,103158],{"class":68,"line":1817},[66,103159,109],{"emptyLinePlaceholder":108},[66,103161,103162],{"class":68,"line":1822},[66,103163,109],{"emptyLinePlaceholder":108},[66,103165,103166,103168,103170,103173,103175],{"class":68,"line":1829},[66,103167,33739],{"class":72},[66,103169,3803],{"class":3793},[66,103171,103172],{"class":76},"() -> ",[66,103174,97461],{"class":102},[66,103176,126],{"class":76},[66,103178,103179,103182,103184,103187,103189],{"class":68,"line":3529},[66,103180,103181],{"class":76},"    model ",[66,103183,99],{"class":72},[66,103185,103186],{"class":76}," mujoco.MjModel.from_xml_string(",[66,103188,103088],{"class":102},[66,103190,313],{"class":76},[66,103192,103193,103196,103198],{"class":68,"line":3557},[66,103194,103195],{"class":76},"    data ",[66,103197,99],{"class":72},[66,103199,103200],{"class":76}," mujoco.MjData(model)\n",[66,103202,103203],{"class":68,"line":3562},[66,103204,109],{"emptyLinePlaceholder":108},[66,103206,103207,103209,103211,103214],{"class":68,"line":3579},[66,103208,132],{"class":102},[66,103210,348],{"class":76},[66,103212,103213],{"class":356},"\"nq:\"",[66,103215,103216],{"class":76},", model.nq)\n",[66,103218,103219,103221,103223,103226],{"class":68,"line":3584},[66,103220,132],{"class":102},[66,103222,348],{"class":76},[66,103224,103225],{"class":356},"\"nv:\"",[66,103227,103228],{"class":76},", model.nv)\n",[66,103230,103231,103233,103235,103238],{"class":68,"line":3589},[66,103232,132],{"class":102},[66,103234,348],{"class":76},[66,103236,103237],{"class":356},"\"nu:\"",[66,103239,103240],{"class":76},", model.nu)\n",[66,103242,103243,103245,103247,103250],{"class":68,"line":3594},[66,103244,132],{"class":102},[66,103246,348],{"class":76},[66,103248,103249],{"class":356},"\"initial time:\"",[66,103251,103252],{"class":76},", data.time)\n",[66,103254,103255,103257,103259,103262],{"class":68,"line":3608},[66,103256,132],{"class":102},[66,103258,348],{"class":76},[66,103260,103261],{"class":356},"\"initial qpos:\"",[66,103263,103264],{"class":76},", data.qpos.copy())\n",[66,103266,103267],{"class":68,"line":3613},[66,103268,109],{"emptyLinePlaceholder":108},[66,103270,103271,103273,103276,103278,103280,103282,103284],{"class":68,"line":4401},[66,103272,1083],{"class":72},[66,103274,103275],{"class":76}," _ ",[66,103277,507],{"class":72},[66,103279,510],{"class":102},[66,103281,348],{"class":76},[66,103283,310],{"class":102},[66,103285,522],{"class":76},[66,103287,103288],{"class":68,"line":4415},[66,103289,103290],{"class":76},"        mujoco.mj_step(model, data)\n",[66,103292,103293],{"class":68,"line":4423},[66,103294,109],{"emptyLinePlaceholder":108},[66,103296,103297,103299,103301,103304],{"class":68,"line":4428},[66,103298,132],{"class":102},[66,103300,348],{"class":76},[66,103302,103303],{"class":356},"\"final time:\"",[66,103305,103252],{"class":76},[66,103307,103308,103310,103312,103315],{"class":68,"line":4434},[66,103309,132],{"class":102},[66,103311,348],{"class":76},[66,103313,103314],{"class":356},"\"final qpos:\"",[66,103316,103264],{"class":76},[66,103318,103319],{"class":68,"line":4440},[66,103320,109],{"emptyLinePlaceholder":108},[66,103322,103323],{"class":68,"line":4445},[66,103324,109],{"emptyLinePlaceholder":108},[66,103326,103327,103329,103331,103333,103336],{"class":68,"line":9759},[66,103328,3373],{"class":72},[66,103330,33014],{"class":102},[66,103332,959],{"class":72},[66,103334,103335],{"class":356}," \"__main__\"",[66,103337,126],{"class":76},[66,103339,103340],{"class":68,"line":9783},[66,103341,103342],{"class":76},"    main()\n",[484,103344,103345],{"id":103345},"代码逐段解释",[19,103347,103348],{},"导入库：",[57,103350,103352],{"className":59,"code":103351,"language":61,"meta":62,"style":62},"import mujoco\n",[23,103353,103354],{"__ignoreMap":62},[66,103355,103356,103358],{"class":68,"line":69},[66,103357,284],{"class":72},[66,103359,103075],{"class":76},[19,103361,103362],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,103364,103365],{},"定义 XML：",[57,103367,103369],{"className":59,"code":103368,"language":61,"meta":62,"style":62},"XML = \"\"\"\n...\n\"\"\"\n",[23,103370,103371,103379,103384],{"__ignoreMap":62},[66,103372,103373,103375,103377],{"class":68,"line":69},[66,103374,103088],{"class":102},[66,103376,15369],{"class":72},[66,103378,103093],{"class":356},[66,103380,103381],{"class":68,"line":80},[66,103382,103383],{"class":356},"...\n",[66,103385,103386],{"class":68,"line":112},[66,103387,97473],{"class":356},[19,103389,103390,103391,103394],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[23,103392,103393],{},"freejoint"," 的方块。",[19,103396,103397],{},"编译模型：",[57,103399,103401],{"className":59,"code":103400,"language":61,"meta":62,"style":62},"model = mujoco.MjModel.from_xml_string(XML)\n",[23,103402,103403],{"__ignoreMap":62},[66,103404,103405,103408,103410,103412,103414],{"class":68,"line":69},[66,103406,103407],{"class":76},"model ",[66,103409,99],{"class":72},[66,103411,103186],{"class":76},[66,103413,103088],{"class":102},[66,103415,313],{"class":76},[19,103417,103418],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,103420,103421],{},"创建数据：",[57,103423,103425],{"className":59,"code":103424,"language":61,"meta":62,"style":62},"data = mujoco.MjData(model)\n",[23,103426,103427],{"__ignoreMap":62},[66,103428,103429,103432,103434],{"class":68,"line":69},[66,103430,103431],{"class":76},"data ",[66,103433,99],{"class":72},[66,103435,103200],{"class":76},[19,103437,103438,103440,103441,103443],{},[23,103439,35190],{}," 会保存仿真当前状态。刚创建时，时间是 ",[23,103442,2183],{},"，方块还在初始位置。",[19,103445,103446],{},"推进仿真：",[57,103448,103450],{"className":59,"code":103449,"language":61,"meta":62,"style":62},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[23,103451,103452,103468],{"__ignoreMap":62},[66,103453,103454,103456,103458,103460,103462,103464,103466],{"class":68,"line":69},[66,103455,502],{"class":72},[66,103457,103275],{"class":76},[66,103459,507],{"class":72},[66,103461,510],{"class":102},[66,103463,348],{"class":76},[66,103465,310],{"class":102},[66,103467,522],{"class":76},[66,103469,103470],{"class":68,"line":80},[66,103471,103472],{"class":76},"    mujoco.mj_step(model, data)\n",[19,103474,103475,103476,103478],{},"每次 ",[23,103477,102989],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[484,103480,103481],{"id":103481},"代码逐行细讲",[19,103483,103484],{},"下面把完整代码按新手视角拆开讲。",[57,103486,103487],{"className":59,"code":103351,"language":61,"meta":62,"style":62},[23,103488,103489],{"__ignoreMap":62},[66,103490,103491,103493],{"class":68,"line":69},[66,103492,284],{"class":72},[66,103494,103075],{"class":76},[19,103496,103497,103499,103500,2204,103502,2204,103504,158],{},[23,103498,284],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[23,103501,102449],{},[23,103503,102454],{},[23,103505,103506],{},"mujoco.mj_step",[57,103508,103509],{"className":59,"code":103368,"language":61,"meta":62,"style":62},[23,103510,103511,103519,103523],{"__ignoreMap":62},[66,103512,103513,103515,103517],{"class":68,"line":69},[66,103514,103088],{"class":102},[66,103516,15369],{"class":72},[66,103518,103093],{"class":356},[66,103520,103521],{"class":68,"line":80},[66,103522,103383],{"class":356},[66,103524,103525],{"class":68,"line":112},[66,103526,97473],{"class":356},[19,103528,103529,103531,103532,103535],{},[23,103530,103088],{}," 是一个变量名。右边的三引号 ",[23,103533,103534],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[57,103537,103538],{"className":54849,"code":103098,"language":54851,"meta":62,"style":62},[23,103539,103540],{"__ignoreMap":62},[66,103541,103542,103544,103546,103549,103551,103554],{"class":68,"line":69},[66,103543,413],{"class":76},[66,103545,102795],{"class":53084},[66,103547,103548],{"class":3793}," model",[66,103550,99],{"class":76},[66,103552,103553],{"class":356},"\"first_sim\"",[66,103555,53091],{"class":76},[19,103557,103558,103559,103562,103563,158],{},"这是 XML 的根标签。",[23,103560,103561],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[23,103564,103565],{},"first_sim",[57,103567,103568],{"className":54849,"code":102957,"language":54851,"meta":62,"style":62},[23,103569,103570],{"__ignoreMap":62},[66,103571,103572,103574,103576,103578,103580,103582,103584,103586,103588],{"class":68,"line":69},[66,103573,413],{"class":76},[66,103575,70945],{"class":53084},[66,103577,102968],{"class":3793},[66,103579,99],{"class":76},[66,103581,102973],{"class":356},[66,103583,102976],{"class":3793},[66,103585,99],{"class":76},[66,103587,102981],{"class":356},[66,103589,102918],{"class":76},[19,103591,103592,103594,103595,103598,103599,103602],{},[23,103593,70945],{}," 用来设置仿真参数。",[23,103596,103597],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[23,103600,103601],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[57,103604,103606],{"className":54849,"code":103605,"language":54851,"meta":62,"style":62},"\u003Cworldbody>\n",[23,103607,103608],{"__ignoreMap":62},[66,103609,103610,103612,103615],{"class":68,"line":69},[66,103611,413],{"class":76},[66,103613,103614],{"class":53084},"worldbody",[66,103616,53091],{"class":76},[19,103618,103619,103621],{},[23,103620,103614],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[57,103623,103625],{"className":54849,"code":103624,"language":54851,"meta":62,"style":62},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[23,103626,103627],{"__ignoreMap":62},[66,103628,103629,103631,103633,103635,103637,103640,103642,103644,103647,103649,103651,103654,103656,103658,103661],{"class":68,"line":69},[66,103630,413],{"class":76},[66,103632,102894],{"class":53084},[66,103634,16724],{"class":3793},[66,103636,99],{"class":76},[66,103638,103639],{"class":356},"\"floor\"",[66,103641,55605],{"class":3793},[66,103643,99],{"class":76},[66,103645,103646],{"class":356},"\"plane\"",[66,103648,102910],{"class":3793},[66,103650,99],{"class":76},[66,103652,103653],{"class":356},"\"2 2 0.1\"",[66,103655,80545],{"class":3793},[66,103657,99],{"class":76},[66,103659,103660],{"class":356},"\"0.8 0.8 0.8 1\"",[66,103662,102918],{"class":76},[19,103664,103665,103666,103668,103669,103672,103673,103676,103677,103679],{},"这行创建地面。",[23,103667,102894],{}," 是几何体。",[23,103670,103671],{},"name=\"floor\""," 是名字。",[23,103674,103675],{},"type=\"plane\""," 表示平面。",[23,103678,56891],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[57,103681,103683],{"className":54849,"code":103682,"language":54851,"meta":62,"style":62},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[23,103684,103685],{"__ignoreMap":62},[66,103686,103687,103689,103691,103693,103695,103697,103699,103701,103703],{"class":68,"line":69},[66,103688,413],{"class":76},[66,103690,53584],{"class":53084},[66,103692,16724],{"class":3793},[66,103694,99],{"class":76},[66,103696,55273],{"class":356},[66,103698,102880],{"class":3793},[66,103700,99],{"class":76},[66,103702,102885],{"class":356},[66,103704,53091],{"class":76},[19,103706,103707,103708,158,103710,103713,103714,103716],{},"这行创建一个刚体，名字叫 ",[23,103709,55496],{},[23,103711,103712],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[23,103715,102943],{},"，也就是离地面 1 米高。",[57,103718,103720],{"className":54849,"code":103719,"language":54851,"meta":62,"style":62},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[23,103721,103722],{"__ignoreMap":62},[66,103723,103724,103726,103728,103730,103732,103735],{"class":68,"line":69},[66,103725,413],{"class":76},[66,103727,103393],{"class":53084},[66,103729,16724],{"class":3793},[66,103731,99],{"class":76},[66,103733,103734],{"class":356},"\"box_free\"",[66,103736,102918],{"class":76},[19,103738,103739,103740,103742],{},"这行很重要。",[23,103741,103393],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[57,103744,103746],{"className":54849,"code":103745,"language":54851,"meta":62,"style":62},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[23,103747,103748],{"__ignoreMap":62},[66,103749,103750,103752,103754,103756,103758,103760,103762,103764,103766,103768,103770,103772,103775,103777,103779,103781,103783,103786],{"class":68,"line":69},[66,103751,413],{"class":76},[66,103753,102894],{"class":53084},[66,103755,16724],{"class":3793},[66,103757,99],{"class":76},[66,103759,102901],{"class":356},[66,103761,55605],{"class":3793},[66,103763,99],{"class":76},[66,103765,55273],{"class":356},[66,103767,102910],{"class":3793},[66,103769,99],{"class":76},[66,103771,102915],{"class":356},[66,103773,103774],{"class":3793}," mass",[66,103776,99],{"class":76},[66,103778,5496],{"class":356},[66,103780,80545],{"class":3793},[66,103782,99],{"class":76},[66,103784,103785],{"class":356},"\"1 0 0 1\"",[66,103787,102918],{"class":76},[19,103789,103790,103791,103794,103795,103798,103799,103802,103803,103806],{},"这行给 box body 添加一个盒子形状。",[23,103792,103793],{},"type=\"box\""," 表示形状是盒子。",[23,103796,103797],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[23,103800,103801],{},"mass=\"1\""," 表示质量是 1。",[23,103804,103805],{},"rgba=\"1 0 0 1\""," 表示红色。",[57,103808,103810],{"className":59,"code":103809,"language":61,"meta":62,"style":62},"def main() -> None:\n",[23,103811,103812],{"__ignoreMap":62},[66,103813,103814,103816,103818,103820,103822],{"class":68,"line":69},[66,103815,33739],{"class":72},[66,103817,3803],{"class":3793},[66,103819,103172],{"class":76},[66,103821,97461],{"class":102},[66,103823,126],{"class":76},[19,103825,103826,103828,103829,103832,103833,103836],{},[23,103827,33739],{}," 用来定义函数。这里定义了一个叫 ",[23,103830,103831],{},"main"," 的函数。",[23,103834,103835],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[57,103838,103839],{"className":59,"code":103400,"language":61,"meta":62,"style":62},[23,103840,103841],{"__ignoreMap":62},[66,103842,103843,103845,103847,103849,103851],{"class":68,"line":69},[66,103844,103407],{"class":76},[66,103846,99],{"class":72},[66,103848,103186],{"class":76},[66,103850,103088],{"class":102},[66,103852,313],{"class":76},[19,103854,103855,103856,103859],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[23,103857,103858],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[57,103861,103862],{"className":59,"code":103424,"language":61,"meta":62,"style":62},[23,103863,103864],{"__ignoreMap":62},[66,103865,103866,103868,103870],{"class":68,"line":69},[66,103867,103431],{"class":76},[66,103869,99],{"class":72},[66,103871,103200],{"class":76},[19,103873,103874,103875,103877,103878,103880],{},"这行创建仿真数据。",[23,103876,35190],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[23,103879,35190],{}," 都会变化。",[57,103882,103884],{"className":59,"code":103883,"language":61,"meta":62,"style":62},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[23,103885,103886,103896,103906],{"__ignoreMap":62},[66,103887,103888,103890,103892,103894],{"class":68,"line":69},[66,103889,244],{"class":102},[66,103891,348],{"class":76},[66,103893,103213],{"class":356},[66,103895,103216],{"class":76},[66,103897,103898,103900,103902,103904],{"class":68,"line":80},[66,103899,244],{"class":102},[66,103901,348],{"class":76},[66,103903,103225],{"class":356},[66,103905,103228],{"class":76},[66,103907,103908,103910,103912,103914],{"class":68,"line":112},[66,103909,244],{"class":102},[66,103911,348],{"class":76},[66,103913,103237],{"class":356},[66,103915,103240],{"class":76},[19,103917,103918,103920,103921,103924,103925,103928,103929,103932,103933,103936],{},[23,103919,244],{}," 用来输出信息。",[23,103922,103923],{},"model.nq"," 是位置变量数量，",[23,103926,103927],{},"model.nv"," 是速度变量数量，",[23,103930,103931],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[23,103934,103935],{},"nu"," 是 0。",[57,103938,103940],{"className":59,"code":103939,"language":61,"meta":62,"style":62},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[23,103941,103942,103952],{"__ignoreMap":62},[66,103943,103944,103946,103948,103950],{"class":68,"line":69},[66,103945,244],{"class":102},[66,103947,348],{"class":76},[66,103949,103249],{"class":356},[66,103951,103252],{"class":76},[66,103953,103954,103956,103958,103960],{"class":68,"line":80},[66,103955,244],{"class":102},[66,103957,348],{"class":76},[66,103959,103261],{"class":356},[66,103961,103264],{"class":76},[19,103963,103964,103965,103967,103968,103970,103971,103974],{},"这里打印初始时间和初始位置。",[23,103966,102841],{}," 一开始是 0。",[23,103969,102844],{}," 是位置数组。",[23,103972,103973],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[57,103976,103977],{"className":59,"code":103449,"language":61,"meta":62,"style":62},[23,103978,103979,103995],{"__ignoreMap":62},[66,103980,103981,103983,103985,103987,103989,103991,103993],{"class":68,"line":69},[66,103982,502],{"class":72},[66,103984,103275],{"class":76},[66,103986,507],{"class":72},[66,103988,510],{"class":102},[66,103990,348],{"class":76},[66,103992,310],{"class":102},[66,103994,522],{"class":76},[66,103996,103997],{"class":68,"line":80},[66,103998,103472],{"class":76},[19,104000,104001,104003,104004,104007,104008,104010,104011,104013],{},[23,104002,502],{}," 是循环。",[23,104005,104006],{},"range(100)"," 表示循环 100 次。",[23,104009,2967],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[23,104012,102989],{},"，仿真就前进一步。",[57,104015,104017],{"className":59,"code":104016,"language":61,"meta":62,"style":62},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[23,104018,104019,104029],{"__ignoreMap":62},[66,104020,104021,104023,104025,104027],{"class":68,"line":69},[66,104022,244],{"class":102},[66,104024,348],{"class":76},[66,104026,103303],{"class":356},[66,104028,103252],{"class":76},[66,104030,104031,104033,104035,104037],{"class":68,"line":80},[66,104032,244],{"class":102},[66,104034,348],{"class":76},[66,104036,103314],{"class":356},[66,104038,103264],{"class":76},[19,104040,104041],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[57,104043,104045],{"className":59,"code":104044,"language":61,"meta":62,"style":62},"if __name__ == \"__main__\":\n    main()\n",[23,104046,104047,104059],{"__ignoreMap":62},[66,104048,104049,104051,104053,104055,104057],{"class":68,"line":69},[66,104050,3373],{"class":72},[66,104052,33014],{"class":102},[66,104054,959],{"class":72},[66,104056,103335],{"class":356},[66,104058,126],{"class":76},[66,104060,104061],{"class":68,"line":80},[66,104062,103342],{"class":76},[19,104064,104065,104066,104069,104070,158],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[23,104067,104068],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[23,104071,104068],{},[19,104073,104074],{},"运行:",[57,104076,104078],{"className":25625,"code":104077,"language":25627,"meta":62,"style":62},"python ch1_first_sim.py\n",[23,104079,104080],{"__ignoreMap":62},[66,104081,104082,104084],{"class":68,"line":69},[66,104083,61],{"class":3793},[66,104085,103060],{"class":356},[14,104087,104089],{"id":104088},"_5运行结果说明","5.运行结果说明",[19,104091,104092],{},"你应该看到类似输出:",[57,104094,104097],{"className":104095,"code":104096,"language":555,"meta":62},[553],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[23,104098,104096],{"__ignoreMap":62},[19,104100,104101,104103,104104,104107,104108,158],{},[23,104102,103393],{}," 有 7 个位置变量: ",[23,104105,104106],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[23,104109,104110],{},"vx vy vz wx wy wz",[19,104112,104113,104114,104117],{},"你还会看到 ",[23,104115,104116],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,104119,104121],{"id":104120},"_6验证步骤","6.验证步骤",[19,104123,104124],{},"确认版本:",[57,104126,104127],{"className":25625,"code":102713,"language":25627,"meta":62,"style":62},[23,104128,104129],{"__ignoreMap":62},[66,104130,104131,104133,104135],{"class":68,"line":69},[66,104132,61],{"class":3793},[66,104134,32158],{"class":102},[66,104136,102724],{"class":356},[19,104138,104139],{},"确认导入的是官方 bindings:",[57,104141,104143],{"className":25625,"code":104142,"language":25627,"meta":62,"style":62},"python -c \"import mujoco; print(mujoco)\"\n",[23,104144,104145],{"__ignoreMap":62},[66,104146,104147,104149,104151],{"class":68,"line":69},[66,104148,61],{"class":3793},[66,104150,32158],{"class":102},[66,104152,104153],{"class":356}," \"import mujoco; print(mujoco)\"\n",[19,104155,104156],{},"运行程序:",[57,104158,104159],{"className":25625,"code":104077,"language":25627,"meta":62,"style":62},[23,104160,104161],{"__ignoreMap":62},[66,104162,104163,104165],{"class":68,"line":69},[66,104164,61],{"class":3793},[66,104166,103060],{"class":356},[19,104168,104169,104170,104173,104174,158],{},"检查 ",[23,104171,104172],{},"final time"," 是否约等于 ",[23,104175,104176],{},"1.0",[19,104178,104179],{},"再做几个小实验：",[31,104181,104182,104192,104200,104213],{},[34,104183,104184,104185,104187,104188,104191],{},"把 ",[23,104186,103712],{}," 改成 ",[23,104189,104190],{},"pos=\"0 0 2\"","，观察初始高度变化。",[34,104193,104184,104194,104187,104196,104199],{},[23,104195,103601],{},[23,104197,104198],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[34,104201,104184,104202,104187,104204,104207,104208,104210,104211,158],{},[23,104203,103597],{},[23,104205,104206],{},"timestep=\"0.005\"","，观察 100 步后的 ",[23,104209,104172],{}," 是否变成约 ",[23,104212,37117],{},[34,104214,104215,104216,104219],{},"删除 ",[23,104217,104218],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,104221,104222],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,104224,104226],{"id":104225},"_7常见错误与解决方案","7.常见错误与解决方案",[484,104228,104230],{"id":104229},"modulenotfounderror-no-module-named-mujoco",[23,104231,104232],{},"ModuleNotFoundError: No module named 'mujoco'",[19,104234,104235],{},"解决:",[57,104237,104239],{"className":25625,"code":104238,"language":25627,"meta":62,"style":62},"pip install \"mujoco>=2.3\"\n",[23,104240,104241],{"__ignoreMap":62},[66,104242,104243,104245,104247],{"class":68,"line":69},[66,104244,25634],{"class":3793},[66,104246,25637],{"class":356},[66,104248,104249],{"class":356}," \"mujoco>=2.3\"\n",[484,104251,104253],{"id":104252},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,104255,104256],{},"先安装系统依赖:",[57,104258,104260],{"className":25625,"code":104259,"language":25627,"meta":62,"style":62},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[23,104261,104262],{"__ignoreMap":62},[66,104263,104264,104266,104268,104270,104272,104275,104277,104280,104282,104285,104287],{"class":68,"line":69},[66,104265,26380],{"class":3793},[66,104267,28116],{"class":356},[66,104269,25637],{"class":356},[66,104271,28201],{"class":102},[66,104273,104274],{"class":356}," mesa-libGL",[66,104276,102588],{"class":356},[66,104278,104279],{"class":356}," glfw",[66,104281,102608],{"class":356},[66,104283,104284],{"class":356}," libX11",[66,104286,102621],{"class":356},[66,104288,104289],{"class":356}," libXrandr\n",[484,104291,104293],{"id":104292},"xml-解析失败","XML 解析失败",[19,104295,104296],{},"检查:",[31,104298,104299,104302,104305,104311],{},[34,104300,104301],{},"标签是否闭合",[34,104303,104304],{},"属性是否带引号",[34,104306,104307,104308],{},"根节点是否是 ",[23,104309,104310],{},"\u003Cmujoco>",[34,104312,104313,104315,104316,104319],{},[23,104314,53584],{}," 是否放在 ",[23,104317,104318],{},"\u003Cworldbody>"," 内部",[484,104321,104323,104325,104326],{"id":104322},"final-time-不是严格等于-10",[23,104324,104172],{}," 不是严格等于 ",[23,104327,104176],{},[19,104329,104330],{},"这通常不是错误。浮点数计算可能得到：",[57,104332,104335],{"className":104333,"code":104334,"language":555,"meta":62},[553],"1.0000000000000007\n",[23,104336,104334],{"__ignoreMap":62},[19,104338,104339,104340,104342],{},"只要接近 ",[23,104341,104176],{}," 就正常。",[484,104344,104345],{"id":104345},"方块没有掉下来",[19,104347,104348],{},"检查：",[31,104350,104351,104357,104363,104368],{},[34,104352,104353,104354],{},"方块 body 里是否有 ",[23,104355,104356],{},"\u003Cfreejoint\u002F>",[34,104358,104359,104360],{},"重力是否是 ",[23,104361,104362],{},"0 0 -9.81",[34,104364,104365,104366],{},"是否真的调用了 ",[23,104367,102459],{},[34,104369,104370,104371,104373,104374],{},"你看的是否是 ",[23,104372,104116],{},"，不是 ",[23,104375,104376],{},"initial qpos",[14,104378,104380],{"id":104379},"_8本章小结","8.本章小结",[19,104382,104383],{},"本章你已经完成了 MuJoCo 的最小闭环：",[57,104385,104388],{"className":104386,"code":104387,"language":555,"meta":62},[553],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[23,104389,104387],{"__ignoreMap":62},[19,104391,104392],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[1903,104394,104395],{},"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":62,"searchDepth":80,"depth":80,"links":104397},[104398,104399,104400,104405,104409,104410,104411,104419],{"id":102420,"depth":80,"text":102421},{"id":102543,"depth":80,"text":102544},{"id":102818,"depth":80,"text":102819,"children":104401},[104402,104403,104404],{"id":102856,"depth":112,"text":102857},{"id":102950,"depth":112,"text":102951},{"id":103002,"depth":112,"text":103003},{"id":103026,"depth":80,"text":103027,"children":104406},[104407,104408],{"id":103345,"depth":112,"text":103345},{"id":103481,"depth":112,"text":103481},{"id":104088,"depth":80,"text":104089},{"id":104120,"depth":80,"text":104121},{"id":104225,"depth":80,"text":104226,"children":104412},[104413,104414,104415,104416,104418],{"id":104229,"depth":112,"text":104232},{"id":104252,"depth":112,"text":104253},{"id":104292,"depth":112,"text":104293},{"id":104322,"depth":112,"text":104417},"final time 不是严格等于 1.0",{"id":104345,"depth":112,"text":104345},{"id":104379,"depth":80,"text":104380},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":102412,"description":62},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":104426,"title":104427,"body":104428,"description":62,"extension":1927,"meta":106084,"navigation":108,"path":106085,"seo":106086,"stem":106087,"__hash__":106088},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":104429,"toc":106060},[104430,104433,104435,104438,104441,104458,104553,104556,104562,104564,104566,104590,104593,104607,104610,104651,104653,104666,104668,104671,104719,104731,104734,104737,104743,104756,104823,104826,104845,104848,104851,104857,104859,104868,104871,104875,104884,104966,104975,104979,104985,104999,105009,105011,105341,105344,105356,105358,105369,105371,105374,105392,105395,105398,105416,105427,105430,105445,105455,105457,105478,105495,105515,105521,105561,105577,105593,105599,105602,105626,105642,105647,105677,105694,105719,105722,105737,105746,105761,105770,105785,105792,105794,105804,105817,105824,105827,105866,105873,105875,105927,105929,105935,105938,105945,105952,105955,105957,105975,105978,105981,106015,106027,106029,106032,106054,106057],[10,104431,104427],{"id":104432},"_2xml-与-mjcf-物理建模基础",[14,104434,102421],{"id":102420},[19,104436,104437],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,104439,104440],{},"本章结束后，你应该能看懂一个简单模型里：",[31,104442,104443,104446,104449,104452,104455],{},[34,104444,104445],{},"地面在哪里。",[34,104447,104448],{},"物体初始位置在哪里。",[34,104450,104451],{},"几何体是什么形状。",[34,104453,104454],{},"哪些 body 可以自由运动。",[34,104456,104457],{},"如何用名字在 Python 里找到 XML 中的对象。",[2129,104459,104460,104470],{},[2132,104461,104462],{},[2135,104463,104464,104467],{},[2138,104465,104466],{"align":25539},"标签",[2138,104468,104469],{"align":25539},"作用",[2176,104471,104472,104481,104491,104500,104510,104520,104533,104543],{},[2135,104473,104474,104478],{},[2181,104475,104476],{"align":25539},[23,104477,104310],{},[2181,104479,104480],{"align":25539},"根节点",[2135,104482,104483,104488],{},[2181,104484,104485],{"align":25539},[23,104486,104487],{},"\u003Coption>",[2181,104489,104490],{"align":25539},"仿真参数",[2135,104492,104493,104497],{},[2181,104494,104495],{"align":25539},[23,104496,104318],{},[2181,104498,104499],{"align":25539},"世界中的物体",[2135,104501,104502,104507],{},[2181,104503,104504],{"align":25539},[23,104505,104506],{},"\u003Cbody>",[2181,104508,104509],{"align":25539},"刚体",[2135,104511,104512,104517],{},[2181,104513,104514],{"align":25539},[23,104515,104516],{},"\u003Cgeom>",[2181,104518,104519],{"align":25539},"几何体、碰撞体、可视体",[2135,104521,104522,104530],{},[2181,104523,104524,26781,104527],{"align":25539},[23,104525,104526],{},"\u003Cjoint>",[23,104528,104529],{},"\u003Cfreejoint>",[2181,104531,104532],{"align":25539},"关节",[2135,104534,104535,104540],{},[2181,104536,104537],{"align":25539},[23,104538,104539],{},"\u003Csite>",[2181,104541,104542],{"align":25539},"标记点",[2135,104544,104545,104550],{},[2181,104546,104547],{"align":25539},[23,104548,104549],{},"\u003Cactuator>",[2181,104551,104552],{"align":25539},"控制器",[19,104554,104555],{},"初学时可以先记住：",[57,104557,104560],{"className":104558,"code":104559,"language":555,"meta":62},[553],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[23,104561,104559],{"__ignoreMap":62},[14,104563,102544],{"id":102543},[19,104565,102547],{},[57,104567,104569],{"className":25625,"code":104568,"language":25627,"meta":62,"style":62},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[23,104570,104571],{"__ignoreMap":62},[66,104572,104573,104575,104577,104579,104581,104583,104585,104587],{"class":68,"line":69},[66,104574,26380],{"class":3793},[66,104576,28116],{"class":356},[66,104578,25637],{"class":356},[66,104580,28201],{"class":102},[66,104582,104274],{"class":356},[66,104584,102588],{"class":356},[66,104586,104279],{"class":356},[66,104588,104589],{"class":356}," glfw-devel\n",[19,104591,104592],{},"pip:",[57,104594,104595],{"className":25625,"code":102693,"language":25627,"meta":62,"style":62},[23,104596,104597],{"__ignoreMap":62},[66,104598,104599,104601,104603,104605],{"class":68,"line":69},[66,104600,25634],{"class":3793},[66,104602,25637],{"class":356},[66,104604,102704],{"class":356},[66,104606,102707],{"class":356},[19,104608,104609],{},"conda:",[57,104611,104613],{"className":25625,"code":104612,"language":25627,"meta":62,"style":62},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[23,104614,104615,104632,104641],{"__ignoreMap":62},[66,104616,104617,104619,104621,104623,104626,104628,104630],{"class":68,"line":69},[66,104618,32130],{"class":3793},[66,104620,30976],{"class":356},[66,104622,26918],{"class":102},[66,104624,104625],{"class":356}," mujoco-xml",[66,104627,102749],{"class":356},[66,104629,102752],{"class":102},[66,104631,102755],{"class":102},[66,104633,104634,104636,104638],{"class":68,"line":80},[66,104635,32130],{"class":3793},[66,104637,102762],{"class":356},[66,104639,104640],{"class":356}," mujoco-xml\n",[66,104642,104643,104645,104647,104649],{"class":68,"line":112},[66,104644,25634],{"class":3793},[66,104646,25637],{"class":356},[66,104648,102704],{"class":356},[66,104650,102707],{"class":356},[19,104652,102778],{},[31,104654,104655,104658,104663],{},[34,104656,104657],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[34,104659,104660,104661,158],{},"本章使用基础标签，适用于 ",[23,104662,102801],{},[34,104664,104665],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,104667,102819],{"id":102818},[19,104669,104670],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[57,104672,104674],{"className":54849,"code":104673,"language":54851,"meta":62,"style":62},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[23,104675,104676,104690,104698,104703,104711],{"__ignoreMap":62},[66,104677,104678,104680,104682,104684,104686,104688],{"class":68,"line":69},[66,104679,413],{"class":76},[66,104681,102795],{"class":53084},[66,104683,103548],{"class":3793},[66,104685,99],{"class":76},[66,104687,64458],{"class":356},[66,104689,53091],{"class":76},[66,104691,104692,104694,104696],{"class":68,"line":80},[66,104693,53928],{"class":76},[66,104695,103614],{"class":53084},[66,104697,53091],{"class":76},[66,104699,104700],{"class":68,"line":112},[66,104701,104702],{"class":76},"    ...\n",[66,104704,104705,104707,104709],{"class":68,"line":129},[66,104706,54199],{"class":76},[66,104708,103614],{"class":53084},[66,104710,53091],{"class":76},[66,104712,104713,104715,104717],{"class":68,"line":138},[66,104714,53569],{"class":76},[66,104716,102795],{"class":53084},[66,104718,53091],{"class":76},[19,104720,104721,104723,104724,104726,104727,104730],{},[23,104722,53584],{}," 表示刚体。",[23,104725,102894],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[23,104728,104729],{},"joint"," 表示刚体相对父刚体如何运动。",[484,104732,104733],{"id":104733},"层级结构非常重要",[19,104735,104736],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[57,104738,104741],{"className":104739,"code":104740,"language":555,"meta":62},[553],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[23,104742,104740],{"__ignoreMap":62},[19,104744,104745,102792,104748,104751,104752,104755],{},[23,104746,104747],{},"red_box_geom",[23,104749,104750],{},"box_center"," 都属于 ",[23,104753,104754],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[57,104757,104759],{"className":54849,"code":104758,"language":54851,"meta":62,"style":62},"\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",[23,104760,104761,104781,104795,104815],{"__ignoreMap":62},[66,104762,104763,104765,104767,104769,104771,104773,104775,104777,104779],{"class":68,"line":69},[66,104764,413],{"class":76},[66,104766,53584],{"class":53084},[66,104768,16724],{"class":3793},[66,104770,99],{"class":76},[66,104772,55273],{"class":356},[66,104774,102880],{"class":3793},[66,104776,99],{"class":76},[66,104778,102885],{"class":356},[66,104780,53091],{"class":76},[66,104782,104783,104785,104787,104789,104791,104793],{"class":68,"line":80},[66,104784,53928],{"class":76},[66,104786,103393],{"class":53084},[66,104788,16724],{"class":3793},[66,104790,99],{"class":76},[66,104792,103734],{"class":356},[66,104794,102918],{"class":76},[66,104796,104797,104799,104801,104803,104805,104807,104809,104811,104813],{"class":68,"line":112},[66,104798,53928],{"class":76},[66,104800,102894],{"class":53084},[66,104802,55605],{"class":3793},[66,104804,99],{"class":76},[66,104806,55273],{"class":356},[66,104808,102910],{"class":3793},[66,104810,99],{"class":76},[66,104812,102915],{"class":356},[66,104814,102918],{"class":76},[66,104816,104817,104819,104821],{"class":68,"line":129},[66,104818,53569],{"class":76},[66,104820,53584],{"class":53084},[66,104822,53091],{"class":76},[19,104824,104825],{},"含义:",[31,104827,104828,104834,104839,104842],{},[34,104829,104830,104831,104833],{},"创建名为 ",[23,104832,55496],{}," 的刚体",[34,104835,104836,104837],{},"初始位置在世界坐标 ",[23,104838,102943],{},[34,104840,104841],{},"它有一个自由关节",[34,104843,104844],{},"它有一个盒子几何体",[484,104846,104847],{"id":104847},"坐标怎么理解",[19,104849,104850],{},"MuJoCo 默认使用三维坐标：",[57,104852,104855],{"className":104853,"code":104854,"language":555,"meta":62},[553],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[23,104856,104854],{"__ignoreMap":62},[19,104858,16438],{},[57,104860,104862],{"className":54849,"code":104861,"language":54851,"meta":62,"style":62},"pos=\"0 0 1\"\n",[23,104863,104864],{"__ignoreMap":62},[66,104865,104866],{"class":68,"line":69},[66,104867,104861],{"class":76},[19,104869,104870],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[484,104872,104874],{"id":104873},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,104876,104877,104878,84307,104881,104883],{},"不同 ",[23,104879,104880],{},"type",[23,104882,33289],{}," 含义不同：",[2129,104885,104886,104901],{},[2132,104887,104888],{},[2135,104889,104890,104894,104899],{},[2138,104891,104892],{"align":25539},[23,104893,104880],{},[2138,104895,104896,104898],{"align":25539},[23,104897,33289],{}," 示例",[2138,104900,102474],{"align":25539},[2176,104902,104903,104917,104932,104951],{},[2135,104904,104905,104909,104914],{},[2181,104906,104907],{"align":25539},[23,104908,55496],{},[2181,104910,104911],{"align":25539},[23,104912,104913],{},"size=\"0.1 0.2 0.3\"",[2181,104915,104916],{"align":25539},"x\u002Fy\u002Fz 半边长，不是完整长度",[2135,104918,104919,104924,104929],{},[2181,104920,104921],{"align":25539},[23,104922,104923],{},"sphere",[2181,104925,104926],{"align":25539},[23,104927,104928],{},"size=\"0.1\"",[2181,104930,104931],{"align":25539},"球半径",[2135,104933,104934,104939,104944],{},[2181,104935,104936],{"align":25539},[23,104937,104938],{},"capsule",[2181,104940,104941],{"align":25539},[23,104942,104943],{},"size=\"0.03\"",[2181,104945,104946,104947,104950],{"align":25539},"胶囊半径，长度常用 ",[23,104948,104949],{},"fromto"," 指定",[2135,104952,104953,104958,104963],{},[2181,104954,104955],{"align":25539},[23,104956,104957],{},"plane",[2181,104959,104960],{"align":25539},[23,104961,104962],{},"size=\"3 3 0.1\"",[2181,104964,104965],{"align":25539},"可视平面大小，通常当地面",[19,104967,104968,104969,104971,104972,104974],{},"最容易踩坑的是 box：",[23,104970,103797],{}," 表示边长大约是 ",[23,104973,33829],{},"，因为 MuJoCo 用的是半边长。",[484,104976,104978],{"id":104977},"site-是什么","site 是什么",[19,104980,104981,104984],{},[23,104982,104983],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[31,104986,104987,104990,104993,104996],{},[34,104988,104989],{},"标记机械臂末端。",[34,104991,104992],{},"标记目标位置。",[34,104994,104995],{},"放传感器或相机参考点。",[34,104997,104998],{},"在 Python 中读取某个关键点的世界坐标。",[19,105000,105001,105002,102792,105005,105008],{},"在后面的 Reacher 任务中，",[23,105003,105004],{},"tip",[23,105006,105007],{},"target"," 就会用 site 表示。",[14,105010,103027],{"id":103026},[57,105012,105014],{"className":59,"code":105013,"language":61,"meta":62,"style":62},"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",[23,105015,105016,105022,105032,105036,105040,105048,105053,105057,105061,105065,105070,105074,105079,105084,105089,105094,105098,105102,105106,105110,105114,105118,105130,105142,105150,105154,105169,105184,105188,105201,105216,105229,105242,105246,105262,105266,105270,105281,105293,105305,105317,105321,105325,105337],{"__ignoreMap":62},[66,105017,105018,105020],{"class":68,"line":69},[66,105019,284],{"class":72},[66,105021,103075],{"class":76},[66,105023,105024,105026,105028,105030],{"class":68,"line":80},[66,105025,284],{"class":72},[66,105027,33173],{"class":76},[66,105029,33176],{"class":72},[66,105031,33179],{"class":76},[66,105033,105034],{"class":68,"line":112},[66,105035,109],{"emptyLinePlaceholder":108},[66,105037,105038],{"class":68,"line":129},[66,105039,109],{"emptyLinePlaceholder":108},[66,105041,105042,105044,105046],{"class":68,"line":138},[66,105043,103088],{"class":102},[66,105045,15369],{"class":72},[66,105047,103093],{"class":356},[66,105049,105050],{"class":68,"line":227},[66,105051,105052],{"class":356},"\u003Cmujoco model=\"xml_basic\">\n",[66,105054,105055],{"class":68,"line":236},[66,105056,103103],{"class":356},[66,105058,105059],{"class":68,"line":241},[66,105060,109],{"emptyLinePlaceholder":108},[66,105062,105063],{"class":68,"line":372},[66,105064,103112],{"class":356},[66,105066,105067],{"class":68,"line":377},[66,105068,105069],{"class":356},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[66,105071,105072],{"class":68,"line":392},[66,105073,109],{"emptyLinePlaceholder":108},[66,105075,105076],{"class":68,"line":405},[66,105077,105078],{"class":356},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[66,105080,105081],{"class":68,"line":418},[66,105082,105083],{"class":356},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[66,105085,105086],{"class":68,"line":430},[66,105087,105088],{"class":356},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[66,105090,105091],{"class":68,"line":438},[66,105092,105093],{"class":356},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[66,105095,105096],{"class":68,"line":465},[66,105097,103141],{"class":356},[66,105099,105100],{"class":68,"line":1805},[66,105101,103146],{"class":356},[66,105103,105104],{"class":68,"line":1817},[66,105105,103151],{"class":356},[66,105107,105108],{"class":68,"line":1822},[66,105109,97473],{"class":356},[66,105111,105112],{"class":68,"line":1829},[66,105113,109],{"emptyLinePlaceholder":108},[66,105115,105116],{"class":68,"line":3529},[66,105117,109],{"emptyLinePlaceholder":108},[66,105119,105120,105122,105124,105126,105128],{"class":68,"line":3557},[66,105121,33739],{"class":72},[66,105123,3803],{"class":3793},[66,105125,103172],{"class":76},[66,105127,97461],{"class":102},[66,105129,126],{"class":76},[66,105131,105132,105134,105136,105138,105140],{"class":68,"line":3562},[66,105133,103181],{"class":76},[66,105135,99],{"class":72},[66,105137,103186],{"class":76},[66,105139,103088],{"class":102},[66,105141,313],{"class":76},[66,105143,105144,105146,105148],{"class":68,"line":3579},[66,105145,103195],{"class":76},[66,105147,99],{"class":72},[66,105149,103200],{"class":76},[66,105151,105152],{"class":68,"line":3584},[66,105153,109],{"emptyLinePlaceholder":108},[66,105155,105156,105159,105161,105164,105167],{"class":68,"line":3589},[66,105157,105158],{"class":76},"    box_body_id ",[66,105160,99],{"class":72},[66,105162,105163],{"class":76}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[66,105165,105166],{"class":356},"\"red_box\"",[66,105168,313],{"class":76},[66,105170,105171,105174,105176,105179,105182],{"class":68,"line":3594},[66,105172,105173],{"class":76},"    site_id ",[66,105175,99],{"class":72},[66,105177,105178],{"class":76}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[66,105180,105181],{"class":356},"\"box_center\"",[66,105183,313],{"class":76},[66,105185,105186],{"class":68,"line":3608},[66,105187,109],{"emptyLinePlaceholder":108},[66,105189,105190,105192,105195,105197,105199],{"class":68,"line":3613},[66,105191,380],{"class":72},[66,105193,105194],{"class":76}," box_body_id ",[66,105196,413],{"class":72},[66,105198,962],{"class":102},[66,105200,126],{"class":76},[66,105202,105203,105206,105209,105211,105214],{"class":68,"line":4401},[66,105204,105205],{"class":72},"        raise",[66,105207,105208],{"class":102}," RuntimeError",[66,105210,348],{"class":76},[66,105212,105213],{"class":356},"\"body red_box not found\"",[66,105215,313],{"class":76},[66,105217,105218,105220,105223,105225,105227],{"class":68,"line":4415},[66,105219,380],{"class":72},[66,105221,105222],{"class":76}," site_id ",[66,105224,413],{"class":72},[66,105226,962],{"class":102},[66,105228,126],{"class":76},[66,105230,105231,105233,105235,105237,105240],{"class":68,"line":4423},[66,105232,105205],{"class":72},[66,105234,105208],{"class":102},[66,105236,348],{"class":76},[66,105238,105239],{"class":356},"\"site box_center not found\"",[66,105241,313],{"class":76},[66,105243,105244],{"class":68,"line":4428},[66,105245,109],{"emptyLinePlaceholder":108},[66,105247,105248,105250,105252,105254,105256,105258,105260],{"class":68,"line":4434},[66,105249,1083],{"class":72},[66,105251,103275],{"class":76},[66,105253,507],{"class":72},[66,105255,510],{"class":102},[66,105257,348],{"class":76},[66,105259,3552],{"class":102},[66,105261,522],{"class":76},[66,105263,105264],{"class":68,"line":4440},[66,105265,103290],{"class":76},[66,105267,105268],{"class":68,"line":4445},[66,105269,109],{"emptyLinePlaceholder":108},[66,105271,105272,105274,105276,105279],{"class":68,"line":9759},[66,105273,132],{"class":102},[66,105275,348],{"class":76},[66,105277,105278],{"class":356},"\"simulation time:\"",[66,105280,103252],{"class":76},[66,105282,105283,105285,105287,105290],{"class":68,"line":9783},[66,105284,132],{"class":102},[66,105286,348],{"class":76},[66,105288,105289],{"class":356},"\"box body position:\"",[66,105291,105292],{"class":76},", data.xpos[box_body_id].copy())\n",[66,105294,105295,105297,105299,105302],{"class":68,"line":9788},[66,105296,132],{"class":102},[66,105298,348],{"class":76},[66,105300,105301],{"class":356},"\"site position:\"",[66,105303,105304],{"class":76},", data.site_xpos[site_id].copy())\n",[66,105306,105307,105309,105311,105314],{"class":68,"line":9794},[66,105308,132],{"class":102},[66,105310,348],{"class":76},[66,105312,105313],{"class":356},"\"box qpos:\"",[66,105315,105316],{"class":76},", np.array(data.qpos))\n",[66,105318,105319],{"class":68,"line":9821},[66,105320,109],{"emptyLinePlaceholder":108},[66,105322,105323],{"class":68,"line":9826},[66,105324,109],{"emptyLinePlaceholder":108},[66,105326,105327,105329,105331,105333,105335],{"class":68,"line":9832},[66,105328,3373],{"class":72},[66,105330,33014],{"class":102},[66,105332,959],{"class":72},[66,105334,103335],{"class":356},[66,105336,126],{"class":76},[66,105338,105339],{"class":68,"line":9844},[66,105340,103342],{"class":76},[19,105342,105343],{},"保存为：",[57,105345,105347],{"className":25625,"code":105346,"language":25627,"meta":62,"style":62},"touch ch2_xml_basic.py\n",[23,105348,105349],{"__ignoreMap":62},[66,105350,105351,105353],{"class":68,"line":69},[66,105352,103057],{"class":3793},[66,105354,105355],{"class":356}," ch2_xml_basic.py\n",[19,105357,104074],{},[57,105359,105361],{"className":25625,"code":105360,"language":25627,"meta":62,"style":62},"python ch2_xml_basic.py\n",[23,105362,105363],{"__ignoreMap":62},[66,105364,105365,105367],{"class":68,"line":69},[66,105366,61],{"class":3793},[66,105368,105355],{"class":356},[484,105370,103345],{"id":103345},[19,105372,105373],{},"用名字查找 body：",[57,105375,105377],{"className":59,"code":105376,"language":61,"meta":62,"style":62},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[23,105378,105379],{"__ignoreMap":62},[66,105380,105381,105384,105386,105388,105390],{"class":68,"line":69},[66,105382,105383],{"class":76},"box_body_id ",[66,105385,99],{"class":72},[66,105387,105163],{"class":76},[66,105389,105166],{"class":356},[66,105391,313],{"class":76},[19,105393,105394],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,105396,105397],{},"用名字查找 site：",[57,105399,105401],{"className":59,"code":105400,"language":61,"meta":62,"style":62},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[23,105402,105403],{"__ignoreMap":62},[66,105404,105405,105408,105410,105412,105414],{"class":68,"line":69},[66,105406,105407],{"class":76},"site_id ",[66,105409,99],{"class":72},[66,105411,105178],{"class":76},[66,105413,105181],{"class":356},[66,105415,313],{"class":76},[19,105417,105418,105419,105422,105423,105426],{},"注意第二个参数是对象类型。查 body 就用 ",[23,105420,105421],{},"mjOBJ_BODY","，查 site 就用 ",[23,105424,105425],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,105428,105429],{},"读取世界坐标：",[57,105431,105433],{"className":59,"code":105432,"language":61,"meta":62,"style":62},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[23,105434,105435,105440],{"__ignoreMap":62},[66,105436,105437],{"class":68,"line":69},[66,105438,105439],{"class":76},"data.xpos[box_body_id]\n",[66,105441,105442],{"class":68,"line":80},[66,105443,105444],{"class":76},"data.site_xpos[site_id]\n",[19,105446,105447,105450,105451,105454],{},[23,105448,105449],{},"xpos"," 是 body 的世界坐标，",[23,105452,105453],{},"site_xpos"," 是 site 的世界坐标。",[484,105456,103481],{"id":103481},[57,105458,105460],{"className":59,"code":105459,"language":61,"meta":62,"style":62},"import mujoco\nimport numpy as np\n",[23,105461,105462,105468],{"__ignoreMap":62},[66,105463,105464,105466],{"class":68,"line":69},[66,105465,284],{"class":72},[66,105467,103075],{"class":76},[66,105469,105470,105472,105474,105476],{"class":68,"line":80},[66,105471,284],{"class":72},[66,105473,33173],{"class":76},[66,105475,33176],{"class":72},[66,105477,33179],{"class":76},[19,105479,105480,105481,105484,105485,105488,105489,2204,105492,158],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[23,105482,105483],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[23,105486,105487],{},"as np"," 是习惯写法，后面就可以写 ",[23,105490,105491],{},"np.array(...)",[23,105493,105494],{},"np.round(...)",[57,105496,105497],{"className":59,"code":103368,"language":61,"meta":62,"style":62},[23,105498,105499,105507,105511],{"__ignoreMap":62},[66,105500,105501,105503,105505],{"class":68,"line":69},[66,105502,103088],{"class":102},[66,105504,15369],{"class":72},[66,105506,103093],{"class":356},[66,105508,105509],{"class":68,"line":80},[66,105510,103383],{"class":356},[66,105512,105513],{"class":68,"line":112},[66,105514,97473],{"class":356},[19,105516,105517,105518,158],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[23,105519,105520],{},"mujoco.MjModel.from_xml_string(XML)",[57,105522,105524],{"className":54849,"code":105523,"language":54851,"meta":62,"style":62},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[23,105525,105526],{"__ignoreMap":62},[66,105527,105528,105530,105532,105534,105536,105538,105540,105542,105545,105547,105549,105552,105554,105556,105559],{"class":68,"line":69},[66,105529,413],{"class":76},[66,105531,104983],{"class":53084},[66,105533,16724],{"class":3793},[66,105535,99],{"class":76},[66,105537,105181],{"class":356},[66,105539,102880],{"class":3793},[66,105541,99],{"class":76},[66,105543,105544],{"class":356},"\"0 0 0\"",[66,105546,102910],{"class":3793},[66,105548,99],{"class":76},[66,105550,105551],{"class":356},"\"0.03\"",[66,105553,80545],{"class":3793},[66,105555,99],{"class":76},[66,105557,105558],{"class":356},"\"0 1 0 1\"",[66,105560,102918],{"class":76},[19,105562,105563,105565,105566,105569,105570,105572,105573,105576],{},[23,105564,104983],{}," 是标记点。",[23,105567,105568],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[23,105571,104943],{}," 表示显示出来的小球大小。",[23,105574,105575],{},"rgba=\"0 1 0 1\""," 表示绿色。",[57,105578,105579],{"className":59,"code":105376,"language":61,"meta":62,"style":62},[23,105580,105581],{"__ignoreMap":62},[66,105582,105583,105585,105587,105589,105591],{"class":68,"line":69},[66,105584,105383],{"class":76},[66,105586,99],{"class":72},[66,105588,105163],{"class":76},[66,105590,105166],{"class":356},[66,105592,313],{"class":76},[19,105594,105595,105596,105598],{},"这行的作用是：根据名字 ",[23,105597,105166],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,105600,105601],{},"拆开看：",[31,105603,105604,105610,105615,105621],{},[34,105605,105606,105609],{},[23,105607,105608],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[34,105611,105612,105614],{},[23,105613,103858],{}," 是被查询的模型。",[34,105616,105617,105620],{},[23,105618,105619],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[34,105622,105623,105625],{},[23,105624,105166],{}," 是 XML 里写的名字。",[57,105627,105628],{"className":59,"code":105400,"language":61,"meta":62,"style":62},[23,105629,105630],{"__ignoreMap":62},[66,105631,105632,105634,105636,105638,105640],{"class":68,"line":69},[66,105633,105407],{"class":76},[66,105635,99],{"class":72},[66,105637,105178],{"class":76},[66,105639,105181],{"class":356},[66,105641,313],{"class":76},[19,105643,105644,105645,158],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[23,105646,105181],{},[57,105648,105650],{"className":59,"code":105649,"language":61,"meta":62,"style":62},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[23,105651,105652,105664],{"__ignoreMap":62},[66,105653,105654,105656,105658,105660,105662],{"class":68,"line":69},[66,105655,3373],{"class":72},[66,105657,105194],{"class":76},[66,105659,413],{"class":72},[66,105661,962],{"class":102},[66,105663,126],{"class":76},[66,105665,105666,105669,105671,105673,105675],{"class":68,"line":80},[66,105667,105668],{"class":72},"    raise",[66,105670,105208],{"class":102},[66,105672,348],{"class":76},[66,105674,105213],{"class":356},[66,105676,313],{"class":76},[19,105678,105679,105681,105682,105685,105686,105689,105690,105693],{},[23,105680,3373],{}," 是条件判断。",[23,105683,105684],{},"mj_name2id"," 找不到对象时会返回 ",[23,105687,105688],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[23,105691,105692],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[57,105695,105697],{"className":59,"code":105696,"language":61,"meta":62,"style":62},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[23,105698,105699,105715],{"__ignoreMap":62},[66,105700,105701,105703,105705,105707,105709,105711,105713],{"class":68,"line":69},[66,105702,502],{"class":72},[66,105704,103275],{"class":76},[66,105706,507],{"class":72},[66,105708,510],{"class":102},[66,105710,348],{"class":76},[66,105712,3552],{"class":102},[66,105714,522],{"class":76},[66,105716,105717],{"class":68,"line":80},[66,105718,103472],{"class":76},[19,105720,105721],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[57,105723,105725],{"className":59,"code":105724,"language":61,"meta":62,"style":62},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[23,105726,105727],{"__ignoreMap":62},[66,105728,105729,105731,105733,105735],{"class":68,"line":69},[66,105730,244],{"class":102},[66,105732,348],{"class":76},[66,105734,105289],{"class":356},[66,105736,105292],{"class":76},[19,105738,105739,105741,105742,105745],{},[23,105740,102853],{}," 保存所有 body 的世界坐标。",[23,105743,105744],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[57,105747,105749],{"className":59,"code":105748,"language":61,"meta":62,"style":62},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[23,105750,105751],{"__ignoreMap":62},[66,105752,105753,105755,105757,105759],{"class":68,"line":69},[66,105754,244],{"class":102},[66,105756,348],{"class":76},[66,105758,105301],{"class":356},[66,105760,105304],{"class":76},[19,105762,105763,105766,105767,105769],{},[23,105764,105765],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[23,105768,104750],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[57,105771,105773],{"className":59,"code":105772,"language":61,"meta":62,"style":62},"print(\"box qpos:\", np.array(data.qpos))\n",[23,105774,105775],{"__ignoreMap":62},[66,105776,105777,105779,105781,105783],{"class":68,"line":69},[66,105778,244],{"class":102},[66,105780,348],{"class":76},[66,105782,105313],{"class":356},[66,105784,105316],{"class":76},[19,105786,105787,105788,105791],{},"这里打印广义位置数组。",[23,105789,105790],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,105793,104089],{"id":104088},[19,105795,105796,105797,105800,105801,158],{},"程序会输出 ",[23,105798,105799],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[23,105802,105803],{},"qpos",[19,105805,105806,105808,105809,105812,105813,105816],{},[23,105807,105744],{}," 是 body 的世界坐标位置。",[23,105810,105811],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[23,105814,105815],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,105818,83999,105819,84307,105821,105823],{},[23,105820,104750],{},[23,105822,105568],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,105825,105826],{},"如果你把 site 改成：",[57,105828,105830],{"className":54849,"code":105829,"language":54851,"meta":62,"style":62},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[23,105831,105832],{"__ignoreMap":62},[66,105833,105834,105836,105838,105840,105842,105845,105847,105849,105852,105854,105856,105858,105860,105862,105864],{"class":68,"line":69},[66,105835,413],{"class":76},[66,105837,104983],{"class":53084},[66,105839,16724],{"class":3793},[66,105841,99],{"class":76},[66,105843,105844],{"class":356},"\"box_top\"",[66,105846,102880],{"class":3793},[66,105848,99],{"class":76},[66,105850,105851],{"class":356},"\"0 0 0.15\"",[66,105853,102910],{"class":3793},[66,105855,99],{"class":76},[66,105857,105551],{"class":356},[66,105859,80545],{"class":3793},[66,105861,99],{"class":76},[66,105863,105558],{"class":356},[66,105865,102918],{"class":76},[19,105867,105868,105869,105872],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[23,105870,105871],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,105874,104121],{"id":104120},[31,105876,105877,105886,105889,105896,105902,105913],{},[34,105878,104184,105879,105881,105882,104187,105884,158],{},[23,105880,104754],{}," 的初始高度从 ",[23,105883,304],{},[23,105885,795],{},[34,105887,105888],{},"重新运行程序。",[34,105890,105891,105892,105895],{},"观察 ",[23,105893,105894],{},"box qpos"," 和最终位置是否变化。",[34,105897,105898,105899,105901],{},"故意把 ",[23,105900,104983],{}," 名称改错，确认程序能报错。",[34,105903,104184,105904,105906,105907,104187,105909,105912],{},[23,105905,102894],{}," 的颜色 ",[23,105908,103805],{},[23,105910,105911],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[34,105914,104184,105915,84307,105917,104187,105920,105923,105924,105926],{},[23,105916,104750],{},[23,105918,105919],{},"pos",[23,105921,105922],{},"0 0 0.2","，观察 ",[23,105925,105871],{}," 如何变化。",[14,105928,104226],{"id":104225},[484,105930,105932],{"id":105931},"xml-error-schema-violation",[23,105933,105934],{},"XML Error: Schema violation",[19,105936,105937],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[484,105939,105941,83067,105943],{"id":105940},"mj_name2id-返回-1",[23,105942,105684],{},[23,105944,105688],{},[19,105946,105947,105948,105951],{},"说明名字没有找到。检查 XML 中 ",[23,105949,105950],{},"name=\"...\"","，并确认对象类型正确。",[484,105953,105954],{"id":105954},"物体不下落",[19,105956,104296],{},[31,105958,105959,105964,105969],{},[34,105960,105961,105962],{},"body 是否有 ",[23,105963,103393],{},[34,105965,105966,105967],{},"gravity 是否为 ",[23,105968,104362],{},[34,105970,105971,105972,105974],{},"body 是否被固定在 ",[23,105973,103614],{}," 中",[484,105976,105977],{"id":105977},"坐标看起来不符合预期",[19,105979,105980],{},"先区分两种坐标：",[2129,105982,105983,105992],{},[2132,105984,105985],{},[2135,105986,105987,105990],{},[2138,105988,105989],{"align":25539},"坐标",[2138,105991,102474],{"align":25539},[2176,105993,105994,106004],{},[2135,105995,105996,106001],{},[2181,105997,105998,105999],{"align":25539},"XML 里的 ",[23,106000,105919],{},[2181,106002,106003],{"align":25539},"相对父 body 的局部坐标",[2135,106005,106006,106012],{},[2181,106007,106008,26781,106010],{"align":25539},[23,106009,102853],{},[23,106011,105765],{},[2181,106013,106014],{"align":25539},"仿真更新后的世界坐标",[19,106016,106017,106018,106020,106021,84316,106024,106026],{},"如果你修改了 ",[23,106019,102844],{},"，但还没调用 ",[23,106022,106023],{},"mj_forward",[23,106025,102989],{},"，世界坐标可能还没有更新。",[14,106028,104380],{"id":104379},[19,106030,106031],{},"MJCF 建模先掌握四件事：",[31,106033,106034,106039,106044,106049],{},[34,106035,106036,106038],{},[23,106037,53584],{}," 表示刚体层级。",[34,106040,106041,106043],{},[23,106042,102894],{}," 表示形状、碰撞和质量。",[34,106045,106046,106048],{},[23,106047,104729],{}," 决定 body 能不能动、怎么动。",[34,106050,106051,106053],{},[23,106052,104983],{}," 用来标记关键点，方便 Python 读取位置。",[19,106055,106056],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[1903,106058,106059],{},"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":62,"searchDepth":80,"depth":80,"links":106061},[106062,106063,106064,106070,106074,106075,106076,106083],{"id":102420,"depth":80,"text":102421},{"id":102543,"depth":80,"text":102544},{"id":102818,"depth":80,"text":102819,"children":106065},[106066,106067,106068,106069],{"id":104733,"depth":112,"text":104733},{"id":104847,"depth":112,"text":104847},{"id":104873,"depth":112,"text":104874},{"id":104977,"depth":112,"text":104978},{"id":103026,"depth":80,"text":103027,"children":106071},[106072,106073],{"id":103345,"depth":112,"text":103345},{"id":103481,"depth":112,"text":103481},{"id":104088,"depth":80,"text":104089},{"id":104120,"depth":80,"text":104121},{"id":104225,"depth":80,"text":104226,"children":106077},[106078,106079,106081,106082],{"id":105931,"depth":112,"text":105934},{"id":105940,"depth":112,"text":106080},"mj_name2id 返回 -1",{"id":105954,"depth":112,"text":105954},{"id":105977,"depth":112,"text":105977},{"id":104379,"depth":80,"text":104380},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":104427,"description":62},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":106090,"title":106091,"body":106092,"description":62,"extension":1927,"meta":107587,"navigation":108,"path":107588,"seo":107589,"stem":107590,"__hash__":107591},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":106093,"toc":107559},[106094,106097,106099,106102,106105,106143,106146,106152,106155,106157,106159,106186,106188,106202,106204,106245,106247,106271,106273,106276,106285,106294,106297,106306,106314,106323,106326,106336,106339,106391,106398,106404,106412,106460,106463,106482,106485,106493,106497,106506,106539,106541,106889,106891,106903,106905,106916,106918,106921,106942,106948,106951,106976,106986,106989,106997,107000,107003,107024,107035,107037,107057,107060,107081,107090,107109,107115,107140,107143,107157,107164,107188,107191,107199,107208,107224,107236,107244,107253,107255,107258,107282,107287,107290,107312,107314,107353,107355,107362,107364,107372,107375,107378,107390,107431,107438,107449,107456,107459,107508,107511,107514,107520,107522,107527,107553,107556],[10,106095,106091],{"id":106096},"_3python-控制接口读取状态与推进仿真",[14,106098,102421],{"id":102420},[19,106100,106101],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,106103,106104],{},"你将学习:",[31,106106,106107,106112,106117,106121,106126,106137],{},[34,106108,106109],{},[23,106110,106111],{},"MjModel.from_xml_string",[34,106113,106114],{},[23,106115,106116],{},"MjData(model)",[34,106118,106119],{},[23,106120,102989],{},[34,106122,106123],{},[23,106124,106125],{},"mj_resetData",[34,106127,106128,106129,2204,106131,2204,106134],{},"读取 ",[23,106130,105803],{},[23,106132,106133],{},"qvel",[23,106135,106136],{},"ctrl",[34,106138,106139,106140],{},"使用 ",[23,106141,106142],{},"model.opt.timestep",[19,106144,106145],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[57,106147,106150],{"className":106148,"code":106149,"language":555,"meta":62},[553],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[23,106151,106149],{"__ignoreMap":62},[19,106153,106154],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,106156,102544],{"id":102543},[19,106158,102547],{},[57,106160,106162],{"className":25625,"code":106161,"language":25627,"meta":62,"style":62},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[23,106163,106164],{"__ignoreMap":62},[66,106165,106166,106168,106170,106172,106174,106177,106179,106181,106183],{"class":68,"line":69},[66,106167,26380],{"class":3793},[66,106169,28116],{"class":356},[66,106171,25637],{"class":356},[66,106173,28201],{"class":102},[66,106175,106176],{"class":356}," python3",[66,106178,102572],{"class":356},[66,106180,104274],{"class":356},[66,106182,102588],{"class":356},[66,106184,106185],{"class":356}," glfw\n",[19,106187,104592],{},[57,106189,106190],{"className":25625,"code":102693,"language":25627,"meta":62,"style":62},[23,106191,106192],{"__ignoreMap":62},[66,106193,106194,106196,106198,106200],{"class":68,"line":69},[66,106195,25634],{"class":3793},[66,106197,25637],{"class":356},[66,106199,102704],{"class":356},[66,106201,102707],{"class":356},[19,106203,104609],{},[57,106205,106207],{"className":25625,"code":106206,"language":25627,"meta":62,"style":62},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[23,106208,106209,106226,106235],{"__ignoreMap":62},[66,106210,106211,106213,106215,106217,106220,106222,106224],{"class":68,"line":69},[66,106212,32130],{"class":3793},[66,106214,30976],{"class":356},[66,106216,26918],{"class":102},[66,106218,106219],{"class":356}," mujoco-python-api",[66,106221,102749],{"class":356},[66,106223,102752],{"class":102},[66,106225,102755],{"class":102},[66,106227,106228,106230,106232],{"class":68,"line":80},[66,106229,32130],{"class":3793},[66,106231,102762],{"class":356},[66,106233,106234],{"class":356}," mujoco-python-api\n",[66,106236,106237,106239,106241,106243],{"class":68,"line":112},[66,106238,25634],{"class":3793},[66,106240,25637],{"class":356},[66,106242,102704],{"class":356},[66,106244,102707],{"class":356},[19,106246,102778],{},[31,106248,106249,106256,106265],{},[34,106250,106251,102792,106253,106255],{},[23,106252,102449],{},[23,106254,102454],{}," 是官方 Python bindings 的类名。",[34,106257,106258,106259,106262,106263,158],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[23,106260,106261],{},"mjModel"," 在 Python 中是 ",[23,106264,102483],{},[34,106266,106267,106268,158],{},"不要使用 ",[23,106269,106270],{},"sim = mujoco_py.MjSim(...)",[14,106272,102819],{"id":102818},[19,106274,106275],{},"仿真推进核心代码:",[57,106277,106279],{"className":59,"code":106278,"language":61,"meta":62,"style":62},"mujoco.mj_step(model, data)\n",[23,106280,106281],{"__ignoreMap":62},[66,106282,106283],{"class":68,"line":69},[66,106284,106278],{"class":76},[19,106286,106287,106288,2204,106290,2204,106292,158],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[23,106289,102844],{},[23,106291,102847],{},[23,106293,102841],{},[19,106295,106296],{},"重置仿真:",[57,106298,106300],{"className":59,"code":106299,"language":61,"meta":62,"style":62},"mujoco.mj_resetData(model, data)\n",[23,106301,106302],{"__ignoreMap":62},[66,106303,106304],{"class":68,"line":69},[66,106305,106299],{"class":76},[19,106307,106308,106309,84316,106311,106313],{},"如果手动修改了 ",[23,106310,102844],{},[23,106312,102847],{},"，通常应调用:",[57,106315,106317],{"className":59,"code":106316,"language":61,"meta":62,"style":62},"mujoco.mj_forward(model, data)\n",[23,106318,106319],{"__ignoreMap":62},[66,106320,106321],{"class":68,"line":69},[66,106322,106316],{"class":76},[19,106324,106325],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[484,106327,106329,2204,106331,2204,106333,106335],{"id":106328},"qposqvelctrl-是什么",[23,106330,105803],{},[23,106332,106133],{},[23,106334,106136],{}," 是什么",[19,106337,106338],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[2129,106340,106341,106353],{},[2132,106342,106343],{},[2135,106344,106345,106348,106350],{},[2138,106346,106347],{"align":25539},"字段",[2138,106349,102474],{"align":25539},[2138,106351,106352],{"align":25539},"谁来修改",[2176,106354,106355,106367,106379],{},[2135,106356,106357,106361,106364],{},[2181,106358,106359],{"align":25539},[23,106360,102844],{},[2181,106362,106363],{"align":25539},"广义位置，例如小车位置、关节角、自由物体位置姿态",[2181,106365,106366],{"align":25539},"MuJoCo 更新，也可以手动设置初始状态",[2135,106368,106369,106373,106376],{},[2181,106370,106371],{"align":25539},[23,106372,102847],{},[2181,106374,106375],{"align":25539},"广义速度，例如小车速度、关节角速度",[2181,106377,106378],{"align":25539},"MuJoCo 更新，也可以手动清零",[2135,106380,106381,106385,106388],{},[2181,106382,106383],{"align":25539},[23,106384,102850],{},[2181,106386,106387],{"align":25539},"actuator 的控制输入",[2181,106389,106390],{"align":25539},"主要由你的控制代码写入",[19,106392,841,106393,102792,106395,106397],{},[23,106394,105803],{},[23,106396,106133],{}," 不一定同维。自由刚体就是典型例子：",[57,106399,106402],{"className":106400,"code":106401,"language":555,"meta":62},[553],"freejoint: qpos 7 维，qvel 6 维\n",[23,106403,106401],{"__ignoreMap":62},[484,106405,106407,102792,106409,106411],{"id":106406},"mj_step-和-mj_forward-的区别",[23,106408,102989],{},[23,106410,106023],{}," 的区别",[2129,106413,106414,106427],{},[2132,106415,106416],{},[2135,106417,106418,106421,106424],{},[2138,106419,106420],{"align":25539},"函数",[2138,106422,106423],{"align":25539},"是否推进时间",[2138,106425,106426],{"align":25539},"什么时候用",[2176,106428,106429,106442],{},[2135,106430,106431,106436,106439],{},[2181,106432,106433],{"align":25539},[23,106434,106435],{},"mj_step(model, data)",[2181,106437,106438],{"align":25539},"是",[2181,106440,106441],{"align":25539},"正常仿真循环，每调用一次前进一步",[2135,106443,106444,106449,106452],{},[2181,106445,106446],{"align":25539},[23,106447,106448],{},"mj_forward(model, data)",[2181,106450,106451],{"align":25539},"否",[2181,106453,106454,106455,2204,106457,106459],{"align":25539},"手动改了 ",[23,106456,105803],{},[23,106458,106133],{}," 后，刷新派生量",[19,106461,106462],{},"例如你写：",[57,106464,106466],{"className":59,"code":106465,"language":61,"meta":62,"style":62},"data.qpos[2] = 2.0\n",[23,106467,106468],{"__ignoreMap":62},[66,106469,106470,106473,106475,106477,106479],{"class":68,"line":69},[66,106471,106472],{"class":76},"data.qpos[",[66,106474,795],{"class":102},[66,106476,6259],{"class":76},[66,106478,99],{"class":72},[66,106480,106481],{"class":102}," 2.0\n",[19,106483,106484],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[57,106486,106487],{"className":59,"code":106316,"language":61,"meta":62,"style":62},[23,106488,106489],{"__ignoreMap":62},[66,106490,106491],{"class":68,"line":69},[66,106492,106316],{"class":76},[484,106494,106496],{"id":106495},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,106498,106499,106502,106503,106505],{},[23,106500,106501],{},"mujoco.mj_resetData(model, data)"," 会把 ",[23,106504,35190],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[57,106507,106509],{"className":59,"code":106508,"language":61,"meta":62,"style":62},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[23,106510,106511,106515,106525,106535],{"__ignoreMap":62},[66,106512,106513],{"class":68,"line":69},[66,106514,106299],{"class":76},[66,106516,106517,106520,106522],{"class":68,"line":80},[66,106518,106519],{"class":76},"data.qpos[:] ",[66,106521,99],{"class":72},[66,106523,106524],{"class":76}," random_qpos\n",[66,106526,106527,106530,106532],{"class":68,"line":112},[66,106528,106529],{"class":76},"data.qvel[:] ",[66,106531,99],{"class":72},[66,106533,106534],{"class":102}," 0.0\n",[66,106536,106537],{"class":68,"line":129},[66,106538,106316],{"class":76},[14,106540,103027],{"id":103026},[57,106542,106544],{"className":59,"code":106543,"language":61,"meta":62,"style":62},"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",[23,106545,106546,106552,106562,106566,106570,106578,106583,106587,106591,106595,106600,106604,106609,106614,106619,106623,106627,106631,106635,106639,106643,106662,106669,106681,106692,106708,106724,106728,106732,106744,106756,106764,106768,106779,106783,106799,106803,106807,106816,106820,106825,106834,106838,106851,106856,106865,106869,106873,106885],{"__ignoreMap":62},[66,106547,106548,106550],{"class":68,"line":69},[66,106549,284],{"class":72},[66,106551,103075],{"class":76},[66,106553,106554,106556,106558,106560],{"class":68,"line":80},[66,106555,284],{"class":72},[66,106557,33173],{"class":76},[66,106559,33176],{"class":72},[66,106561,33179],{"class":76},[66,106563,106564],{"class":68,"line":112},[66,106565,109],{"emptyLinePlaceholder":108},[66,106567,106568],{"class":68,"line":129},[66,106569,109],{"emptyLinePlaceholder":108},[66,106571,106572,106574,106576],{"class":68,"line":138},[66,106573,103088],{"class":102},[66,106575,15369],{"class":72},[66,106577,103093],{"class":356},[66,106579,106580],{"class":68,"line":227},[66,106581,106582],{"class":356},"\u003Cmujoco model=\"state_api\">\n",[66,106584,106585],{"class":68,"line":236},[66,106586,103103],{"class":356},[66,106588,106589],{"class":68,"line":241},[66,106590,109],{"emptyLinePlaceholder":108},[66,106592,106593],{"class":68,"line":372},[66,106594,103112],{"class":356},[66,106596,106597],{"class":68,"line":377},[66,106598,106599],{"class":356},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[66,106601,106602],{"class":68,"line":392},[66,106603,109],{"emptyLinePlaceholder":108},[66,106605,106606],{"class":68,"line":405},[66,106607,106608],{"class":356},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[66,106610,106611],{"class":68,"line":418},[66,106612,106613],{"class":356},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[66,106615,106616],{"class":68,"line":430},[66,106617,106618],{"class":356},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[66,106620,106621],{"class":68,"line":438},[66,106622,103141],{"class":356},[66,106624,106625],{"class":68,"line":465},[66,106626,103146],{"class":356},[66,106628,106629],{"class":68,"line":1805},[66,106630,103151],{"class":356},[66,106632,106633],{"class":68,"line":1817},[66,106634,97473],{"class":356},[66,106636,106637],{"class":68,"line":1822},[66,106638,109],{"emptyLinePlaceholder":108},[66,106640,106641],{"class":68,"line":1829},[66,106642,109],{"emptyLinePlaceholder":108},[66,106644,106645,106647,106650,106653,106655,106658,106660],{"class":68,"line":3529},[66,106646,33739],{"class":72},[66,106648,106649],{"class":3793}," print_state",[66,106651,106652],{"class":76},"(prefix: ",[66,106654,3144],{"class":102},[66,106656,106657],{"class":76},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[66,106659,97461],{"class":102},[66,106661,126],{"class":76},[66,106663,106664,106666],{"class":68,"line":3557},[66,106665,132],{"class":102},[66,106667,106668],{"class":76},"(prefix)\n",[66,106670,106671,106673,106675,106678],{"class":68,"line":3562},[66,106672,132],{"class":102},[66,106674,348],{"class":76},[66,106676,106677],{"class":356},"\"  timestep:\"",[66,106679,106680],{"class":76},", model.opt.timestep)\n",[66,106682,106683,106685,106687,106690],{"class":68,"line":3579},[66,106684,132],{"class":102},[66,106686,348],{"class":76},[66,106688,106689],{"class":356},"\"  time:\"",[66,106691,103252],{"class":76},[66,106693,106694,106696,106698,106701,106704,106706],{"class":68,"line":3584},[66,106695,132],{"class":102},[66,106697,348],{"class":76},[66,106699,106700],{"class":356},"\"  qpos:\"",[66,106702,106703],{"class":76},", np.round(data.qpos.copy(), ",[66,106705,1076],{"class":102},[66,106707,360],{"class":76},[66,106709,106710,106712,106714,106717,106720,106722],{"class":68,"line":3589},[66,106711,132],{"class":102},[66,106713,348],{"class":76},[66,106715,106716],{"class":356},"\"  qvel:\"",[66,106718,106719],{"class":76},", np.round(data.qvel.copy(), ",[66,106721,1076],{"class":102},[66,106723,360],{"class":76},[66,106725,106726],{"class":68,"line":3594},[66,106727,109],{"emptyLinePlaceholder":108},[66,106729,106730],{"class":68,"line":3608},[66,106731,109],{"emptyLinePlaceholder":108},[66,106733,106734,106736,106738,106740,106742],{"class":68,"line":3613},[66,106735,33739],{"class":72},[66,106737,3803],{"class":3793},[66,106739,103172],{"class":76},[66,106741,97461],{"class":102},[66,106743,126],{"class":76},[66,106745,106746,106748,106750,106752,106754],{"class":68,"line":4401},[66,106747,103181],{"class":76},[66,106749,99],{"class":72},[66,106751,103186],{"class":76},[66,106753,103088],{"class":102},[66,106755,313],{"class":76},[66,106757,106758,106760,106762],{"class":68,"line":4415},[66,106759,103195],{"class":76},[66,106761,99],{"class":72},[66,106763,103200],{"class":76},[66,106765,106766],{"class":68,"line":4423},[66,106767,109],{"emptyLinePlaceholder":108},[66,106769,106770,106773,106776],{"class":68,"line":4428},[66,106771,106772],{"class":76},"    print_state(",[66,106774,106775],{"class":356},"\"initial\"",[66,106777,106778],{"class":76},", model, data)\n",[66,106780,106781],{"class":68,"line":4434},[66,106782,109],{"emptyLinePlaceholder":108},[66,106784,106785,106787,106789,106791,106793,106795,106797],{"class":68,"line":4440},[66,106786,1083],{"class":72},[66,106788,103275],{"class":76},[66,106790,507],{"class":72},[66,106792,510],{"class":102},[66,106794,348],{"class":76},[66,106796,2635],{"class":102},[66,106798,522],{"class":76},[66,106800,106801],{"class":68,"line":4445},[66,106802,103290],{"class":76},[66,106804,106805],{"class":68,"line":9759},[66,106806,109],{"emptyLinePlaceholder":108},[66,106808,106809,106811,106814],{"class":68,"line":9783},[66,106810,106772],{"class":76},[66,106812,106813],{"class":356},"\"after 50 steps\"",[66,106815,106778],{"class":76},[66,106817,106818],{"class":68,"line":9788},[66,106819,109],{"emptyLinePlaceholder":108},[66,106821,106822],{"class":68,"line":9794},[66,106823,106824],{"class":76},"    mujoco.mj_resetData(model, data)\n",[66,106826,106827,106829,106832],{"class":68,"line":9821},[66,106828,106772],{"class":76},[66,106830,106831],{"class":356},"\"after reset\"",[66,106833,106778],{"class":76},[66,106835,106836],{"class":68,"line":9826},[66,106837,109],{"emptyLinePlaceholder":108},[66,106839,106840,106843,106845,106847,106849],{"class":68,"line":9832},[66,106841,106842],{"class":76},"    data.qpos[",[66,106844,795],{"class":102},[66,106846,6259],{"class":76},[66,106848,99],{"class":72},[66,106850,106481],{"class":102},[66,106852,106853],{"class":68,"line":9844},[66,106854,106855],{"class":76},"    mujoco.mj_forward(model, data)\n",[66,106857,106858,106860,106863],{"class":68,"line":9856},[66,106859,106772],{"class":76},[66,106861,106862],{"class":356},"\"after manual qpos edit\"",[66,106864,106778],{"class":76},[66,106866,106867],{"class":68,"line":9868},[66,106868,109],{"emptyLinePlaceholder":108},[66,106870,106871],{"class":68,"line":11523},[66,106872,109],{"emptyLinePlaceholder":108},[66,106874,106875,106877,106879,106881,106883],{"class":68,"line":11548},[66,106876,3373],{"class":72},[66,106878,33014],{"class":102},[66,106880,959],{"class":72},[66,106882,103335],{"class":356},[66,106884,126],{"class":76},[66,106886,106887],{"class":68,"line":11571},[66,106888,103342],{"class":76},[19,106890,105343],{},[57,106892,106894],{"className":25625,"code":106893,"language":25627,"meta":62,"style":62},"touch ch3_python_state.py\n",[23,106895,106896],{"__ignoreMap":62},[66,106897,106898,106900],{"class":68,"line":69},[66,106899,103057],{"class":3793},[66,106901,106902],{"class":356}," ch3_python_state.py\n",[19,106904,104074],{},[57,106906,106908],{"className":25625,"code":106907,"language":25627,"meta":62,"style":62},"python ch3_python_state.py\n",[23,106909,106910],{"__ignoreMap":62},[66,106911,106912,106914],{"class":68,"line":69},[66,106913,61],{"class":3793},[66,106915,106902],{"class":356},[484,106917,103345],{"id":103345},[19,106919,106920],{},"打印状态的函数：",[57,106922,106924],{"className":59,"code":106923,"language":61,"meta":62,"style":62},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[23,106925,106926],{"__ignoreMap":62},[66,106927,106928,106930,106932,106934,106936,106938,106940],{"class":68,"line":69},[66,106929,33739],{"class":72},[66,106931,106649],{"class":3793},[66,106933,106652],{"class":76},[66,106935,3144],{"class":102},[66,106937,106657],{"class":76},[66,106939,97461],{"class":102},[66,106941,126],{"class":76},[19,106943,106944,106945,106947],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[23,106946,35190],{}," 里发生了什么。",[19,106949,106950],{},"推进 50 步：",[57,106952,106954],{"className":59,"code":106953,"language":61,"meta":62,"style":62},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[23,106955,106956,106972],{"__ignoreMap":62},[66,106957,106958,106960,106962,106964,106966,106968,106970],{"class":68,"line":69},[66,106959,502],{"class":72},[66,106961,103275],{"class":76},[66,106963,507],{"class":72},[66,106965,510],{"class":102},[66,106967,348],{"class":76},[66,106969,2635],{"class":102},[66,106971,522],{"class":76},[66,106973,106974],{"class":68,"line":80},[66,106975,103472],{"class":76},[19,106977,106978,106979,106982,106983,106985],{},"由于 ",[23,106980,106981],{},"timestep=0.01","，所以 50 步后时间约为 ",[23,106984,37117],{}," 秒。",[19,106987,106988],{},"重置：",[57,106990,106991],{"className":59,"code":106299,"language":61,"meta":62,"style":62},[23,106992,106993],{"__ignoreMap":62},[66,106994,106995],{"class":68,"line":69},[66,106996,106299],{"class":76},[19,106998,106999],{},"这会把时间、位置、速度恢复到初始状态。",[19,107001,107002],{},"手动改高度：",[57,107004,107006],{"className":59,"code":107005,"language":61,"meta":62,"style":62},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[23,107007,107008,107020],{"__ignoreMap":62},[66,107009,107010,107012,107014,107016,107018],{"class":68,"line":69},[66,107011,106472],{"class":76},[66,107013,795],{"class":102},[66,107015,6259],{"class":76},[66,107017,99],{"class":72},[66,107019,106481],{"class":102},[66,107021,107022],{"class":68,"line":80},[66,107023,106316],{"class":76},[19,107025,107026,107027,107030,107031,107034],{},"这个例子里 ",[23,107028,107029],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[23,107032,107033],{},"2.0"," 表示把小球放到更高的位置。",[484,107036,103481],{"id":103481},[57,107038,107039],{"className":59,"code":106923,"language":61,"meta":62,"style":62},[23,107040,107041],{"__ignoreMap":62},[66,107042,107043,107045,107047,107049,107051,107053,107055],{"class":68,"line":69},[66,107044,33739],{"class":72},[66,107046,106649],{"class":3793},[66,107048,106652],{"class":76},[66,107050,3144],{"class":102},[66,107052,106657],{"class":76},[66,107054,97461],{"class":102},[66,107056,126],{"class":76},[19,107058,107059],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[31,107061,107062,107071,107076],{},[34,107063,107064,107067,107068,107070],{},[23,107065,107066],{},"prefix","：一段文字，比如 ",[23,107069,106775],{},"，用来说明现在打印的是哪个阶段。",[34,107072,107073,107075],{},[23,107074,103858],{},"：MuJoCo 模型。",[34,107077,107078,107080],{},[23,107079,35190],{},"：MuJoCo 当前状态。",[19,107082,107083,2204,107086,107089],{},[23,107084,107085],{},"prefix: str",[23,107087,107088],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[57,107091,107093],{"className":59,"code":107092,"language":61,"meta":62,"style":62},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[23,107094,107095],{"__ignoreMap":62},[66,107096,107097,107099,107101,107103,107105,107107],{"class":68,"line":69},[66,107098,244],{"class":102},[66,107100,348],{"class":76},[66,107102,106700],{"class":356},[66,107104,106703],{"class":76},[66,107106,1076],{"class":102},[66,107108,360],{"class":76},[19,107110,107111,107114],{},[23,107112,107113],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[57,107116,107118],{"className":59,"code":107117,"language":61,"meta":62,"style":62},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[23,107119,107120,107132],{"__ignoreMap":62},[66,107121,107122,107124,107126,107128,107130],{"class":68,"line":69},[66,107123,103407],{"class":76},[66,107125,99],{"class":72},[66,107127,103186],{"class":76},[66,107129,103088],{"class":102},[66,107131,313],{"class":76},[66,107133,107134,107136,107138],{"class":68,"line":80},[66,107135,103431],{"class":76},[66,107137,99],{"class":72},[66,107139,103200],{"class":76},[19,107141,107142],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[57,107144,107146],{"className":59,"code":107145,"language":61,"meta":62,"style":62},"print_state(\"initial\", model, data)\n",[23,107147,107148],{"__ignoreMap":62},[66,107149,107150,107153,107155],{"class":68,"line":69},[66,107151,107152],{"class":76},"print_state(",[66,107154,106775],{"class":356},[66,107156,106778],{"class":76},[19,107158,107159,107160,107163],{},"调用刚才定义的 ",[23,107161,107162],{},"print_state"," 函数，打印初始状态。",[57,107165,107166],{"className":59,"code":106953,"language":61,"meta":62,"style":62},[23,107167,107168,107184],{"__ignoreMap":62},[66,107169,107170,107172,107174,107176,107178,107180,107182],{"class":68,"line":69},[66,107171,502],{"class":72},[66,107173,103275],{"class":76},[66,107175,507],{"class":72},[66,107177,510],{"class":102},[66,107179,348],{"class":76},[66,107181,2635],{"class":102},[66,107183,522],{"class":76},[66,107185,107186],{"class":68,"line":80},[66,107187,103472],{"class":76},[19,107189,107190],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[57,107192,107193],{"className":59,"code":106299,"language":61,"meta":62,"style":62},[23,107194,107195],{"__ignoreMap":62},[66,107196,107197],{"class":68,"line":69},[66,107198,106299],{"class":76},[19,107200,107201,107202,107204,107205,107207],{},"重置 ",[23,107203,35190],{},"。注意它不会重新创建 ",[23,107206,103858],{},"，因为模型结构没有变，只是状态回到初始值。",[57,107209,107210],{"className":59,"code":106465,"language":61,"meta":62,"style":62},[23,107211,107212],{"__ignoreMap":62},[66,107213,107214,107216,107218,107220,107222],{"class":68,"line":69},[66,107215,106472],{"class":76},[66,107217,795],{"class":102},[66,107219,6259],{"class":76},[66,107221,99],{"class":72},[66,107223,106481],{"class":102},[19,107225,107226,107227,2204,107230,2204,107233,107235],{},"这行是“手动改状态”。在 freejoint 中，",[23,107228,107229],{},"qpos[0]",[23,107231,107232],{},"qpos[1]",[23,107234,107029],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[57,107237,107238],{"className":59,"code":106316,"language":61,"meta":62,"style":62},[23,107239,107240],{"__ignoreMap":62},[66,107241,107242],{"class":68,"line":69},[66,107243,106316],{"class":76},[19,107245,107246,107247,107249,107250,107252],{},"手动改完 ",[23,107248,105803],{}," 后，调用 ",[23,107251,106023],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,107254,104089],{"id":104088},[19,107256,107257],{},"你会看到:",[31,107259,107260,107265,107270,107273],{},[34,107261,107262,107263],{},"初始时间为 ",[23,107264,2183],{},[34,107266,107267,107268],{},"50 步后时间约为 ",[23,107269,37117],{},[34,107271,107272],{},"reset 后状态恢复",[34,107274,107275,107276,107279,107280],{},"手动修改 ",[23,107277,107278],{},"data.qpos[2]"," 后，小球高度变为 ",[23,107281,107033],{},[19,107283,107284,107286],{},[23,107285,107029],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,107288,107289],{},"输出里可以重点看三件事：",[31,107291,107292,107300,107305],{},[34,107293,107294,107296,107297,107299],{},[23,107295,4212],{}," 是否随着 ",[23,107298,102989],{}," 增加。",[34,107301,107302,107304],{},[23,107303,105803],{}," 的 z 坐标是否因为下落而变化。",[34,107306,107307,107309,107310,158],{},[23,107308,106125],{}," 后时间是否回到 ",[23,107311,2183],{},[14,107313,104121],{"id":104120},[31,107315,107316,107322,107328,107334,107337,107346],{},[34,107317,107318,107319,158],{},"修改 timestep 为 ",[23,107320,107321],{},"0.005",[34,107323,107324,107325,158],{},"重新运行，检查 50 步后时间是否约为 ",[23,107326,107327],{},"0.25",[34,107329,107330,107331,158],{},"修改重力为 ",[23,107332,107333],{},"0 0 -1.0",[34,107335,107336],{},"观察小球下降速度是否变慢。",[34,107338,104184,107339,104187,107342,107345],{},[23,107340,107341],{},"data.qpos[2] = 2.0",[23,107343,107344],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[34,107347,107348,107349,107352],{},"注释掉 ",[23,107350,107351],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,107354,104226],{"id":104225},[484,107356,107358,107359,107361],{"id":107357},"修改-dataqpos-后位置没有更新","修改 ",[23,107360,102844],{}," 后位置没有更新",[19,107363,104235],{},[57,107365,107366],{"className":59,"code":106316,"language":61,"meta":62,"style":62},[23,107367,107368],{"__ignoreMap":62},[66,107369,107370],{"class":68,"line":69},[66,107371,106316],{"class":76},[484,107373,107374],{"id":107374},"数组维度看不懂",[19,107376,107377],{},"打印模型维度:",[57,107379,107381],{"className":59,"code":107380,"language":61,"meta":62,"style":62},"print(model.nq, model.nv, model.nu)\n",[23,107382,107383],{"__ignoreMap":62},[66,107384,107385,107387],{"class":68,"line":69},[66,107386,244],{"class":102},[66,107388,107389],{"class":76},"(model.nq, model.nv, model.nu)\n",[2129,107391,107392,107400],{},[2132,107393,107394],{},[2135,107395,107396,107398],{},[2138,107397,106347],{"align":25539},[2138,107399,102474],{"align":25539},[2176,107401,107402,107412,107422],{},[2135,107403,107404,107409],{},[2181,107405,107406],{"align":25539},[23,107407,107408],{},"nq",[2181,107410,107411],{"align":25539},"位置变量数量",[2135,107413,107414,107419],{},[2181,107415,107416],{"align":25539},[23,107417,107418],{},"nv",[2181,107420,107421],{"align":25539},"速度变量数量",[2135,107423,107424,107428],{},[2181,107425,107426],{"align":25539},[23,107427,103935],{},[2181,107429,107430],{"align":25539},"控制输入数量",[484,107432,107434,107435,107437],{"id":107433},"误以为-qpos-一定等于关节数","误以为 ",[23,107436,105803],{}," 一定等于关节数",[19,107439,107440,107441,84307,107443,107445,107446,107448],{},"不是。例如 ",[23,107442,103393],{},[23,107444,105803],{}," 是 7 维，但 ",[23,107447,106133],{}," 是 6 维。",[484,107450,107452,107453,107455],{"id":107451},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[23,107454,105803],{}," 的第几位",[19,107457,107458],{},"初学时可以先打印：",[57,107460,107462],{"className":59,"code":107461,"language":61,"meta":62,"style":62},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[23,107463,107464,107474,107484,107496],{"__ignoreMap":62},[66,107465,107466,107468,107470,107472],{"class":68,"line":69},[66,107467,244],{"class":102},[66,107469,348],{"class":76},[66,107471,103213],{"class":356},[66,107473,103216],{"class":76},[66,107475,107476,107478,107480,107482],{"class":68,"line":80},[66,107477,244],{"class":102},[66,107479,348],{"class":76},[66,107481,103225],{"class":356},[66,107483,103228],{"class":76},[66,107485,107486,107488,107490,107493],{"class":68,"line":112},[66,107487,244],{"class":102},[66,107489,348],{"class":76},[66,107491,107492],{"class":356},"\"qpos:\"",[66,107494,107495],{"class":76},", data.qpos)\n",[66,107497,107498,107500,107502,107505],{"class":68,"line":129},[66,107499,244],{"class":102},[66,107501,348],{"class":76},[66,107503,107504],{"class":356},"\"qvel:\"",[66,107506,107507],{"class":76},", data.qvel)\n",[19,107509,107510],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[484,107512,107513],{"id":107513},"仿真结果每次都一样",[19,107515,107516,107517,107519],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[23,107518,105803],{},"、目标点或控制输入。",[14,107521,104380],{"id":104379},[19,107523,107524,107525,807],{},"Python 控制 MuJoCo 的核心就是读写 ",[23,107526,35190],{},[31,107528,107529,107537,107542,107547],{},[34,107530,107531,107532,102792,107534,107536],{},"用 ",[23,107533,102844],{},[23,107535,102847],{}," 读取状态。",[34,107538,107531,107539,107541],{},[23,107540,102850],{}," 写入控制。",[34,107543,107531,107544,107546],{},[23,107545,102989],{}," 推进时间。",[34,107548,107549,107550,107552],{},"手动改状态后用 ",[23,107551,106023],{}," 刷新派生量。",[19,107554,107555],{},"理解这一章后，就可以进入关节和 actuator 控制。",[1903,107557,107558],{},"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":62,"searchDepth":80,"depth":80,"links":107560},[107561,107562,107563,107570,107574,107575,107576,107586],{"id":102420,"depth":80,"text":102421},{"id":102543,"depth":80,"text":102544},{"id":102818,"depth":80,"text":102819,"children":107564},[107565,107567,107569],{"id":106328,"depth":112,"text":107566},"qpos、qvel、ctrl 是什么",{"id":106406,"depth":112,"text":107568},"mj_step 和 mj_forward 的区别",{"id":106495,"depth":112,"text":106496},{"id":103026,"depth":80,"text":103027,"children":107571},[107572,107573],{"id":103345,"depth":112,"text":103345},{"id":103481,"depth":112,"text":103481},{"id":104088,"depth":80,"text":104089},{"id":104120,"depth":80,"text":104121},{"id":104225,"depth":80,"text":104226,"children":107577},[107578,107580,107581,107583,107585],{"id":107357,"depth":112,"text":107579},"修改 data.qpos 后位置没有更新",{"id":107374,"depth":112,"text":107374},{"id":107433,"depth":112,"text":107582},"误以为 qpos 一定等于关节数",{"id":107451,"depth":112,"text":107584},"不知道某个元素在 qpos 的第几位",{"id":107513,"depth":112,"text":107513},{"id":104379,"depth":80,"text":104380},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":106091,"description":62},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":107593,"title":107594,"body":107595,"description":62,"extension":1927,"meta":109285,"navigation":108,"path":109286,"seo":109287,"stem":109288,"__hash__":109289},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":107596,"toc":109261},[107597,107600,107602,107605,107607,107632,107635,107654,107657,107659,107661,107685,107687,107701,107703,107744,107746,107770,107772,107775,107809,107811,107824,107827,107895,107904,107908,107911,107945,107951,107954,107958,107997,108000,108020,108024,108067,108069,108098,108101,108107,108110,108112,108506,108508,108520,108522,108533,108535,108538,108567,108575,108578,108613,108616,108618,108626,108629,108631,108642,108652,108672,108675,108711,108723,108771,108790,108832,108845,108873,108878,108899,108909,108927,108930,108964,108967,108987,108990,109009,109015,109017,109020,109026,109032,109042,109045,109051,109060,109062,109108,109110,109116,109122,109125,109128,109148,109151,109157,109163,109165,109188,109191,109194,109203,109206,109244,109246,109249,109255,109258],[10,107598,107594],{"id":107599},"_4关节actuator-与力控制",[14,107601,102421],{"id":102420},[19,107603,107604],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,107606,106104],{},[31,107608,107609,107615,107620,107624,107629],{},[34,107610,107611,107614],{},[23,107612,107613],{},"hinge"," 关节",[34,107616,107617],{},[23,107618,107619],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[34,107621,107622],{},[23,107623,102850],{},[34,107625,107626],{},[23,107627,107628],{},"ctrlrange",[34,107630,107631],{},"读取关节角和角速度",[19,107633,107634],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[57,107636,107638],{"className":59,"code":107637,"language":61,"meta":62,"style":62},"data.ctrl[0] = ...\n",[23,107639,107640],{"__ignoreMap":62},[66,107641,107642,107645,107647,107649,107651],{"class":68,"line":69},[66,107643,107644],{"class":76},"data.ctrl[",[66,107646,2183],{"class":102},[66,107648,6259],{"class":76},[66,107650,99],{"class":72},[66,107652,107653],{"class":102}," ...\n",[19,107655,107656],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,107658,102544],{"id":102543},[19,107660,102547],{},[57,107662,107663],{"className":25625,"code":106161,"language":25627,"meta":62,"style":62},[23,107664,107665],{"__ignoreMap":62},[66,107666,107667,107669,107671,107673,107675,107677,107679,107681,107683],{"class":68,"line":69},[66,107668,26380],{"class":3793},[66,107670,28116],{"class":356},[66,107672,25637],{"class":356},[66,107674,28201],{"class":102},[66,107676,106176],{"class":356},[66,107678,102572],{"class":356},[66,107680,104274],{"class":356},[66,107682,102588],{"class":356},[66,107684,106185],{"class":356},[19,107686,104592],{},[57,107688,107689],{"className":25625,"code":102693,"language":25627,"meta":62,"style":62},[23,107690,107691],{"__ignoreMap":62},[66,107692,107693,107695,107697,107699],{"class":68,"line":69},[66,107694,25634],{"class":3793},[66,107696,25637],{"class":356},[66,107698,102704],{"class":356},[66,107700,102707],{"class":356},[19,107702,104609],{},[57,107704,107706],{"className":25625,"code":107705,"language":25627,"meta":62,"style":62},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[23,107707,107708,107725,107734],{"__ignoreMap":62},[66,107709,107710,107712,107714,107716,107719,107721,107723],{"class":68,"line":69},[66,107711,32130],{"class":3793},[66,107713,30976],{"class":356},[66,107715,26918],{"class":102},[66,107717,107718],{"class":356}," mujoco-control",[66,107720,102749],{"class":356},[66,107722,102752],{"class":102},[66,107724,102755],{"class":102},[66,107726,107727,107729,107731],{"class":68,"line":80},[66,107728,32130],{"class":3793},[66,107730,102762],{"class":356},[66,107732,107733],{"class":356}," mujoco-control\n",[66,107735,107736,107738,107740,107742],{"class":68,"line":112},[66,107737,25634],{"class":3793},[66,107739,25637],{"class":356},[66,107741,102704],{"class":356},[66,107743,102707],{"class":356},[19,107745,102778],{},[31,107747,107748,107754,107761,107767],{},[34,107749,107750,107753],{},[23,107751,107752],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[34,107755,107756,107758,107759,158],{},[23,107757,102850],{}," 长度等于 ",[23,107760,103931],{},[34,107762,83999,107763,107766],{},[23,107764,107765],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[34,107768,107769],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,107771,102819],{"id":102818},[19,107773,107774],{},"关节决定 body 如何运动:",[57,107776,107778],{"className":54849,"code":107777,"language":54851,"meta":62,"style":62},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[23,107779,107780],{"__ignoreMap":62},[66,107781,107782,107784,107786,107788,107790,107793,107795,107797,107799,107802,107804,107807],{"class":68,"line":69},[66,107783,413],{"class":76},[66,107785,104729],{"class":53084},[66,107787,16724],{"class":3793},[66,107789,99],{"class":76},[66,107791,107792],{"class":356},"\"hinge\"",[66,107794,55605],{"class":3793},[66,107796,99],{"class":76},[66,107798,107792],{"class":356},[66,107800,107801],{"class":3793}," axis",[66,107803,99],{"class":76},[66,107805,107806],{"class":356},"\"0 1 0\"",[66,107808,102918],{"class":76},[19,107810,104825],{},[31,107812,107813,107818,107821],{},[34,107814,107815,107816],{},"名字是 ",[23,107817,107613],{},[34,107819,107820],{},"类型是旋转关节",[34,107822,107823],{},"绕 y 轴旋转",[19,107825,107826],{},"actuator 决定如何施加控制:",[57,107828,107830],{"className":54849,"code":107829,"language":54851,"meta":62,"style":62},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[23,107831,107832,107841,107887],{"__ignoreMap":62},[66,107833,107834,107836,107839],{"class":68,"line":69},[66,107835,413],{"class":76},[66,107837,107838],{"class":53084},"actuator",[66,107840,53091],{"class":76},[66,107842,107843,107845,107848,107850,107852,107855,107858,107860,107862,107865,107867,107869,107872,107874,107877,107880,107882,107885],{"class":68,"line":80},[66,107844,53928],{"class":76},[66,107846,107847],{"class":53084},"motor",[66,107849,16724],{"class":3793},[66,107851,99],{"class":76},[66,107853,107854],{"class":356},"\"hinge_motor\"",[66,107856,107857],{"class":3793}," joint",[66,107859,99],{"class":76},[66,107861,107792],{"class":356},[66,107863,107864],{"class":3793}," gear",[66,107866,99],{"class":76},[66,107868,5496],{"class":356},[66,107870,107871],{"class":3793}," ctrlrange",[66,107873,99],{"class":76},[66,107875,107876],{"class":356},"\"-2 2\"",[66,107878,107879],{"class":3793}," ctrllimited",[66,107881,99],{"class":76},[66,107883,107884],{"class":356},"\"true\"",[66,107886,102918],{"class":76},[66,107888,107889,107891,107893],{"class":68,"line":112},[66,107890,53569],{"class":76},[66,107892,107838],{"class":53084},[66,107894,53091],{"class":76},[19,107896,107897,107900,107901,158],{},[23,107898,107899],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[23,107902,107903],{},"[-2, 2]",[484,107905,107907],{"id":107906},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,107909,107910],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[2129,107912,107913,107923],{},[2132,107914,107915],{},[2135,107916,107917,107919,107921],{},[2138,107918,27555],{"align":25539},[2138,107920,104469],{"align":25539},[2138,107922,102508],{"align":25539},[2176,107924,107925,107935],{},[2135,107926,107927,107929,107932],{},[2181,107928,104729],{"align":25539},[2181,107930,107931],{"align":25539},"定义能怎么动",[2181,107933,107934],{"align":25539},"门轴允许门旋转",[2135,107936,107937,107939,107942],{},[2181,107938,107838],{"align":25539},[2181,107940,107941],{"align":25539},"定义怎么施力或控制",[2181,107943,107944],{"align":25539},"人推门、马达带动门",[19,107946,107947,107948,107950],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[23,107949,102850],{}," 主动控制它。",[19,107952,107953],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[484,107955,107957],{"id":107956},"hinge-joint","hinge joint",[57,107959,107961],{"className":54849,"code":107960,"language":54851,"meta":62,"style":62},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[23,107962,107963],{"__ignoreMap":62},[66,107964,107965,107967,107969,107971,107973,107975,107977,107979,107981,107983,107985,107987,107990,107992,107995],{"class":68,"line":69},[66,107966,413],{"class":76},[66,107968,104729],{"class":53084},[66,107970,16724],{"class":3793},[66,107972,99],{"class":76},[66,107974,107792],{"class":356},[66,107976,55605],{"class":3793},[66,107978,99],{"class":76},[66,107980,107792],{"class":356},[66,107982,107801],{"class":3793},[66,107984,99],{"class":76},[66,107986,107806],{"class":356},[66,107988,107989],{"class":3793}," damping",[66,107991,99],{"class":76},[66,107993,107994],{"class":356},"\"0.1\"",[66,107996,102918],{"class":76},[19,107998,107999],{},"含义：",[31,108001,108002,108008,108014],{},[34,108003,108004,108007],{},[23,108005,108006],{},"type=\"hinge\"","：只能绕一个轴旋转。",[34,108009,108010,108013],{},[23,108011,108012],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[34,108015,108016,108019],{},[23,108017,108018],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[484,108021,108023],{"id":108022},"motor-actuator","motor actuator",[57,108025,108027],{"className":54849,"code":108026,"language":54851,"meta":62,"style":62},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[23,108028,108029],{"__ignoreMap":62},[66,108030,108031,108033,108035,108037,108039,108041,108043,108045,108047,108049,108051,108053,108055,108057,108059,108061,108063,108065],{"class":68,"line":69},[66,108032,413],{"class":76},[66,108034,107847],{"class":53084},[66,108036,16724],{"class":3793},[66,108038,99],{"class":76},[66,108040,107854],{"class":356},[66,108042,107857],{"class":3793},[66,108044,99],{"class":76},[66,108046,107792],{"class":356},[66,108048,107864],{"class":3793},[66,108050,99],{"class":76},[66,108052,5496],{"class":356},[66,108054,107871],{"class":3793},[66,108056,99],{"class":76},[66,108058,107876],{"class":356},[66,108060,107879],{"class":3793},[66,108062,99],{"class":76},[66,108064,107884],{"class":356},[66,108066,102918],{"class":76},[19,108068,107999],{},[31,108070,108071,108080,108086,108092],{},[34,108072,108073,108076,108077,108079],{},[23,108074,108075],{},"joint=\"hinge\"","：这个电机作用在名为 ",[23,108078,107613],{}," 的关节上。",[34,108081,108082,108085],{},[23,108083,108084],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[34,108087,108088,108091],{},[23,108089,108090],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[34,108093,108094,108097],{},[23,108095,108096],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,108099,108100],{},"简单理解：",[57,108102,108105],{"className":108103,"code":108104,"language":555,"meta":62},[553],"实际施加效果 ≈ data.ctrl[0] * gear\n",[23,108106,108104],{"__ignoreMap":62},[19,108108,108109],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,108111,103027],{"id":103026},[57,108113,108115],{"className":59,"code":108114,"language":61,"meta":62,"style":62},"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",[23,108116,108117,108124,108128,108134,108144,108148,108152,108160,108165,108170,108174,108178,108183,108188,108192,108197,108202,108207,108212,108216,108220,108224,108229,108234,108239,108243,108247,108251,108255,108267,108279,108287,108291,108301,108311,108321,108325,108338,108351,108355,108372,108386,108421,108425,108429,108440,108455,108470,108482,108486,108490,108502],{"__ignoreMap":62},[66,108118,108119,108121],{"class":68,"line":69},[66,108120,284],{"class":72},[66,108122,108123],{"class":76}," math\n",[66,108125,108126],{"class":68,"line":80},[66,108127,109],{"emptyLinePlaceholder":108},[66,108129,108130,108132],{"class":68,"line":112},[66,108131,284],{"class":72},[66,108133,103075],{"class":76},[66,108135,108136,108138,108140,108142],{"class":68,"line":129},[66,108137,284],{"class":72},[66,108139,33173],{"class":76},[66,108141,33176],{"class":72},[66,108143,33179],{"class":76},[66,108145,108146],{"class":68,"line":138},[66,108147,109],{"emptyLinePlaceholder":108},[66,108149,108150],{"class":68,"line":227},[66,108151,109],{"emptyLinePlaceholder":108},[66,108153,108154,108156,108158],{"class":68,"line":236},[66,108155,103088],{"class":102},[66,108157,15369],{"class":72},[66,108159,103093],{"class":356},[66,108161,108162],{"class":68,"line":241},[66,108163,108164],{"class":356},"\u003Cmujoco model=\"one_link_motor\">\n",[66,108166,108167],{"class":68,"line":372},[66,108168,108169],{"class":356},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[66,108171,108172],{"class":68,"line":377},[66,108173,109],{"emptyLinePlaceholder":108},[66,108175,108176],{"class":68,"line":392},[66,108177,103112],{"class":356},[66,108179,108180],{"class":68,"line":405},[66,108181,108182],{"class":356},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[66,108184,108185],{"class":68,"line":418},[66,108186,108187],{"class":356},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[66,108189,108190],{"class":68,"line":430},[66,108191,109],{"emptyLinePlaceholder":108},[66,108193,108194],{"class":68,"line":438},[66,108195,108196],{"class":356},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[66,108198,108199],{"class":68,"line":465},[66,108200,108201],{"class":356},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[66,108203,108204],{"class":68,"line":1805},[66,108205,108206],{"class":356},"        \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",[66,108208,108209],{"class":68,"line":1817},[66,108210,108211],{"class":356},"      \u003C\u002Fbody>\n",[66,108213,108214],{"class":68,"line":1822},[66,108215,103141],{"class":356},[66,108217,108218],{"class":68,"line":1829},[66,108219,103146],{"class":356},[66,108221,108222],{"class":68,"line":3529},[66,108223,109],{"emptyLinePlaceholder":108},[66,108225,108226],{"class":68,"line":3557},[66,108227,108228],{"class":356},"  \u003Cactuator>\n",[66,108230,108231],{"class":68,"line":3562},[66,108232,108233],{"class":356},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[66,108235,108236],{"class":68,"line":3579},[66,108237,108238],{"class":356},"  \u003C\u002Factuator>\n",[66,108240,108241],{"class":68,"line":3584},[66,108242,103151],{"class":356},[66,108244,108245],{"class":68,"line":3589},[66,108246,97473],{"class":356},[66,108248,108249],{"class":68,"line":3594},[66,108250,109],{"emptyLinePlaceholder":108},[66,108252,108253],{"class":68,"line":3608},[66,108254,109],{"emptyLinePlaceholder":108},[66,108256,108257,108259,108261,108263,108265],{"class":68,"line":3613},[66,108258,33739],{"class":72},[66,108260,3803],{"class":3793},[66,108262,103172],{"class":76},[66,108264,97461],{"class":102},[66,108266,126],{"class":76},[66,108268,108269,108271,108273,108275,108277],{"class":68,"line":4401},[66,108270,103181],{"class":76},[66,108272,99],{"class":72},[66,108274,103186],{"class":76},[66,108276,103088],{"class":102},[66,108278,313],{"class":76},[66,108280,108281,108283,108285],{"class":68,"line":4415},[66,108282,103195],{"class":76},[66,108284,99],{"class":72},[66,108286,103200],{"class":76},[66,108288,108289],{"class":68,"line":4423},[66,108290,109],{"emptyLinePlaceholder":108},[66,108292,108293,108295,108297,108299],{"class":68,"line":4428},[66,108294,132],{"class":102},[66,108296,348],{"class":76},[66,108298,103213],{"class":356},[66,108300,103216],{"class":76},[66,108302,108303,108305,108307,108309],{"class":68,"line":4434},[66,108304,132],{"class":102},[66,108306,348],{"class":76},[66,108308,103225],{"class":356},[66,108310,103228],{"class":76},[66,108312,108313,108315,108317,108319],{"class":68,"line":4440},[66,108314,132],{"class":102},[66,108316,348],{"class":76},[66,108318,103237],{"class":356},[66,108320,103240],{"class":76},[66,108322,108323],{"class":68,"line":4445},[66,108324,109],{"emptyLinePlaceholder":108},[66,108326,108327,108329,108332,108334,108336],{"class":68,"line":9759},[66,108328,380],{"class":72},[66,108330,108331],{"class":76}," model.nu ",[66,108333,22751],{"class":72},[66,108335,1187],{"class":102},[66,108337,126],{"class":76},[66,108339,108340,108342,108344,108346,108349],{"class":68,"line":9783},[66,108341,105205],{"class":72},[66,108343,105208],{"class":102},[66,108345,348],{"class":76},[66,108347,108348],{"class":356},"\"expected exactly one actuator\"",[66,108350,313],{"class":76},[66,108352,108353],{"class":68,"line":9788},[66,108354,109],{"emptyLinePlaceholder":108},[66,108356,108357,108359,108361,108363,108365,108367,108370],{"class":68,"line":9794},[66,108358,1083],{"class":72},[66,108360,33409],{"class":76},[66,108362,507],{"class":72},[66,108364,510],{"class":102},[66,108366,348],{"class":76},[66,108368,108369],{"class":102},"2000",[66,108371,522],{"class":76},[66,108373,108374,108377,108379,108381,108383],{"class":68,"line":9821},[66,108375,108376],{"class":76},"        t ",[66,108378,99],{"class":72},[66,108380,33409],{"class":76},[66,108382,1208],{"class":72},[66,108384,108385],{"class":76}," model.opt.timestep\n",[66,108387,108388,108391,108393,108395,108397,108400,108402,108405,108407,108409,108412,108414,108416,108418],{"class":68,"line":9826},[66,108389,108390],{"class":76},"        data.ctrl[",[66,108392,2183],{"class":102},[66,108394,6259],{"class":76},[66,108396,99],{"class":72},[66,108398,108399],{"class":102}," 1.5",[66,108401,8329],{"class":72},[66,108403,108404],{"class":76}," math.sin(",[66,108406,107033],{"class":102},[66,108408,8329],{"class":72},[66,108410,108411],{"class":76}," math.pi ",[66,108413,1208],{"class":72},[66,108415,63646],{"class":102},[66,108417,8329],{"class":72},[66,108419,108420],{"class":76}," t)\n",[66,108422,108423],{"class":68,"line":9832},[66,108424,103290],{"class":76},[66,108426,108427],{"class":68,"line":9844},[66,108428,109],{"emptyLinePlaceholder":108},[66,108430,108431,108433,108435,108438],{"class":68,"line":9856},[66,108432,132],{"class":102},[66,108434,348],{"class":76},[66,108436,108437],{"class":356},"\"time:\"",[66,108439,103252],{"class":76},[66,108441,108442,108444,108446,108449,108451,108453],{"class":68,"line":9868},[66,108443,132],{"class":102},[66,108445,348],{"class":76},[66,108447,108448],{"class":356},"\"joint qpos:\"",[66,108450,106703],{"class":76},[66,108452,1076],{"class":102},[66,108454,360],{"class":76},[66,108456,108457,108459,108461,108464,108466,108468],{"class":68,"line":11523},[66,108458,132],{"class":102},[66,108460,348],{"class":76},[66,108462,108463],{"class":356},"\"joint qvel:\"",[66,108465,106719],{"class":76},[66,108467,1076],{"class":102},[66,108469,360],{"class":76},[66,108471,108472,108474,108476,108479],{"class":68,"line":11548},[66,108473,132],{"class":102},[66,108475,348],{"class":76},[66,108477,108478],{"class":356},"\"last ctrl:\"",[66,108480,108481],{"class":76},", data.ctrl.copy())\n",[66,108483,108484],{"class":68,"line":11571},[66,108485,109],{"emptyLinePlaceholder":108},[66,108487,108488],{"class":68,"line":11595},[66,108489,109],{"emptyLinePlaceholder":108},[66,108491,108492,108494,108496,108498,108500],{"class":68,"line":11600},[66,108493,3373],{"class":72},[66,108495,33014],{"class":102},[66,108497,959],{"class":72},[66,108499,103335],{"class":356},[66,108501,126],{"class":76},[66,108503,108504],{"class":68,"line":11605},[66,108505,103342],{"class":76},[19,108507,105343],{},[57,108509,108511],{"className":25625,"code":108510,"language":25627,"meta":62,"style":62},"touch ch4_joint_motor.py\n",[23,108512,108513],{"__ignoreMap":62},[66,108514,108515,108517],{"class":68,"line":69},[66,108516,103057],{"class":3793},[66,108518,108519],{"class":356}," ch4_joint_motor.py\n",[19,108521,104074],{},[57,108523,108525],{"className":25625,"code":108524,"language":25627,"meta":62,"style":62},"python ch4_joint_motor.py\n",[23,108526,108527],{"__ignoreMap":62},[66,108528,108529,108531],{"class":68,"line":69},[66,108530,61],{"class":3793},[66,108532,108519],{"class":356},[484,108534,103345],{"id":103345},[19,108536,108537],{},"检查 actuator 数量：",[57,108539,108541],{"className":59,"code":108540,"language":61,"meta":62,"style":62},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[23,108542,108543,108555],{"__ignoreMap":62},[66,108544,108545,108547,108549,108551,108553],{"class":68,"line":69},[66,108546,3373],{"class":72},[66,108548,108331],{"class":76},[66,108550,22751],{"class":72},[66,108552,1187],{"class":102},[66,108554,126],{"class":76},[66,108556,108557,108559,108561,108563,108565],{"class":68,"line":80},[66,108558,105668],{"class":72},[66,108560,105208],{"class":102},[66,108562,348],{"class":76},[66,108564,108348],{"class":356},[66,108566,313],{"class":76},[19,108568,108569,108571,108572,108574],{},[23,108570,103931],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[23,108573,102850],{}," 长度应该是 1。",[19,108576,108577],{},"产生正弦控制信号：",[57,108579,108581],{"className":59,"code":108580,"language":61,"meta":62,"style":62},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[23,108582,108583],{"__ignoreMap":62},[66,108584,108585,108587,108589,108591,108593,108595,108597,108599,108601,108603,108605,108607,108609,108611],{"class":68,"line":69},[66,108586,107644],{"class":76},[66,108588,2183],{"class":102},[66,108590,6259],{"class":76},[66,108592,99],{"class":72},[66,108594,108399],{"class":102},[66,108596,8329],{"class":72},[66,108598,108404],{"class":76},[66,108600,107033],{"class":102},[66,108602,8329],{"class":72},[66,108604,108411],{"class":76},[66,108606,1208],{"class":72},[66,108608,63646],{"class":102},[66,108610,8329],{"class":72},[66,108612,108420],{"class":76},[19,108614,108615],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,108617,103446],{},[57,108619,108620],{"className":59,"code":106278,"language":61,"meta":62,"style":62},[23,108621,108622],{"__ignoreMap":62},[66,108623,108624],{"class":68,"line":69},[66,108625,106278],{"class":76},[19,108627,108628],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[484,108630,103481],{"id":103481},[57,108632,108634],{"className":59,"code":108633,"language":61,"meta":62,"style":62},"import math\n",[23,108635,108636],{"__ignoreMap":62},[66,108637,108638,108640],{"class":68,"line":69},[66,108639,284],{"class":72},[66,108641,108123],{"class":76},[19,108643,108644,108645,102792,108648,108651],{},"导入 Python 标准库里的数学模块。后面要用 ",[23,108646,108647],{},"math.sin",[23,108649,108650],{},"math.pi"," 生成周期变化的控制信号。",[57,108653,108654],{"className":59,"code":105459,"language":61,"meta":62,"style":62},[23,108655,108656,108662],{"__ignoreMap":62},[66,108657,108658,108660],{"class":68,"line":69},[66,108659,284],{"class":72},[66,108661,103075],{"class":76},[66,108663,108664,108666,108668,108670],{"class":68,"line":80},[66,108665,284],{"class":72},[66,108667,33173],{"class":76},[66,108669,33176],{"class":72},[66,108671,33179],{"class":76},[19,108673,108674],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[57,108676,108677],{"className":54849,"code":107960,"language":54851,"meta":62,"style":62},[23,108678,108679],{"__ignoreMap":62},[66,108680,108681,108683,108685,108687,108689,108691,108693,108695,108697,108699,108701,108703,108705,108707,108709],{"class":68,"line":69},[66,108682,413],{"class":76},[66,108684,104729],{"class":53084},[66,108686,16724],{"class":3793},[66,108688,99],{"class":76},[66,108690,107792],{"class":356},[66,108692,55605],{"class":3793},[66,108694,99],{"class":76},[66,108696,107792],{"class":356},[66,108698,107801],{"class":3793},[66,108700,99],{"class":76},[66,108702,107806],{"class":356},[66,108704,107989],{"class":3793},[66,108706,99],{"class":76},[66,108708,107994],{"class":356},[66,108710,102918],{"class":76},[19,108712,108713,108714,108716,108717,108719,108720,108722],{},"这行定义关节。",[23,108715,107613],{}," 表示旋转关节。",[23,108718,108012],{}," 表示绕 y 轴旋转。",[23,108721,108018],{}," 表示有一点阻尼，运动不会完全无损耗。",[57,108724,108726],{"className":54849,"code":108725,"language":54851,"meta":62,"style":62},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[23,108727,108728],{"__ignoreMap":62},[66,108729,108730,108732,108734,108736,108738,108741,108743,108745,108748,108751,108753,108756,108758,108760,108762,108764,108766,108769],{"class":68,"line":69},[66,108731,413],{"class":76},[66,108733,102894],{"class":53084},[66,108735,16724],{"class":3793},[66,108737,99],{"class":76},[66,108739,108740],{"class":356},"\"link_geom\"",[66,108742,55605],{"class":3793},[66,108744,99],{"class":76},[66,108746,108747],{"class":356},"\"capsule\"",[66,108749,108750],{"class":3793}," fromto",[66,108752,99],{"class":76},[66,108754,108755],{"class":356},"\"0 0 0 0 0 0.5\"",[66,108757,102910],{"class":3793},[66,108759,99],{"class":76},[66,108761,105551],{"class":356},[66,108763,103774],{"class":3793},[66,108765,99],{"class":76},[66,108767,108768],{"class":356},"\"0.5\"",[66,108770,102918],{"class":76},[19,108772,108773,108774,108776,108777,108779,108780,108783,108784,158,108787,108789],{},"这行定义摆杆的形状。",[23,108775,104938],{}," 是胶囊体，适合表示杆子。",[23,108778,104949],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[23,108781,108782],{},"(0,0,0)"," 延伸到 ",[23,108785,108786],{},"(0,0,0.5)",[23,108788,104943],{}," 是半径。",[57,108791,108792],{"className":54849,"code":108026,"language":54851,"meta":62,"style":62},[23,108793,108794],{"__ignoreMap":62},[66,108795,108796,108798,108800,108802,108804,108806,108808,108810,108812,108814,108816,108818,108820,108822,108824,108826,108828,108830],{"class":68,"line":69},[66,108797,413],{"class":76},[66,108799,107847],{"class":53084},[66,108801,16724],{"class":3793},[66,108803,99],{"class":76},[66,108805,107854],{"class":356},[66,108807,107857],{"class":3793},[66,108809,99],{"class":76},[66,108811,107792],{"class":356},[66,108813,107864],{"class":3793},[66,108815,99],{"class":76},[66,108817,5496],{"class":356},[66,108819,107871],{"class":3793},[66,108821,99],{"class":76},[66,108823,107876],{"class":356},[66,108825,107879],{"class":3793},[66,108827,99],{"class":76},[66,108829,107884],{"class":356},[66,108831,102918],{"class":76},[19,108833,108834,108835,108837,108838,108841,108842,108844],{},"这行定义电机。它作用在 ",[23,108836,107613],{}," 关节上。",[23,108839,108840],{},"gear"," 可以理解成放大倍数。",[23,108843,107628],{}," 限制控制输入范围。",[57,108846,108847],{"className":59,"code":108540,"language":61,"meta":62,"style":62},[23,108848,108849,108861],{"__ignoreMap":62},[66,108850,108851,108853,108855,108857,108859],{"class":68,"line":69},[66,108852,3373],{"class":72},[66,108854,108331],{"class":76},[66,108856,22751],{"class":72},[66,108858,1187],{"class":102},[66,108860,126],{"class":76},[66,108862,108863,108865,108867,108869,108871],{"class":68,"line":80},[66,108864,105668],{"class":72},[66,108866,105208],{"class":102},[66,108868,348],{"class":76},[66,108870,108348],{"class":356},[66,108872,313],{"class":76},[19,108874,108875,108877],{},[23,108876,103931],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[57,108879,108881],{"className":59,"code":108880,"language":61,"meta":62,"style":62},"for step in range(2000):\n",[23,108882,108883],{"__ignoreMap":62},[66,108884,108885,108887,108889,108891,108893,108895,108897],{"class":68,"line":69},[66,108886,502],{"class":72},[66,108888,33409],{"class":76},[66,108890,507],{"class":72},[66,108892,510],{"class":102},[66,108894,348],{"class":76},[66,108896,108369],{"class":102},[66,108898,522],{"class":76},[19,108900,108901,108902,108904,108905,108908],{},"循环 2000 步。这里没有用 ",[23,108903,2967],{},"，而是用 ",[23,108906,108907],{},"step","，因为后面要用当前步数计算时间。",[57,108910,108912],{"className":59,"code":108911,"language":61,"meta":62,"style":62},"t = step * model.opt.timestep\n",[23,108913,108914],{"__ignoreMap":62},[66,108915,108916,108919,108921,108923,108925],{"class":68,"line":69},[66,108917,108918],{"class":76},"t ",[66,108920,99],{"class":72},[66,108922,33409],{"class":76},[66,108924,1208],{"class":72},[66,108926,108385],{"class":76},[19,108928,108929],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[57,108931,108932],{"className":59,"code":108580,"language":61,"meta":62,"style":62},[23,108933,108934],{"__ignoreMap":62},[66,108935,108936,108938,108940,108942,108944,108946,108948,108950,108952,108954,108956,108958,108960,108962],{"class":68,"line":69},[66,108937,107644],{"class":76},[66,108939,2183],{"class":102},[66,108941,6259],{"class":76},[66,108943,99],{"class":72},[66,108945,108399],{"class":102},[66,108947,8329],{"class":72},[66,108949,108404],{"class":76},[66,108951,107033],{"class":102},[66,108953,8329],{"class":72},[66,108955,108411],{"class":76},[66,108957,1208],{"class":72},[66,108959,63646],{"class":102},[66,108961,8329],{"class":72},[66,108963,108420],{"class":76},[19,108965,108966],{},"这行给电机输入一个正弦波。拆开看：",[31,108968,108969,108975,108981],{},[34,108970,108971,108974],{},[23,108972,108973],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[34,108976,108977,108980],{},[23,108978,108979],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[34,108982,108983,108986],{},[23,108984,108985],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,108988,108989],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[57,108991,108993],{"className":59,"code":108992,"language":61,"meta":62,"style":62},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[23,108994,108995],{"__ignoreMap":62},[66,108996,108997,108999,109001,109003,109005,109007],{"class":68,"line":69},[66,108998,244],{"class":102},[66,109000,348],{"class":76},[66,109002,108448],{"class":356},[66,109004,106703],{"class":76},[66,109006,1076],{"class":102},[66,109008,360],{"class":76},[19,109010,109011,109012,109014],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[23,109013,102844],{}," 只有一个数。",[14,109016,104089],{"id":104088},[19,109018,109019],{},"输出类似:",[57,109021,109024],{"className":109022,"code":109023,"language":555,"meta":62},[553],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[23,109025,109023],{"__ignoreMap":62},[19,109027,109028,109029,109031],{},"这里 ",[23,109030,107899],{}," 是电机输入。",[19,109033,109034,109037,109038,109041],{},[23,109035,109036],{},"joint qpos"," 是关节角度，单位通常是弧度。",[23,109039,109040],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,109043,109044],{},"角度单位提示：",[57,109046,109049],{"className":109047,"code":109048,"language":555,"meta":62},[553],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[23,109050,109048],{"__ignoreMap":62},[19,109052,109053,109054,109056,109057,109059],{},"如果你看到 ",[23,109055,105803],{}," 是 ",[23,109058,37117],{},"，大约就是 28.6 度。",[14,109061,104121],{"id":104120},[31,109063,109064,109071,109074,109081,109084,109092,109100],{},[34,109065,104184,109066,104187,109068,158],{},[23,109067,108084],{},[23,109069,109070],{},"gear=\"5\"",[34,109072,109073],{},"重新运行，观察关节运动是否更剧烈。",[34,109075,104184,109076,104187,109078,158],{},[23,109077,107628],{},[23,109079,109080],{},"-0.2 0.2",[34,109082,109083],{},"重新运行，观察控制能力是否变弱。",[34,109085,109086,109087,109089,109090,158],{},"去掉 actuator，确认 ",[23,109088,103931],{}," 变成 ",[23,109091,2183],{},[34,109093,104184,109094,104187,109096,109099],{},[23,109095,108018],{},[23,109097,109098],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[34,109101,104184,109102,104187,109104,109107],{},[23,109103,108012],{},[23,109105,109106],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,109109,104226],{"id":104225},[484,109111,109113],{"id":109112},"indexerror-index-0-is-out-of-bounds",[23,109114,109115],{},"IndexError: index 0 is out of bounds",[19,109117,109118,109119,109121],{},"原因是 ",[23,109120,107765],{},"，没有 actuator。",[484,109123,109124],{"id":109124},"关节几乎不动",[19,109126,109127],{},"可能原因:",[31,109129,109130,109135,109139,109145],{},[34,109131,109132,109134],{},[23,109133,108840],{}," 太小",[34,109136,109137,109134],{},[23,109138,107628],{},[34,109140,109141,109144],{},[23,109142,109143],{},"damping"," 太大",[34,109146,109147],{},"重力方向导致运动不明显",[484,109149,109150],{"id":109150},"模型编译失败",[19,109152,109153,109154,109156],{},"检查 actuator 引用的 ",[23,109155,108075],{}," 是否存在，joint 名称是否拼写一致。",[484,109158,109160,109162],{"id":109159},"datactrl0-写了但没有效果",[23,109161,107899],{}," 写了但没有效果",[19,109164,104348],{},[31,109166,109167,109172,109175,109180,109185],{},[34,109168,109169,109171],{},[23,109170,103931],{}," 是否大于 0。",[34,109173,109174],{},"motor 是否引用了正确 joint。",[34,109176,109177,109179],{},[23,109178,108840],{}," 是否太小。",[34,109181,109182,109184],{},[23,109183,107628],{}," 是否把输入限制得太小。",[34,109186,109187],{},"body 是否真的有可动 joint。",[484,109189,109190],{"id":109190},"控制输入超过范围会怎样",[19,109192,109193],{},"如果设置了：",[57,109195,109197],{"className":54849,"code":109196,"language":54851,"meta":62,"style":62},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[23,109198,109199],{"__ignoreMap":62},[66,109200,109201],{"class":68,"line":69},[66,109202,109196],{"class":76},[19,109204,109205],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[57,109207,109209],{"className":59,"code":109208,"language":61,"meta":62,"style":62},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[23,109210,109211,109231],{"__ignoreMap":62},[66,109212,109213,109216,109218,109221,109223,109225,109227,109229],{"class":68,"line":69},[66,109214,109215],{"class":76},"action ",[66,109217,99],{"class":72},[66,109219,109220],{"class":76}," np.clip(action, ",[66,109222,2511],{"class":72},[66,109224,107033],{"class":102},[66,109226,307],{"class":76},[66,109228,107033],{"class":102},[66,109230,313],{"class":76},[66,109232,109233,109235,109237,109239,109241],{"class":68,"line":80},[66,109234,107644],{"class":76},[66,109236,2183],{"class":102},[66,109238,6259],{"class":76},[66,109240,99],{"class":72},[66,109242,109243],{"class":76}," action\n",[14,109245,104380],{"id":104379},[19,109247,109248],{},"这一章建立了控制任务的基本形式：",[57,109250,109253],{"className":109251,"code":109252,"language":555,"meta":62},[553],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[23,109254,109252],{"__ignoreMap":62},[19,109256,109257],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[1903,109259,109260],{},"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":62,"searchDepth":80,"depth":80,"links":109262},[109263,109264,109265,109270,109274,109275,109276,109284],{"id":102420,"depth":80,"text":102421},{"id":102543,"depth":80,"text":102544},{"id":102818,"depth":80,"text":102819,"children":109266},[109267,109268,109269],{"id":107906,"depth":112,"text":107907},{"id":107956,"depth":112,"text":107957},{"id":108022,"depth":112,"text":108023},{"id":103026,"depth":80,"text":103027,"children":109271},[109272,109273],{"id":103345,"depth":112,"text":103345},{"id":103481,"depth":112,"text":103481},{"id":104088,"depth":80,"text":104089},{"id":104120,"depth":80,"text":104121},{"id":104225,"depth":80,"text":104226,"children":109277},[109278,109279,109280,109281,109283],{"id":109112,"depth":112,"text":109115},{"id":109124,"depth":112,"text":109124},{"id":109150,"depth":112,"text":109150},{"id":109159,"depth":112,"text":109282},"data.ctrl[0] 写了但没有效果",{"id":109190,"depth":112,"text":109190},{"id":104379,"depth":80,"text":104380},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":107594,"description":62},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":109291,"title":109292,"body":109293,"description":62,"extension":1927,"meta":111201,"navigation":108,"path":111202,"seo":111203,"stem":111204,"__hash__":111205},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":109294,"toc":111177},[109295,109298,109300,109303,109311,109314,109331,109334,109359,109362,109408,109410,109412,109467,109469,109488,109490,109533,109536,109553,109556,109572,109582,109589,109591,109594,109597,109631,109634,109682,109686,109689,109703,109712,109716,109719,109744,109747,109751,109764,109767,109773,109776,109791,109793,109796,110056,110058,110070,110073,110385,110387,110399,110401,110404,110419,110424,110427,110448,110451,110454,110488,110491,110495,110506,110509,110526,110529,110543,110550,110570,110577,110591,110594,110606,110621,110641,110644,110666,110669,110673,110688,110699,110714,110717,110747,110763,110792,110800,110824,110827,110845,110855,110867,110874,110883,110889,110898,110901,110903,110912,110915,110930,110932,110935,110946,110949,110960,110963,110981,110983,111000,111003,111031,111033,111037,111040,111070,111076,111079,111083,111091,111094,111096,111117,111120,111123,111139,111142,111158,111160,111163,111174],[10,109296,109292],{"id":109297},"_5viewer-可视化与-renderer-离屏渲染",[14,109299,102421],{"id":102420},[19,109301,109302],{},"本章掌握两类可视化方式:",[31,109304,109305,109308],{},[34,109306,109307],{},"交互式 viewer: 适合人工观察仿真",[34,109309,109310],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,109312,109313],{},"使用官方接口:",[57,109315,109317],{"className":59,"code":109316,"language":61,"meta":62,"style":62},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[23,109318,109319,109326],{"__ignoreMap":62},[66,109320,109321,109323],{"class":68,"line":69},[66,109322,284],{"class":72},[66,109324,109325],{"class":76}," mujoco.viewer\n",[66,109327,109328],{"class":68,"line":80},[66,109329,109330],{"class":76},"mujoco.viewer.launch_passive(model, data)\n",[19,109332,109333],{},"以及:",[57,109335,109337],{"className":59,"code":109336,"language":61,"meta":62,"style":62},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[23,109338,109339,109349],{"__ignoreMap":62},[66,109340,109341,109344,109346],{"class":68,"line":69},[66,109342,109343],{"class":76},"renderer ",[66,109345,99],{"class":72},[66,109347,109348],{"class":76}," mujoco.Renderer(model)\n",[66,109350,109351,109354,109356],{"class":68,"line":80},[66,109352,109353],{"class":76},"image ",[66,109355,99],{"class":72},[66,109357,109358],{"class":76}," renderer.render()\n",[19,109360,109361],{},"新手建议先理解二者区别：",[2129,109363,109364,109380],{},[2132,109365,109366],{},[2135,109367,109368,109371,109374,109377],{},[2138,109369,109370],{"align":25539},"工具",[2138,109372,109373],{"align":25539},"用途",[2138,109375,109376],{"align":25539},"是否打开窗口",[2138,109378,109379],{"align":25539},"常见场景",[2176,109381,109382,109395],{},[2135,109383,109384,109387,109390,109392],{},[2181,109385,109386],{"align":25539},"Viewer",[2181,109388,109389],{"align":25539},"人眼实时观察仿真",[2181,109391,106438],{"align":25539},[2181,109393,109394],{"align":25539},"调试模型、看控制效果",[2135,109396,109397,109400,109403,109405],{},[2181,109398,109399],{"align":25539},"Renderer",[2181,109401,109402],{"align":25539},"生成图像数组",[2181,109404,106451],{"align":25539},[2181,109406,109407],{"align":25539},"保存图片、训练视觉策略、服务器批量采集",[14,109409,102544],{"id":102543},[19,109411,102547],{},[57,109413,109415],{"className":25625,"code":109414,"language":25627,"meta":62,"style":62},"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",[23,109416,109417,109429,109439,109447,109455],{"__ignoreMap":62},[66,109418,109419,109421,109423,109425,109427],{"class":68,"line":69},[66,109420,26380],{"class":3793},[66,109422,28116],{"class":356},[66,109424,25637],{"class":356},[66,109426,28201],{"class":102},[66,109428,26481],{"class":102},[66,109430,109431,109433,109435,109437],{"class":68,"line":80},[66,109432,102582],{"class":356},[66,109434,102585],{"class":356},[66,109436,102588],{"class":356},[66,109438,26481],{"class":102},[66,109440,109441,109443,109445],{"class":68,"line":112},[66,109442,102595],{"class":356},[66,109444,102598],{"class":356},[66,109446,26481],{"class":102},[66,109448,109449,109451,109453],{"class":68,"line":129},[66,109450,102605],{"class":356},[66,109452,102608],{"class":356},[66,109454,26481],{"class":102},[66,109456,109457,109459,109461,109463,109465],{"class":68,"line":138},[66,109458,102615],{"class":356},[66,109460,102618],{"class":356},[66,109462,102621],{"class":356},[66,109464,102624],{"class":356},[66,109466,104289],{"class":356},[19,109468,104592],{},[57,109470,109472],{"className":25625,"code":109471,"language":25627,"meta":62,"style":62},"pip install \"mujoco>=2.3\" numpy pillow\n",[23,109473,109474],{"__ignoreMap":62},[66,109475,109476,109478,109480,109482,109485],{"class":68,"line":69},[66,109477,25634],{"class":3793},[66,109479,25637],{"class":356},[66,109481,102704],{"class":356},[66,109483,109484],{"class":356}," numpy",[66,109486,109487],{"class":356}," pillow\n",[19,109489,104609],{},[57,109491,109493],{"className":25625,"code":109492,"language":25627,"meta":62,"style":62},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[23,109494,109495,109512,109521],{"__ignoreMap":62},[66,109496,109497,109499,109501,109503,109506,109508,109510],{"class":68,"line":69},[66,109498,32130],{"class":3793},[66,109500,30976],{"class":356},[66,109502,26918],{"class":102},[66,109504,109505],{"class":356}," mujoco-render",[66,109507,102749],{"class":356},[66,109509,102752],{"class":102},[66,109511,102755],{"class":102},[66,109513,109514,109516,109518],{"class":68,"line":80},[66,109515,32130],{"class":3793},[66,109517,102762],{"class":356},[66,109519,109520],{"class":356}," mujoco-render\n",[66,109522,109523,109525,109527,109529,109531],{"class":68,"line":112},[66,109524,25634],{"class":3793},[66,109526,25637],{"class":356},[66,109528,102704],{"class":356},[66,109530,109484],{"class":356},[66,109532,109487],{"class":356},[19,109534,109535],{},"离屏渲染后端:",[57,109537,109539],{"className":25625,"code":109538,"language":25627,"meta":62,"style":62},"export MUJOCO_GL=egl\n",[23,109540,109541],{"__ignoreMap":62},[66,109542,109543,109545,109548,109550],{"class":68,"line":69},[66,109544,26845],{"class":72},[66,109546,109547],{"class":76}," MUJOCO_GL",[66,109549,99],{"class":72},[66,109551,109552],{"class":76},"egl\n",[19,109554,109555],{},"或:",[57,109557,109559],{"className":25625,"code":109558,"language":25627,"meta":62,"style":62},"export MUJOCO_GL=osmesa\n",[23,109560,109561],{"__ignoreMap":62},[66,109562,109563,109565,109567,109569],{"class":68,"line":69},[66,109564,26845],{"class":72},[66,109566,109547],{"class":76},[66,109568,99],{"class":72},[66,109570,109571],{"class":76},"osmesa\n",[19,109573,109574,109575,109578,109579,158],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[23,109576,109577],{},"egl"," 失败，再尝试 ",[23,109580,109581],{},"osmesa",[19,109583,109584,109585,109588],{},"如果你在本机桌面环境运行，通常先不要设置 ",[23,109586,109587],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,109590,102819],{"id":102818},[19,109592,109593],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,109595,109596],{},"典型 viewer 流程:",[57,109598,109600],{"className":59,"code":109599,"language":61,"meta":62,"style":62},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[23,109601,109602,109615,109622,109626],{"__ignoreMap":62},[66,109603,109604,109607,109610,109612],{"class":68,"line":69},[66,109605,109606],{"class":72},"with",[66,109608,109609],{"class":76}," mujoco.viewer.launch_passive(model, data) ",[66,109611,33176],{"class":72},[66,109613,109614],{"class":76}," viewer:\n",[66,109616,109617,109619],{"class":68,"line":80},[66,109618,4077],{"class":72},[66,109620,109621],{"class":76}," viewer.is_running():\n",[66,109623,109624],{"class":68,"line":112},[66,109625,103290],{"class":76},[66,109627,109628],{"class":68,"line":129},[66,109629,109630],{"class":76},"        viewer.sync()\n",[19,109632,109633],{},"典型 renderer 流程:",[57,109635,109637],{"className":59,"code":109636,"language":61,"meta":62,"style":62},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[23,109638,109639,109665,109669,109674],{"__ignoreMap":62},[66,109640,109641,109643,109645,109648,109650,109652,109654,109656,109658,109660,109663],{"class":68,"line":69},[66,109642,109343],{"class":76},[66,109644,99],{"class":72},[66,109646,109647],{"class":76}," mujoco.Renderer(model, ",[66,109649,26784],{"class":1234},[66,109651,99],{"class":72},[66,109653,44129],{"class":102},[66,109655,307],{"class":76},[66,109657,26780],{"class":1234},[66,109659,99],{"class":72},[66,109661,109662],{"class":102},"640",[66,109664,313],{"class":76},[66,109666,109667],{"class":68,"line":80},[66,109668,106278],{"class":76},[66,109670,109671],{"class":68,"line":112},[66,109672,109673],{"class":76},"renderer.update_scene(data)\n",[66,109675,109676,109678,109680],{"class":68,"line":129},[66,109677,109353],{"class":76},[66,109679,99],{"class":72},[66,109681,109358],{"class":76},[484,109683,109685],{"id":109684},"viewer-的同步逻辑","viewer 的同步逻辑",[19,109687,109688],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[57,109690,109692],{"className":59,"code":109691,"language":61,"meta":62,"style":62},"mujoco.mj_step(model, data)\nviewer.sync()\n",[23,109693,109694,109698],{"__ignoreMap":62},[66,109695,109696],{"class":68,"line":69},[66,109697,106278],{"class":76},[66,109699,109700],{"class":68,"line":80},[66,109701,109702],{"class":76},"viewer.sync()\n",[19,109704,109705,109707,109708,109711],{},[23,109706,102989],{}," 负责算物理，",[23,109709,109710],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[484,109713,109715],{"id":109714},"为什么要-sleep","为什么要 sleep",[19,109717,109718],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[57,109720,109722],{"className":59,"code":109721,"language":61,"meta":62,"style":62},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[23,109723,109724],{"__ignoreMap":62},[66,109725,109726,109729,109731,109734,109736,109739,109741],{"class":68,"line":69},[66,109727,109728],{"class":76},"sleep_time ",[66,109730,99],{"class":72},[66,109732,109733],{"class":76}," model.opt.timestep ",[66,109735,2511],{"class":72},[66,109737,109738],{"class":76}," (time.time() ",[66,109740,2511],{"class":72},[66,109742,109743],{"class":76}," step_start)\n",[19,109745,109746],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[484,109748,109750],{"id":109749},"renderer-输出是什么","renderer 输出是什么",[57,109752,109754],{"className":59,"code":109753,"language":61,"meta":62,"style":62},"image = renderer.render()\n",[23,109755,109756],{"__ignoreMap":62},[66,109757,109758,109760,109762],{"class":68,"line":69},[66,109759,109353],{"class":76},[66,109761,99],{"class":72},[66,109763,109358],{"class":76},[19,109765,109766],{},"得到的是 NumPy 数组，形状通常是：",[57,109768,109771],{"className":109769,"code":109770,"language":555,"meta":62},[553],"(height, width, 3)\n",[23,109772,109770],{"__ignoreMap":62},[19,109774,109775],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[57,109777,109779],{"className":59,"code":109778,"language":61,"meta":62,"style":62},"Image.fromarray(image).save(\"render_output.png\")\n",[23,109780,109781],{"__ignoreMap":62},[66,109782,109783,109786,109789],{"class":68,"line":69},[66,109784,109785],{"class":76},"Image.fromarray(image).save(",[66,109787,109788],{"class":356},"\"render_output.png\"",[66,109790,313],{"class":76},[14,109792,103027],{"id":103026},[19,109794,109795],{},"交互式 Viewer:",[57,109797,109799],{"className":59,"code":109798,"language":61,"meta":62,"style":62},"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",[23,109800,109801,109807,109811,109817,109823,109827,109831,109839,109844,109848,109852,109856,109861,109866,109870,109874,109878,109883,109887,109891,109895,109899,109903,109907,109919,109931,109939,109943,109953,109973,109983,109988,109993,109997,110014,110027,110032,110036,110040,110052],{"__ignoreMap":62},[66,109802,109803,109805],{"class":68,"line":69},[66,109804,284],{"class":72},[66,109806,33621],{"class":76},[66,109808,109809],{"class":68,"line":80},[66,109810,109],{"emptyLinePlaceholder":108},[66,109812,109813,109815],{"class":68,"line":112},[66,109814,284],{"class":72},[66,109816,103075],{"class":76},[66,109818,109819,109821],{"class":68,"line":129},[66,109820,284],{"class":72},[66,109822,109325],{"class":76},[66,109824,109825],{"class":68,"line":138},[66,109826,109],{"emptyLinePlaceholder":108},[66,109828,109829],{"class":68,"line":227},[66,109830,109],{"emptyLinePlaceholder":108},[66,109832,109833,109835,109837],{"class":68,"line":236},[66,109834,103088],{"class":102},[66,109836,15369],{"class":72},[66,109838,103093],{"class":356},[66,109840,109841],{"class":68,"line":241},[66,109842,109843],{"class":356},"\u003Cmujoco model=\"viewer_demo\">\n",[66,109845,109846],{"class":68,"line":372},[66,109847,103103],{"class":356},[66,109849,109850],{"class":68,"line":377},[66,109851,109],{"emptyLinePlaceholder":108},[66,109853,109854],{"class":68,"line":392},[66,109855,103112],{"class":356},[66,109857,109858],{"class":68,"line":405},[66,109859,109860],{"class":356},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[66,109862,109863],{"class":68,"line":418},[66,109864,109865],{"class":356},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[66,109867,109868],{"class":68,"line":430},[66,109869,109],{"emptyLinePlaceholder":108},[66,109871,109872],{"class":68,"line":438},[66,109873,103126],{"class":356},[66,109875,109876],{"class":68,"line":465},[66,109877,103131],{"class":356},[66,109879,109880],{"class":68,"line":1805},[66,109881,109882],{"class":356},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[66,109884,109885],{"class":68,"line":1817},[66,109886,103141],{"class":356},[66,109888,109889],{"class":68,"line":1822},[66,109890,103146],{"class":356},[66,109892,109893],{"class":68,"line":1829},[66,109894,103151],{"class":356},[66,109896,109897],{"class":68,"line":3529},[66,109898,97473],{"class":356},[66,109900,109901],{"class":68,"line":3557},[66,109902,109],{"emptyLinePlaceholder":108},[66,109904,109905],{"class":68,"line":3562},[66,109906,109],{"emptyLinePlaceholder":108},[66,109908,109909,109911,109913,109915,109917],{"class":68,"line":3579},[66,109910,33739],{"class":72},[66,109912,3803],{"class":3793},[66,109914,103172],{"class":76},[66,109916,97461],{"class":102},[66,109918,126],{"class":76},[66,109920,109921,109923,109925,109927,109929],{"class":68,"line":3584},[66,109922,103181],{"class":76},[66,109924,99],{"class":72},[66,109926,103186],{"class":76},[66,109928,103088],{"class":102},[66,109930,313],{"class":76},[66,109932,109933,109935,109937],{"class":68,"line":3589},[66,109934,103195],{"class":76},[66,109936,99],{"class":72},[66,109938,103200],{"class":76},[66,109940,109941],{"class":68,"line":3594},[66,109942,109],{"emptyLinePlaceholder":108},[66,109944,109945,109947,109949,109951],{"class":68,"line":3608},[66,109946,35966],{"class":72},[66,109948,109609],{"class":76},[66,109950,33176],{"class":72},[66,109952,109614],{"class":76},[66,109954,109955,109958,109961,109963,109966,109968,109971],{"class":68,"line":3613},[66,109956,109957],{"class":72},"        while",[66,109959,109960],{"class":76}," viewer.is_running() ",[66,109962,32258],{"class":72},[66,109964,109965],{"class":76}," data.time ",[66,109967,413],{"class":72},[66,109969,109970],{"class":102}," 5.0",[66,109972,126],{"class":76},[66,109974,109975,109978,109980],{"class":68,"line":4401},[66,109976,109977],{"class":76},"            step_start ",[66,109979,99],{"class":72},[66,109981,109982],{"class":76}," time.time()\n",[66,109984,109985],{"class":68,"line":4415},[66,109986,109987],{"class":76},"            mujoco.mj_step(model, data)\n",[66,109989,109990],{"class":68,"line":4423},[66,109991,109992],{"class":76},"            viewer.sync()\n",[66,109994,109995],{"class":68,"line":4428},[66,109996,109],{"emptyLinePlaceholder":108},[66,109998,109999,110002,110004,110006,110008,110010,110012],{"class":68,"line":4434},[66,110000,110001],{"class":76},"            sleep_time ",[66,110003,99],{"class":72},[66,110005,109733],{"class":76},[66,110007,2511],{"class":72},[66,110009,109738],{"class":76},[66,110011,2511],{"class":72},[66,110013,109743],{"class":76},[66,110015,110016,110018,110021,110023,110025],{"class":68,"line":4440},[66,110017,6458],{"class":72},[66,110019,110020],{"class":76}," sleep_time ",[66,110022,386],{"class":72},[66,110024,962],{"class":102},[66,110026,126],{"class":76},[66,110028,110029],{"class":68,"line":4445},[66,110030,110031],{"class":76},"                time.sleep(sleep_time)\n",[66,110033,110034],{"class":68,"line":9759},[66,110035,109],{"emptyLinePlaceholder":108},[66,110037,110038],{"class":68,"line":9783},[66,110039,109],{"emptyLinePlaceholder":108},[66,110041,110042,110044,110046,110048,110050],{"class":68,"line":9788},[66,110043,3373],{"class":72},[66,110045,33014],{"class":102},[66,110047,959],{"class":72},[66,110049,103335],{"class":356},[66,110051,126],{"class":76},[66,110053,110054],{"class":68,"line":9794},[66,110055,103342],{"class":76},[19,110057,105343],{},[57,110059,110061],{"className":25625,"code":110060,"language":25627,"meta":62,"style":62},"touch ch5_viewer.py\n",[23,110062,110063],{"__ignoreMap":62},[66,110064,110065,110067],{"class":68,"line":69},[66,110066,103057],{"class":3793},[66,110068,110069],{"class":356}," ch5_viewer.py\n",[19,110071,110072],{},"离屏 Renderer 保存图片:",[57,110074,110076],{"className":59,"code":110075,"language":61,"meta":62,"style":62},"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",[23,110077,110078,110090,110094,110100,110110,110114,110118,110126,110131,110135,110139,110143,110147,110152,110156,110160,110164,110168,110172,110176,110180,110184,110188,110192,110196,110208,110220,110228,110253,110257,110273,110277,110281,110296,110305,110309,110323,110328,110333,110337,110349,110361,110365,110369,110381],{"__ignoreMap":62},[66,110079,110080,110082,110085,110087],{"class":68,"line":69},[66,110081,32532],{"class":72},[66,110083,110084],{"class":76}," pathlib ",[66,110086,284],{"class":72},[66,110088,110089],{"class":76}," Path\n",[66,110091,110092],{"class":68,"line":80},[66,110093,109],{"emptyLinePlaceholder":108},[66,110095,110096,110098],{"class":68,"line":112},[66,110097,284],{"class":72},[66,110099,103075],{"class":76},[66,110101,110102,110104,110106,110108],{"class":68,"line":129},[66,110103,32532],{"class":72},[66,110105,49048],{"class":102},[66,110107,49051],{"class":72},[66,110109,49054],{"class":76},[66,110111,110112],{"class":68,"line":138},[66,110113,109],{"emptyLinePlaceholder":108},[66,110115,110116],{"class":68,"line":227},[66,110117,109],{"emptyLinePlaceholder":108},[66,110119,110120,110122,110124],{"class":68,"line":236},[66,110121,103088],{"class":102},[66,110123,15369],{"class":72},[66,110125,103093],{"class":356},[66,110127,110128],{"class":68,"line":241},[66,110129,110130],{"class":356},"\u003Cmujoco model=\"renderer_demo\">\n",[66,110132,110133],{"class":68,"line":372},[66,110134,103103],{"class":356},[66,110136,110137],{"class":68,"line":377},[66,110138,109],{"emptyLinePlaceholder":108},[66,110140,110141],{"class":68,"line":392},[66,110142,103112],{"class":356},[66,110144,110145],{"class":68,"line":405},[66,110146,109860],{"class":356},[66,110148,110149],{"class":68,"line":418},[66,110150,110151],{"class":356},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[66,110153,110154],{"class":68,"line":430},[66,110155,109865],{"class":356},[66,110157,110158],{"class":68,"line":438},[66,110159,109],{"emptyLinePlaceholder":108},[66,110161,110162],{"class":68,"line":465},[66,110163,103126],{"class":356},[66,110165,110166],{"class":68,"line":1805},[66,110167,103131],{"class":356},[66,110169,110170],{"class":68,"line":1817},[66,110171,109882],{"class":356},[66,110173,110174],{"class":68,"line":1822},[66,110175,103141],{"class":356},[66,110177,110178],{"class":68,"line":1829},[66,110179,103146],{"class":356},[66,110181,110182],{"class":68,"line":3529},[66,110183,103151],{"class":356},[66,110185,110186],{"class":68,"line":3557},[66,110187,97473],{"class":356},[66,110189,110190],{"class":68,"line":3562},[66,110191,109],{"emptyLinePlaceholder":108},[66,110193,110194],{"class":68,"line":3579},[66,110195,109],{"emptyLinePlaceholder":108},[66,110197,110198,110200,110202,110204,110206],{"class":68,"line":3584},[66,110199,33739],{"class":72},[66,110201,3803],{"class":3793},[66,110203,103172],{"class":76},[66,110205,97461],{"class":102},[66,110207,126],{"class":76},[66,110209,110210,110212,110214,110216,110218],{"class":68,"line":3589},[66,110211,103181],{"class":76},[66,110213,99],{"class":72},[66,110215,103186],{"class":76},[66,110217,103088],{"class":102},[66,110219,313],{"class":76},[66,110221,110222,110224,110226],{"class":68,"line":3594},[66,110223,103195],{"class":76},[66,110225,99],{"class":72},[66,110227,103200],{"class":76},[66,110229,110230,110233,110235,110237,110239,110241,110243,110245,110247,110249,110251],{"class":68,"line":3608},[66,110231,110232],{"class":76},"    renderer ",[66,110234,99],{"class":72},[66,110236,109647],{"class":76},[66,110238,26784],{"class":1234},[66,110240,99],{"class":72},[66,110242,44129],{"class":102},[66,110244,307],{"class":76},[66,110246,26780],{"class":1234},[66,110248,99],{"class":72},[66,110250,109662],{"class":102},[66,110252,313],{"class":76},[66,110254,110255],{"class":68,"line":3613},[66,110256,109],{"emptyLinePlaceholder":108},[66,110258,110259,110261,110263,110265,110267,110269,110271],{"class":68,"line":4401},[66,110260,1083],{"class":72},[66,110262,103275],{"class":76},[66,110264,507],{"class":72},[66,110266,510],{"class":102},[66,110268,348],{"class":76},[66,110270,310],{"class":102},[66,110272,522],{"class":76},[66,110274,110275],{"class":68,"line":4415},[66,110276,103290],{"class":76},[66,110278,110279],{"class":68,"line":4423},[66,110280,109],{"emptyLinePlaceholder":108},[66,110282,110283,110286,110289,110291,110294],{"class":68,"line":4428},[66,110284,110285],{"class":76},"    renderer.update_scene(data, ",[66,110287,110288],{"class":1234},"camera",[66,110290,99],{"class":72},[66,110292,110293],{"class":356},"\"fixed_camera\"",[66,110295,313],{"class":76},[66,110297,110298,110301,110303],{"class":68,"line":4434},[66,110299,110300],{"class":76},"    image ",[66,110302,99],{"class":72},[66,110304,109358],{"class":76},[66,110306,110307],{"class":68,"line":4440},[66,110308,109],{"emptyLinePlaceholder":108},[66,110310,110311,110314,110316,110319,110321],{"class":68,"line":4445},[66,110312,110313],{"class":76},"    output_path ",[66,110315,99],{"class":72},[66,110317,110318],{"class":76}," Path(",[66,110320,109788],{"class":356},[66,110322,313],{"class":76},[66,110324,110325],{"class":68,"line":9759},[66,110326,110327],{"class":76},"    Image.fromarray(image).save(output_path)\n",[66,110329,110330],{"class":68,"line":9783},[66,110331,110332],{"class":76},"    renderer.close()\n",[66,110334,110335],{"class":68,"line":9788},[66,110336,109],{"emptyLinePlaceholder":108},[66,110338,110339,110341,110343,110346],{"class":68,"line":9794},[66,110340,132],{"class":102},[66,110342,348],{"class":76},[66,110344,110345],{"class":356},"\"saved:\"",[66,110347,110348],{"class":76},", output_path.resolve())\n",[66,110350,110351,110353,110355,110358],{"class":68,"line":9821},[66,110352,132],{"class":102},[66,110354,348],{"class":76},[66,110356,110357],{"class":356},"\"image shape:\"",[66,110359,110360],{"class":76},", image.shape)\n",[66,110362,110363],{"class":68,"line":9826},[66,110364,109],{"emptyLinePlaceholder":108},[66,110366,110367],{"class":68,"line":9832},[66,110368,109],{"emptyLinePlaceholder":108},[66,110370,110371,110373,110375,110377,110379],{"class":68,"line":9844},[66,110372,3373],{"class":72},[66,110374,33014],{"class":102},[66,110376,959],{"class":72},[66,110378,103335],{"class":356},[66,110380,126],{"class":76},[66,110382,110383],{"class":68,"line":9856},[66,110384,103342],{"class":76},[19,110386,105343],{},[57,110388,110390],{"className":25625,"code":110389,"language":25627,"meta":62,"style":62},"touch ch5_renderer.py\n",[23,110391,110392],{"__ignoreMap":62},[66,110393,110394,110396],{"class":68,"line":69},[66,110395,103057],{"class":3793},[66,110397,110398],{"class":356}," ch5_renderer.py\n",[484,110400,103345],{"id":103345},[19,110402,110403],{},"viewer 上下文：",[57,110405,110407],{"className":59,"code":110406,"language":61,"meta":62,"style":62},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[23,110408,110409],{"__ignoreMap":62},[66,110410,110411,110413,110415,110417],{"class":68,"line":69},[66,110412,109606],{"class":72},[66,110414,109609],{"class":76},[66,110416,33176],{"class":72},[66,110418,109614],{"class":76},[19,110420,110421,110423],{},[23,110422,109606],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,110425,110426],{},"窗口循环：",[57,110428,110430],{"className":59,"code":110429,"language":61,"meta":62,"style":62},"while viewer.is_running() and data.time \u003C 5.0:\n",[23,110431,110432],{"__ignoreMap":62},[66,110433,110434,110436,110438,110440,110442,110444,110446],{"class":68,"line":69},[66,110435,73],{"class":72},[66,110437,109960],{"class":76},[66,110439,32258],{"class":72},[66,110441,109965],{"class":76},[66,110443,413],{"class":72},[66,110445,109970],{"class":102},[66,110447,126],{"class":76},[19,110449,110450],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,110452,110453],{},"固定相机：",[57,110455,110457],{"className":54849,"code":110456,"language":54851,"meta":62,"style":62},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[23,110458,110459],{"__ignoreMap":62},[66,110460,110461,110463,110465,110467,110469,110471,110473,110475,110478,110481,110483,110486],{"class":68,"line":69},[66,110462,413],{"class":76},[66,110464,110288],{"class":53084},[66,110466,16724],{"class":3793},[66,110468,99],{"class":76},[66,110470,110293],{"class":356},[66,110472,102880],{"class":3793},[66,110474,99],{"class":76},[66,110476,110477],{"class":356},"\"1.5 -2.0 1.2\"",[66,110479,110480],{"class":3793}," xyaxes",[66,110482,99],{"class":76},[66,110484,110485],{"class":356},"\"1 0.75 0 0 0 1\"",[66,110487,102918],{"class":76},[19,110489,110490],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[484,110492,110494],{"id":110493},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[57,110496,110498],{"className":59,"code":110497,"language":61,"meta":62,"style":62},"import time\n",[23,110499,110500],{"__ignoreMap":62},[66,110501,110502,110504],{"class":68,"line":69},[66,110503,284],{"class":72},[66,110505,33621],{"class":76},[19,110507,110508],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[57,110510,110512],{"className":59,"code":110511,"language":61,"meta":62,"style":62},"import mujoco\nimport mujoco.viewer\n",[23,110513,110514,110520],{"__ignoreMap":62},[66,110515,110516,110518],{"class":68,"line":69},[66,110517,284],{"class":72},[66,110519,103075],{"class":76},[66,110521,110522,110524],{"class":68,"line":80},[66,110523,284],{"class":72},[66,110525,109325],{"class":76},[19,110527,110528],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[57,110530,110531],{"className":59,"code":110406,"language":61,"meta":62,"style":62},[23,110532,110533],{"__ignoreMap":62},[66,110534,110535,110537,110539,110541],{"class":68,"line":69},[66,110536,109606],{"class":72},[66,110538,109609],{"class":76},[66,110540,33176],{"class":72},[66,110542,109614],{"class":76},[19,110544,110545,110546,110549],{},"打开一个 viewer 窗口。",[23,110547,110548],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[57,110551,110552],{"className":59,"code":110429,"language":61,"meta":62,"style":62},[23,110553,110554],{"__ignoreMap":62},[66,110555,110556,110558,110560,110562,110564,110566,110568],{"class":68,"line":69},[66,110557,73],{"class":72},[66,110559,109960],{"class":76},[66,110561,32258],{"class":72},[66,110563,109965],{"class":76},[66,110565,413],{"class":72},[66,110567,109970],{"class":102},[66,110569,126],{"class":76},[19,110571,110572,110573,110576],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[23,110574,110575],{},"viewer.is_running()"," 会变成 false，循环结束。",[57,110578,110580],{"className":59,"code":110579,"language":61,"meta":62,"style":62},"step_start = time.time()\n",[23,110581,110582],{"__ignoreMap":62},[66,110583,110584,110587,110589],{"class":68,"line":69},[66,110585,110586],{"class":76},"step_start ",[66,110588,99],{"class":72},[66,110590,109982],{"class":76},[19,110592,110593],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[57,110595,110596],{"className":59,"code":109691,"language":61,"meta":62,"style":62},[23,110597,110598,110602],{"__ignoreMap":62},[66,110599,110600],{"class":68,"line":69},[66,110601,106278],{"class":76},[66,110603,110604],{"class":68,"line":80},[66,110605,109702],{"class":76},[19,110607,110608,110610,110611,110613,110614,110616,110617,110620],{},[23,110609,102989],{}," 推进物理仿真。",[23,110612,109710],{}," 把最新的 ",[23,110615,35190],{}," 同步到窗口里显示。没有 ",[23,110618,110619],{},"sync()","，窗口可能看不到最新状态。",[57,110622,110623],{"className":59,"code":109721,"language":61,"meta":62,"style":62},[23,110624,110625],{"__ignoreMap":62},[66,110626,110627,110629,110631,110633,110635,110637,110639],{"class":68,"line":69},[66,110628,109728],{"class":76},[66,110630,99],{"class":72},[66,110632,109733],{"class":76},[66,110634,2511],{"class":72},[66,110636,109738],{"class":76},[66,110638,2511],{"class":72},[66,110640,109743],{"class":76},[19,110642,110643],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[57,110645,110647],{"className":59,"code":110646,"language":61,"meta":62,"style":62},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[23,110648,110649,110661],{"__ignoreMap":62},[66,110650,110651,110653,110655,110657,110659],{"class":68,"line":69},[66,110652,3373],{"class":72},[66,110654,110020],{"class":76},[66,110656,386],{"class":72},[66,110658,962],{"class":102},[66,110660,126],{"class":76},[66,110662,110663],{"class":68,"line":80},[66,110664,110665],{"class":76},"    time.sleep(sleep_time)\n",[19,110667,110668],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[484,110670,110672],{"id":110671},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[57,110674,110676],{"className":59,"code":110675,"language":61,"meta":62,"style":62},"from pathlib import Path\n",[23,110677,110678],{"__ignoreMap":62},[66,110679,110680,110682,110684,110686],{"class":68,"line":69},[66,110681,32532],{"class":72},[66,110683,110084],{"class":76},[66,110685,284],{"class":72},[66,110687,110089],{"class":76},[19,110689,110690,110691,110694,110695,110698],{},"导入 ",[23,110692,110693],{},"Path","，用来处理文件路径。相比直接写字符串，",[23,110696,110697],{},"Path(\"render_output.png\")"," 更清晰。",[57,110700,110702],{"className":59,"code":110701,"language":61,"meta":62,"style":62},"from PIL import Image\n",[23,110703,110704],{"__ignoreMap":62},[66,110705,110706,110708,110710,110712],{"class":68,"line":69},[66,110707,32532],{"class":72},[66,110709,49048],{"class":102},[66,110711,49051],{"class":72},[66,110713,49054],{"class":76},[19,110715,110716],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[57,110718,110719],{"className":54849,"code":110456,"language":54851,"meta":62,"style":62},[23,110720,110721],{"__ignoreMap":62},[66,110722,110723,110725,110727,110729,110731,110733,110735,110737,110739,110741,110743,110745],{"class":68,"line":69},[66,110724,413],{"class":76},[66,110726,110288],{"class":53084},[66,110728,16724],{"class":3793},[66,110730,99],{"class":76},[66,110732,110293],{"class":356},[66,110734,102880],{"class":3793},[66,110736,99],{"class":76},[66,110738,110477],{"class":356},[66,110740,110480],{"class":3793},[66,110742,99],{"class":76},[66,110744,110485],{"class":356},[66,110746,102918],{"class":76},[19,110748,110749,110750,110752,110753,110755,110756,110759,110760,110762],{},"定义一个相机。",[23,110751,81588],{}," 是相机名字。",[23,110754,105919],{}," 是相机在世界里的位置。",[23,110757,110758],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[23,110761,105919],{}," 来调视角。",[57,110764,110766],{"className":59,"code":110765,"language":61,"meta":62,"style":62},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[23,110767,110768],{"__ignoreMap":62},[66,110769,110770,110772,110774,110776,110778,110780,110782,110784,110786,110788,110790],{"class":68,"line":69},[66,110771,109343],{"class":76},[66,110773,99],{"class":72},[66,110775,109647],{"class":76},[66,110777,26784],{"class":1234},[66,110779,99],{"class":72},[66,110781,44129],{"class":102},[66,110783,307],{"class":76},[66,110785,26780],{"class":1234},[66,110787,99],{"class":72},[66,110789,109662],{"class":102},[66,110791,313],{"class":76},[19,110793,110794,110795,102792,110797,110799],{},"创建离屏渲染器。",[23,110796,26784],{},[23,110798,26780],{}," 决定输出图片大小。",[57,110801,110802],{"className":59,"code":103449,"language":61,"meta":62,"style":62},[23,110803,110804,110820],{"__ignoreMap":62},[66,110805,110806,110808,110810,110812,110814,110816,110818],{"class":68,"line":69},[66,110807,502],{"class":72},[66,110809,103275],{"class":76},[66,110811,507],{"class":72},[66,110813,510],{"class":102},[66,110815,348],{"class":76},[66,110817,310],{"class":102},[66,110819,522],{"class":76},[66,110821,110822],{"class":68,"line":80},[66,110823,103472],{"class":76},[19,110825,110826],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[57,110828,110830],{"className":59,"code":110829,"language":61,"meta":62,"style":62},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[23,110831,110832],{"__ignoreMap":62},[66,110833,110834,110837,110839,110841,110843],{"class":68,"line":69},[66,110835,110836],{"class":76},"renderer.update_scene(data, ",[66,110838,110288],{"class":1234},[66,110840,99],{"class":72},[66,110842,110293],{"class":356},[66,110844,313],{"class":76},[19,110846,110847,110848,110850,110851,110854],{},"告诉 renderer：用当前 ",[23,110849,35190],{}," 的状态更新画面，并使用名为 ",[23,110852,110853],{},"fixed_camera"," 的相机视角。",[57,110856,110857],{"className":59,"code":109753,"language":61,"meta":62,"style":62},[23,110858,110859],{"__ignoreMap":62},[66,110860,110861,110863,110865],{"class":68,"line":69},[66,110862,109353],{"class":76},[66,110864,99],{"class":72},[66,110866,109358],{"class":76},[19,110868,110869,110870,110873],{},"真正渲染出图像。",[23,110871,110872],{},"image"," 是一个 NumPy 数组，不是文件。",[57,110875,110877],{"className":59,"code":110876,"language":61,"meta":62,"style":62},"Image.fromarray(image).save(output_path)\n",[23,110878,110879],{"__ignoreMap":62},[66,110880,110881],{"class":68,"line":69},[66,110882,110876],{"class":76},[19,110884,110885,110886,158],{},"把数组转换成图片，并保存到 ",[23,110887,110888],{},"render_output.png",[57,110890,110892],{"className":59,"code":110891,"language":61,"meta":62,"style":62},"renderer.close()\n",[23,110893,110894],{"__ignoreMap":62},[66,110895,110896],{"class":68,"line":69},[66,110897,110891],{"class":76},[19,110899,110900],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,110902,104089],{"id":104088},[19,110904,110905,110906,110908,110909,158],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[23,110907,110888],{},"，并输出图像数组形状，例如 ",[23,110910,110911],{},"(480, 640, 3)",[19,110913,110914],{},"如果图片里看不到方块，先检查：",[31,110916,110917,110920,110923],{},[34,110918,110919],{},"方块是否掉到相机视野外。",[34,110921,110922],{},"camera 位置是否合理。",[34,110924,110925,110926,110929],{},"是否在 ",[23,110927,110928],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,110931,104121],{"id":104120},[19,110933,110934],{},"运行 viewer:",[57,110936,110938],{"className":25625,"code":110937,"language":25627,"meta":62,"style":62},"python ch5_viewer.py\n",[23,110939,110940],{"__ignoreMap":62},[66,110941,110942,110944],{"class":68,"line":69},[66,110943,61],{"class":3793},[66,110945,110069],{"class":356},[19,110947,110948],{},"运行 renderer:",[57,110950,110952],{"className":25625,"code":110951,"language":25627,"meta":62,"style":62},"python ch5_renderer.py\n",[23,110953,110954],{"__ignoreMap":62},[66,110955,110956,110958],{"class":68,"line":69},[66,110957,61],{"class":3793},[66,110959,110398],{"class":356},[19,110961,110962],{},"如果在服务器上运行:",[57,110964,110966],{"className":25625,"code":110965,"language":25627,"meta":62,"style":62},"MUJOCO_GL=egl python ch5_renderer.py\n",[23,110967,110968],{"__ignoreMap":62},[66,110969,110970,110972,110974,110976,110979],{"class":68,"line":69},[66,110971,109587],{"class":76},[66,110973,99],{"class":72},[66,110975,109577],{"class":356},[66,110977,110978],{"class":3793}," python",[66,110980,110398],{"class":356},[19,110982,109555],{},[57,110984,110986],{"className":25625,"code":110985,"language":25627,"meta":62,"style":62},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[23,110987,110988],{"__ignoreMap":62},[66,110989,110990,110992,110994,110996,110998],{"class":68,"line":69},[66,110991,109587],{"class":76},[66,110993,99],{"class":72},[66,110995,109581],{"class":356},[66,110997,110978],{"class":3793},[66,110999,110398],{"class":356},[19,111001,111002],{},"再做几个练习：",[31,111004,111005,111012,111015,111021],{},[34,111006,111007,111008,111011],{},"把 renderer 分辨率改成 ",[23,111009,111010],{},"height=240, width=320","，观察输出 shape。",[34,111013,111014],{},"把方块颜色改成蓝色，重新保存图片。",[34,111016,111017,111018,111020],{},"把相机 ",[23,111019,105919],{}," 改远一点，观察画面中物体是否变小。",[34,111022,111023,111024,104187,111027,111030],{},"把 viewer 示例中的 ",[23,111025,111026],{},"data.time \u003C 5.0",[23,111028,111029],{},"data.time \u003C 20.0","，观察更长时间。",[14,111032,104226],{"id":104225},[484,111034,111036],{"id":111035},"viewer-窗口打不开","viewer 窗口打不开",[19,111038,111039],{},"安装:",[57,111041,111043],{"className":25625,"code":111042,"language":25627,"meta":62,"style":62},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[23,111044,111045],{"__ignoreMap":62},[66,111046,111047,111049,111051,111053,111055,111057,111059,111061,111063,111065,111067],{"class":68,"line":69},[66,111048,26380],{"class":3793},[66,111050,28116],{"class":356},[66,111052,25637],{"class":356},[66,111054,28201],{"class":102},[66,111056,104279],{"class":356},[66,111058,102608],{"class":356},[66,111060,104284],{"class":356},[66,111062,102621],{"class":356},[66,111064,102627],{"class":356},[66,111066,102618],{"class":356},[66,111068,111069],{"class":356}," libXinerama\n",[484,111071,111073],{"id":111072},"glfwerror",[23,111074,111075],{},"GLFWError",[19,111077,111078],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[484,111080,111082],{"id":111081},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,111084,111085,111086,84316,111088,111090],{},"尝试 ",[23,111087,102811],{},[23,111089,102814],{},"。可能存在版本差异。",[484,111092,111093],{"id":111093},"保存图片是黑的",[19,111095,104348],{},[31,111097,111098,111101,111104,111114],{},[34,111099,111100],{},"XML 里是否有 light。",[34,111102,111103],{},"相机是否对着模型。",[34,111105,111106,111107,111110,111111,158],{},"是否先 ",[23,111108,111109],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[23,111112,111113],{},"renderer.render()",[34,111115,111116],{},"物体是否已经掉出视野。",[484,111118,111119],{"id":111119},"远程服务器没有显示器",[19,111121,111122],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[57,111124,111125],{"className":25625,"code":110965,"language":25627,"meta":62,"style":62},[23,111126,111127],{"__ignoreMap":62},[66,111128,111129,111131,111133,111135,111137],{"class":68,"line":69},[66,111130,109587],{"class":76},[66,111132,99],{"class":72},[66,111134,109577],{"class":356},[66,111136,110978],{"class":3793},[66,111138,110398],{"class":356},[19,111140,111141],{},"如果 EGL 不可用，再尝试：",[57,111143,111144],{"className":25625,"code":110985,"language":25627,"meta":62,"style":62},[23,111145,111146],{"__ignoreMap":62},[66,111147,111148,111150,111152,111154,111156],{"class":68,"line":69},[66,111149,109587],{"class":76},[66,111151,99],{"class":72},[66,111153,109581],{"class":356},[66,111155,110978],{"class":3793},[66,111157,110398],{"class":356},[14,111159,104380],{"id":104379},[19,111161,111162],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[31,111164,111165,111168,111171],{},[34,111166,111167],{},"先用 viewer 看模型和控制是否正常。",[34,111169,111170],{},"再用 renderer 保存图片或构造视觉观测。",[34,111172,111173],{},"最后把状态、动作、图像、奖励组织成训练数据。",[1903,111175,111176],{},"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":62,"searchDepth":80,"depth":80,"links":111178},[111179,111180,111181,111186,111191,111192,111193,111200],{"id":102420,"depth":80,"text":102421},{"id":102543,"depth":80,"text":102544},{"id":102818,"depth":80,"text":102819,"children":111182},[111183,111184,111185],{"id":109684,"depth":112,"text":109685},{"id":109714,"depth":112,"text":109715},{"id":109749,"depth":112,"text":109750},{"id":103026,"depth":80,"text":103027,"children":111187},[111188,111189,111190],{"id":103345,"depth":112,"text":103345},{"id":110493,"depth":112,"text":110494},{"id":110671,"depth":112,"text":110672},{"id":104088,"depth":80,"text":104089},{"id":104120,"depth":80,"text":104121},{"id":104225,"depth":80,"text":104226,"children":111194},[111195,111196,111197,111198,111199],{"id":111035,"depth":112,"text":111036},{"id":111072,"depth":112,"text":111075},{"id":111081,"depth":112,"text":111082},{"id":111093,"depth":112,"text":111093},{"id":111119,"depth":112,"text":111119},{"id":104379,"depth":80,"text":104380},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":109292,"description":62},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":111207,"title":111208,"body":111209,"description":62,"extension":1927,"meta":113120,"navigation":108,"path":113121,"seo":113122,"stem":113123,"__hash__":113124},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":111210,"toc":113096},[111211,111214,111216,111219,111221,111240,111243,111249,111252,111254,111256,111280,111282,111296,111298,111339,111341,111352,111354,111357,111363,111366,111400,111403,111435,111438,111470,111474,111477,111517,111520,111526,111529,111535,111539,111542,111548,111551,111555,111558,111598,111600,111613,111616,111618,112200,112202,112214,112217,112228,112230,112233,112252,112264,112267,112288,112291,112294,112337,112340,112343,112363,112370,112372,112390,112405,112408,112414,112417,112423,112440,112447,112478,112489,112523,112534,112551,112560,112568,112573,112587,112590,112611,112617,112631,112636,112666,112676,112701,112709,112732,112735,112751,112754,112762,112768,112790,112803,112824,112833,112872,112883,112885,112888,112894,112897,112900,112906,112909,112929,112932,112934,112973,112975,112978,112986,112989,112992,113019,113022,113032,113038,113041,113047,113049,113055,113059,113062,113064,113067,113091,113094],[10,111212,111208],{"id":111213},"_6控制任务cartpole",[14,111215,102421],{"id":102420},[19,111217,111218],{},"本章搭建一个最小 Cartpole 控制任务。",[19,111220,106104],{},[31,111222,111223,111226,111228,111231,111234,111237],{},[34,111224,111225],{},"slide joint",[34,111227,107957],{},[34,111229,111230],{},"cart force actuator",[34,111232,111233],{},"状态观测",[34,111235,111236],{},"简单控制循环",[34,111238,111239],{},"reward 设计雏形",[19,111241,111242],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[57,111244,111247],{"className":111245,"code":111246,"language":555,"meta":62},[553],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[23,111248,111246],{"__ignoreMap":62},[19,111250,111251],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,111253,102544],{"id":102543},[19,111255,102547],{},[57,111257,111258],{"className":25625,"code":106161,"language":25627,"meta":62,"style":62},[23,111259,111260],{"__ignoreMap":62},[66,111261,111262,111264,111266,111268,111270,111272,111274,111276,111278],{"class":68,"line":69},[66,111263,26380],{"class":3793},[66,111265,28116],{"class":356},[66,111267,25637],{"class":356},[66,111269,28201],{"class":102},[66,111271,106176],{"class":356},[66,111273,102572],{"class":356},[66,111275,104274],{"class":356},[66,111277,102588],{"class":356},[66,111279,106185],{"class":356},[19,111281,104592],{},[57,111283,111284],{"className":25625,"code":102693,"language":25627,"meta":62,"style":62},[23,111285,111286],{"__ignoreMap":62},[66,111287,111288,111290,111292,111294],{"class":68,"line":69},[66,111289,25634],{"class":3793},[66,111291,25637],{"class":356},[66,111293,102704],{"class":356},[66,111295,102707],{"class":356},[19,111297,104609],{},[57,111299,111301],{"className":25625,"code":111300,"language":25627,"meta":62,"style":62},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[23,111302,111303,111320,111329],{"__ignoreMap":62},[66,111304,111305,111307,111309,111311,111314,111316,111318],{"class":68,"line":69},[66,111306,32130],{"class":3793},[66,111308,30976],{"class":356},[66,111310,26918],{"class":102},[66,111312,111313],{"class":356}," mujoco-cartpole",[66,111315,102749],{"class":356},[66,111317,102752],{"class":102},[66,111319,102755],{"class":102},[66,111321,111322,111324,111326],{"class":68,"line":80},[66,111323,32130],{"class":3793},[66,111325,102762],{"class":356},[66,111327,111328],{"class":356}," mujoco-cartpole\n",[66,111330,111331,111333,111335,111337],{"class":68,"line":112},[66,111332,25634],{"class":3793},[66,111334,25637],{"class":356},[66,111336,102704],{"class":356},[66,111338,102707],{"class":356},[19,111340,102778],{},[31,111342,111343,111346,111349],{},[34,111344,111345],{},"本章不依赖 Gymnasium。",[34,111347,111348],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[34,111350,111351],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,111353,102819],{"id":102818},[19,111355,111356],{},"Cartpole 的模型结构:",[57,111358,111361],{"className":111359,"code":111360,"language":555,"meta":62},[553],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[23,111362,111360],{"__ignoreMap":62},[19,111364,111365],{},"小车通过 slide joint 左右移动:",[57,111367,111369],{"className":54849,"code":111368,"language":54851,"meta":62,"style":62},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[23,111370,111371],{"__ignoreMap":62},[66,111372,111373,111375,111377,111379,111381,111384,111386,111388,111391,111393,111395,111398],{"class":68,"line":69},[66,111374,413],{"class":76},[66,111376,104729],{"class":53084},[66,111378,16724],{"class":3793},[66,111380,99],{"class":76},[66,111382,111383],{"class":356},"\"cart_x\"",[66,111385,55605],{"class":3793},[66,111387,99],{"class":76},[66,111389,111390],{"class":356},"\"slide\"",[66,111392,107801],{"class":3793},[66,111394,99],{"class":76},[66,111396,111397],{"class":356},"\"1 0 0\"",[66,111399,102918],{"class":76},[19,111401,111402],{},"杆子通过 hinge joint 旋转:",[57,111404,111406],{"className":54849,"code":111405,"language":54851,"meta":62,"style":62},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[23,111407,111408],{"__ignoreMap":62},[66,111409,111410,111412,111414,111416,111418,111421,111423,111425,111427,111429,111431,111433],{"class":68,"line":69},[66,111411,413],{"class":76},[66,111413,104729],{"class":53084},[66,111415,16724],{"class":3793},[66,111417,99],{"class":76},[66,111419,111420],{"class":356},"\"pole_hinge\"",[66,111422,55605],{"class":3793},[66,111424,99],{"class":76},[66,111426,107792],{"class":356},[66,111428,107801],{"class":3793},[66,111430,99],{"class":76},[66,111432,107806],{"class":356},[66,111434,102918],{"class":76},[19,111436,111437],{},"控制力作用在小车 slide joint 上:",[57,111439,111441],{"className":54849,"code":111440,"language":54851,"meta":62,"style":62},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[23,111442,111443],{"__ignoreMap":62},[66,111444,111445,111447,111449,111451,111453,111456,111458,111460,111462,111464,111466,111468],{"class":68,"line":69},[66,111446,413],{"class":76},[66,111448,107847],{"class":53084},[66,111450,16724],{"class":3793},[66,111452,99],{"class":76},[66,111454,111455],{"class":356},"\"cart_motor\"",[66,111457,107857],{"class":3793},[66,111459,99],{"class":76},[66,111461,111383],{"class":356},[66,111463,107864],{"class":3793},[66,111465,99],{"class":76},[66,111467,56097],{"class":356},[66,111469,102918],{"class":76},[484,111471,111473],{"id":111472},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,111475,111476],{},"这个简化模型有两个关节：",[2129,111478,111479,111490],{},[2132,111480,111481],{},[2135,111482,111483,111485,111487],{},[2138,111484,104532],{"align":25539},[2138,111486,25540],{"align":25539},[2138,111488,111489],{"align":25539},"对应状态",[2176,111491,111492,111505],{},[2135,111493,111494,111499,111502],{},[2181,111495,111496],{"align":25539},[23,111497,111498],{},"cart_x",[2181,111500,111501],{"align":25539},"slide",[2181,111503,111504],{"align":25539},"小车 x 位置",[2135,111506,111507,111512,111514],{},[2181,111508,111509],{"align":25539},[23,111510,111511],{},"pole_hinge",[2181,111513,107613],{"align":25539},[2181,111515,111516],{"align":25539},"杆子角度",[19,111518,111519],{},"所以：",[57,111521,111524],{"className":111522,"code":111523,"language":555,"meta":62},[553],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[23,111525,111523],{"__ignoreMap":62},[19,111527,111528],{},"把它们拼起来就是观测：",[57,111530,111533],{"className":111531,"code":111532,"language":555,"meta":62},[553],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[23,111534,111532],{"__ignoreMap":62},[484,111536,111538],{"id":111537},"action-是什么","action 是什么",[19,111540,111541],{},"本章只有一个 actuator：",[57,111543,111546],{"className":111544,"code":111545,"language":555,"meta":62},[553],"data.ctrl[0] = action\n",[23,111547,111545],{"__ignoreMap":62},[19,111549,111550],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[484,111552,111554],{"id":111553},"reward-是什么","reward 是什么",[19,111556,111557],{},"奖励函数：",[57,111559,111561],{"className":59,"code":111560,"language":61,"meta":62,"style":62},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[23,111562,111563],{"__ignoreMap":62},[66,111564,111565,111567,111570,111572,111574,111576,111579,111581,111584,111586,111588,111590,111593,111595],{"class":68,"line":69},[66,111566,18849],{"class":72},[66,111568,111569],{"class":102}," float",[66,111571,348],{"class":76},[66,111573,104176],{"class":102},[66,111575,1593],{"class":72},[66,111577,111578],{"class":102}," 0.1",[66,111580,8329],{"class":72},[66,111582,111583],{"class":76}," cart_x ",[66,111585,1208],{"class":72},[66,111587,111583],{"class":76},[66,111589,2511],{"class":72},[66,111591,111592],{"class":76}," pole_angle ",[66,111594,1208],{"class":72},[66,111596,111597],{"class":76}," pole_angle)\n",[19,111599,107999],{},[31,111601,111602,111607,111610],{},[34,111603,111604,111605,158],{},"基础奖励是 ",[23,111606,104176],{},[34,111608,111609],{},"小车离中心越远，扣分越多。",[34,111611,111612],{},"杆子角度越大，扣分越多。",[19,111614,111615],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,111617,103027],{"id":103026},[57,111619,111621],{"className":59,"code":111620,"language":61,"meta":62,"style":62},"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",[23,111622,111623,111629,111639,111643,111647,111655,111660,111664,111668,111672,111677,111681,111686,111691,111696,111700,111705,111710,111715,111719,111723,111727,111731,111735,111740,111744,111748,111752,111756,111760,111770,111777,111781,111785,111799,111813,111826,111856,111860,111864,111876,111888,111896,111900,111913,111917,111921,111930,111934,111950,111960,111973,111986,111990,112013,112031,112035,112047,112051,112055,112065,112075,112079,112095,112136,112140,112160,112176,112180,112184,112196],{"__ignoreMap":62},[66,111624,111625,111627],{"class":68,"line":69},[66,111626,284],{"class":72},[66,111628,103075],{"class":76},[66,111630,111631,111633,111635,111637],{"class":68,"line":80},[66,111632,284],{"class":72},[66,111634,33173],{"class":76},[66,111636,33176],{"class":72},[66,111638,33179],{"class":76},[66,111640,111641],{"class":68,"line":112},[66,111642,109],{"emptyLinePlaceholder":108},[66,111644,111645],{"class":68,"line":129},[66,111646,109],{"emptyLinePlaceholder":108},[66,111648,111649,111651,111653],{"class":68,"line":138},[66,111650,103088],{"class":102},[66,111652,15369],{"class":72},[66,111654,103093],{"class":356},[66,111656,111657],{"class":68,"line":227},[66,111658,111659],{"class":356},"\u003Cmujoco model=\"cartpole\">\n",[66,111661,111662],{"class":68,"line":236},[66,111663,103103],{"class":356},[66,111665,111666],{"class":68,"line":241},[66,111667,109],{"emptyLinePlaceholder":108},[66,111669,111670],{"class":68,"line":372},[66,111671,103112],{"class":356},[66,111673,111674],{"class":68,"line":377},[66,111675,111676],{"class":356},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[66,111678,111679],{"class":68,"line":392},[66,111680,109],{"emptyLinePlaceholder":108},[66,111682,111683],{"class":68,"line":405},[66,111684,111685],{"class":356},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[66,111687,111688],{"class":68,"line":418},[66,111689,111690],{"class":356},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[66,111692,111693],{"class":68,"line":430},[66,111694,111695],{"class":356},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[66,111697,111698],{"class":68,"line":438},[66,111699,109],{"emptyLinePlaceholder":108},[66,111701,111702],{"class":68,"line":465},[66,111703,111704],{"class":356},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[66,111706,111707],{"class":68,"line":1805},[66,111708,111709],{"class":356},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[66,111711,111712],{"class":68,"line":1817},[66,111713,111714],{"class":356},"        \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",[66,111716,111717],{"class":68,"line":1822},[66,111718,108211],{"class":356},[66,111720,111721],{"class":68,"line":1829},[66,111722,103141],{"class":356},[66,111724,111725],{"class":68,"line":3529},[66,111726,103146],{"class":356},[66,111728,111729],{"class":68,"line":3557},[66,111730,109],{"emptyLinePlaceholder":108},[66,111732,111733],{"class":68,"line":3562},[66,111734,108228],{"class":356},[66,111736,111737],{"class":68,"line":3579},[66,111738,111739],{"class":356},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[66,111741,111742],{"class":68,"line":3584},[66,111743,108238],{"class":356},[66,111745,111746],{"class":68,"line":3589},[66,111747,103151],{"class":356},[66,111749,111750],{"class":68,"line":3594},[66,111751,97473],{"class":356},[66,111753,111754],{"class":68,"line":3608},[66,111755,109],{"emptyLinePlaceholder":108},[66,111757,111758],{"class":68,"line":3613},[66,111759,109],{"emptyLinePlaceholder":108},[66,111761,111762,111764,111767],{"class":68,"line":4401},[66,111763,33739],{"class":72},[66,111765,111766],{"class":3793}," get_observation",[66,111768,111769],{"class":76},"(data: mujoco.MjData) -> np.ndarray:\n",[66,111771,111772,111774],{"class":68,"line":4415},[66,111773,5907],{"class":72},[66,111775,111776],{"class":76}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[66,111778,111779],{"class":68,"line":4423},[66,111780,109],{"emptyLinePlaceholder":108},[66,111782,111783],{"class":68,"line":4428},[66,111784,109],{"emptyLinePlaceholder":108},[66,111786,111787,111789,111792,111795,111797],{"class":68,"line":4434},[66,111788,33739],{"class":72},[66,111790,111791],{"class":3793}," compute_reward",[66,111793,111794],{"class":76},"(obs: np.ndarray) -> ",[66,111796,2038],{"class":102},[66,111798,126],{"class":76},[66,111800,111801,111804,111806,111809,111811],{"class":68,"line":4440},[66,111802,111803],{"class":76},"    cart_x ",[66,111805,99],{"class":72},[66,111807,111808],{"class":76}," obs[",[66,111810,2183],{"class":102},[66,111812,704],{"class":76},[66,111814,111815,111818,111820,111822,111824],{"class":68,"line":4445},[66,111816,111817],{"class":76},"    pole_angle ",[66,111819,99],{"class":72},[66,111821,111808],{"class":76},[66,111823,304],{"class":102},[66,111825,704],{"class":76},[66,111827,111828,111830,111832,111834,111836,111838,111840,111842,111844,111846,111848,111850,111852,111854],{"class":68,"line":9759},[66,111829,5907],{"class":72},[66,111831,111569],{"class":102},[66,111833,348],{"class":76},[66,111835,104176],{"class":102},[66,111837,1593],{"class":72},[66,111839,111578],{"class":102},[66,111841,8329],{"class":72},[66,111843,111583],{"class":76},[66,111845,1208],{"class":72},[66,111847,111583],{"class":76},[66,111849,2511],{"class":72},[66,111851,111592],{"class":76},[66,111853,1208],{"class":72},[66,111855,111597],{"class":76},[66,111857,111858],{"class":68,"line":9783},[66,111859,109],{"emptyLinePlaceholder":108},[66,111861,111862],{"class":68,"line":9788},[66,111863,109],{"emptyLinePlaceholder":108},[66,111865,111866,111868,111870,111872,111874],{"class":68,"line":9794},[66,111867,33739],{"class":72},[66,111869,3803],{"class":3793},[66,111871,103172],{"class":76},[66,111873,97461],{"class":102},[66,111875,126],{"class":76},[66,111877,111878,111880,111882,111884,111886],{"class":68,"line":9821},[66,111879,103181],{"class":76},[66,111881,99],{"class":72},[66,111883,103186],{"class":76},[66,111885,103088],{"class":102},[66,111887,313],{"class":76},[66,111889,111890,111892,111894],{"class":68,"line":9826},[66,111891,103195],{"class":76},[66,111893,99],{"class":72},[66,111895,103200],{"class":76},[66,111897,111898],{"class":68,"line":9832},[66,111899,109],{"emptyLinePlaceholder":108},[66,111901,111902,111904,111906,111908,111910],{"class":68,"line":9844},[66,111903,106842],{"class":76},[66,111905,304],{"class":102},[66,111907,6259],{"class":76},[66,111909,99],{"class":72},[66,111911,111912],{"class":102}," 0.1\n",[66,111914,111915],{"class":68,"line":9856},[66,111916,106855],{"class":76},[66,111918,111919],{"class":68,"line":9868},[66,111920,109],{"emptyLinePlaceholder":108},[66,111922,111923,111926,111928],{"class":68,"line":11523},[66,111924,111925],{"class":76},"    total_reward ",[66,111927,99],{"class":72},[66,111929,106534],{"class":102},[66,111931,111932],{"class":68,"line":11548},[66,111933,109],{"emptyLinePlaceholder":108},[66,111935,111936,111938,111940,111942,111944,111946,111948],{"class":68,"line":11571},[66,111937,1083],{"class":72},[66,111939,33409],{"class":76},[66,111941,507],{"class":72},[66,111943,510],{"class":102},[66,111945,348],{"class":76},[66,111947,8221],{"class":102},[66,111949,522],{"class":76},[66,111951,111952,111955,111957],{"class":68,"line":11595},[66,111953,111954],{"class":76},"        obs ",[66,111956,99],{"class":72},[66,111958,111959],{"class":76}," get_observation(data)\n",[66,111961,111962,111965,111967,111969,111971],{"class":68,"line":11600},[66,111963,111964],{"class":76},"        pole_angle ",[66,111966,99],{"class":72},[66,111968,111808],{"class":76},[66,111970,304],{"class":102},[66,111972,704],{"class":76},[66,111974,111975,111978,111980,111982,111984],{"class":68,"line":11605},[66,111976,111977],{"class":76},"        pole_angular_velocity ",[66,111979,99],{"class":72},[66,111981,111808],{"class":76},[66,111983,1520],{"class":102},[66,111985,704],{"class":76},[66,111987,111988],{"class":68,"line":11610},[66,111989,109],{"emptyLinePlaceholder":108},[66,111991,111992,111995,111997,112000,112002,112004,112006,112008,112010],{"class":68,"line":11619},[66,111993,111994],{"class":76},"        action ",[66,111996,99],{"class":72},[66,111998,111999],{"class":102}," 2.0",[66,112001,8329],{"class":72},[66,112003,111592],{"class":76},[66,112005,1184],{"class":72},[66,112007,63646],{"class":102},[66,112009,8329],{"class":72},[66,112011,112012],{"class":76}," pole_angular_velocity\n",[66,112014,112015,112017,112019,112021,112023,112025,112027,112029],{"class":68,"line":11624},[66,112016,111994],{"class":76},[66,112018,99],{"class":72},[66,112020,109220],{"class":76},[66,112022,2511],{"class":72},[66,112024,104176],{"class":102},[66,112026,307],{"class":76},[66,112028,104176],{"class":102},[66,112030,313],{"class":76},[66,112032,112033],{"class":68,"line":11630},[66,112034,109],{"emptyLinePlaceholder":108},[66,112036,112037,112039,112041,112043,112045],{"class":68,"line":11651},[66,112038,108390],{"class":76},[66,112040,2183],{"class":102},[66,112042,6259],{"class":76},[66,112044,99],{"class":72},[66,112046,109243],{"class":76},[66,112048,112049],{"class":68,"line":11657},[66,112050,103290],{"class":76},[66,112052,112053],{"class":68,"line":11671},[66,112054,109],{"emptyLinePlaceholder":108},[66,112056,112057,112060,112062],{"class":68,"line":11677},[66,112058,112059],{"class":76},"        reward ",[66,112061,99],{"class":72},[66,112063,112064],{"class":76}," compute_reward(get_observation(data))\n",[66,112066,112067,112070,112072],{"class":68,"line":11704},[66,112068,112069],{"class":76},"        total_reward ",[66,112071,144],{"class":72},[66,112073,112074],{"class":76}," reward\n",[66,112076,112077],{"class":68,"line":11713},[66,112078,109],{"emptyLinePlaceholder":108},[66,112080,112081,112083,112085,112087,112089,112091,112093],{"class":68,"line":11719},[66,112082,4321],{"class":72},[66,112084,33409],{"class":76},[66,112086,953],{"class":72},[66,112088,212],{"class":102},[66,112090,959],{"class":72},[66,112092,962],{"class":102},[66,112094,126],{"class":76},[66,112096,112097,112099,112101,112104,112107,112110,112113,112115,112118,112121,112123,112125,112127,112129,112132,112134],{"class":68,"line":11727},[66,112098,36438],{"class":102},[66,112100,348],{"class":76},[66,112102,112103],{"class":356},"\"step:\"",[66,112105,112106],{"class":76},", step, ",[66,112108,112109],{"class":356},"\"obs:\"",[66,112111,112112],{"class":76},", np.round(obs, ",[66,112114,1520],{"class":102},[66,112116,112117],{"class":76},"), ",[66,112119,112120],{"class":356},"\"action:\"",[66,112122,307],{"class":76},[66,112124,33810],{"class":102},[66,112126,348],{"class":76},[66,112128,2038],{"class":102},[66,112130,112131],{"class":76},"(action), ",[66,112133,1520],{"class":102},[66,112135,360],{"class":76},[66,112137,112138],{"class":68,"line":11732},[66,112139,109],{"emptyLinePlaceholder":108},[66,112141,112142,112144,112146,112149,112151,112153,112156,112158],{"class":68,"line":18407},[66,112143,132],{"class":102},[66,112145,348],{"class":76},[66,112147,112148],{"class":356},"\"total_reward:\"",[66,112150,307],{"class":76},[66,112152,33810],{"class":102},[66,112154,112155],{"class":76},"(total_reward, ",[66,112157,1520],{"class":102},[66,112159,360],{"class":76},[66,112161,112162,112164,112166,112169,112172,112174],{"class":68,"line":18413},[66,112163,132],{"class":102},[66,112165,348],{"class":76},[66,112167,112168],{"class":356},"\"final obs:\"",[66,112170,112171],{"class":76},", np.round(get_observation(data), ",[66,112173,1520],{"class":102},[66,112175,360],{"class":76},[66,112177,112178],{"class":68,"line":18436},[66,112179,109],{"emptyLinePlaceholder":108},[66,112181,112182],{"class":68,"line":18442},[66,112183,109],{"emptyLinePlaceholder":108},[66,112185,112186,112188,112190,112192,112194],{"class":68,"line":18465},[66,112187,3373],{"class":72},[66,112189,33014],{"class":102},[66,112191,959],{"class":72},[66,112193,103335],{"class":356},[66,112195,126],{"class":76},[66,112197,112198],{"class":68,"line":18479},[66,112199,103342],{"class":76},[19,112201,105343],{},[57,112203,112205],{"className":25625,"code":112204,"language":25627,"meta":62,"style":62},"touch ch6_cartpole.py\n",[23,112206,112207],{"__ignoreMap":62},[66,112208,112209,112211],{"class":68,"line":69},[66,112210,103057],{"class":3793},[66,112212,112213],{"class":356}," ch6_cartpole.py\n",[19,112215,112216],{},"运行：",[57,112218,112220],{"className":25625,"code":112219,"language":25627,"meta":62,"style":62},"python ch6_cartpole.py\n",[23,112221,112222],{"__ignoreMap":62},[66,112223,112224,112226],{"class":68,"line":69},[66,112225,61],{"class":3793},[66,112227,112213],{"class":356},[484,112229,103345],{"id":103345},[19,112231,112232],{},"构造观测：",[57,112234,112236],{"className":59,"code":112235,"language":61,"meta":62,"style":62},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[23,112237,112238,112246],{"__ignoreMap":62},[66,112239,112240,112242,112244],{"class":68,"line":69},[66,112241,33739],{"class":72},[66,112243,111766],{"class":3793},[66,112245,111769],{"class":76},[66,112247,112248,112250],{"class":68,"line":80},[66,112249,5907],{"class":72},[66,112251,111776],{"class":76},[19,112253,112254,112257,112258,112260,112261,112263],{},[23,112255,112256],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[23,112259,105803],{}," 2 维，",[23,112262,106133],{}," 2 维，所以 obs 是 4 维。",[19,112265,112266],{},"设置初始角度：",[57,112268,112270],{"className":59,"code":112269,"language":61,"meta":62,"style":62},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[23,112271,112272,112284],{"__ignoreMap":62},[66,112273,112274,112276,112278,112280,112282],{"class":68,"line":69},[66,112275,106472],{"class":76},[66,112277,304],{"class":102},[66,112279,6259],{"class":76},[66,112281,99],{"class":72},[66,112283,111912],{"class":102},[66,112285,112286],{"class":68,"line":80},[66,112287,106316],{"class":76},[19,112289,112290],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,112292,112293],{},"简单反馈控制：",[57,112295,112297],{"className":59,"code":112296,"language":61,"meta":62,"style":62},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[23,112298,112299,112319],{"__ignoreMap":62},[66,112300,112301,112303,112305,112307,112309,112311,112313,112315,112317],{"class":68,"line":69},[66,112302,109215],{"class":76},[66,112304,99],{"class":72},[66,112306,111999],{"class":102},[66,112308,8329],{"class":72},[66,112310,111592],{"class":76},[66,112312,1184],{"class":72},[66,112314,63646],{"class":102},[66,112316,8329],{"class":72},[66,112318,112012],{"class":76},[66,112320,112321,112323,112325,112327,112329,112331,112333,112335],{"class":68,"line":80},[66,112322,109215],{"class":76},[66,112324,99],{"class":72},[66,112326,109220],{"class":76},[66,112328,2511],{"class":72},[66,112330,104176],{"class":102},[66,112332,307],{"class":76},[66,112334,104176],{"class":102},[66,112336,313],{"class":76},[19,112338,112339],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,112341,112342],{},"限制动作：",[57,112344,112346],{"className":59,"code":112345,"language":61,"meta":62,"style":62},"np.clip(action, -1.0, 1.0)\n",[23,112347,112348],{"__ignoreMap":62},[66,112349,112350,112353,112355,112357,112359,112361],{"class":68,"line":69},[66,112351,112352],{"class":76},"np.clip(action, ",[66,112354,2511],{"class":72},[66,112356,104176],{"class":102},[66,112358,307],{"class":76},[66,112360,104176],{"class":102},[66,112362,313],{"class":76},[19,112364,112365,112366,112369],{},"因为 XML 里 ",[23,112367,112368],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[484,112371,103481],{"id":103481},[57,112373,112374],{"className":59,"code":112235,"language":61,"meta":62,"style":62},[23,112375,112376,112384],{"__ignoreMap":62},[66,112377,112378,112380,112382],{"class":68,"line":69},[66,112379,33739],{"class":72},[66,112381,111766],{"class":3793},[66,112383,111769],{"class":76},[66,112385,112386,112388],{"class":68,"line":80},[66,112387,5907],{"class":72},[66,112389,111776],{"class":76},[19,112391,112392,112393,112396,112397,112400,112401,112404],{},"这段定义了一个函数，用来获取当前观测。",[23,112394,112395],{},"data.qpos.copy()"," 是位置数组副本，",[23,112398,112399],{},"data.qvel.copy()"," 是速度数组副本。",[23,112402,112403],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,112406,112407],{},"在本章模型里：",[57,112409,112412],{"className":112410,"code":112411,"language":555,"meta":62},[553],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[23,112413,112411],{"__ignoreMap":62},[19,112415,112416],{},"所以返回的 obs 是：",[57,112418,112421],{"className":112419,"code":112420,"language":555,"meta":62},[553],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[23,112422,112420],{"__ignoreMap":62},[57,112424,112426],{"className":59,"code":112425,"language":61,"meta":62,"style":62},"def compute_reward(obs: np.ndarray) -> float:\n",[23,112427,112428],{"__ignoreMap":62},[66,112429,112430,112432,112434,112436,112438],{"class":68,"line":69},[66,112431,33739],{"class":72},[66,112433,111791],{"class":3793},[66,112435,111794],{"class":76},[66,112437,2038],{"class":102},[66,112439,126],{"class":76},[19,112441,112442,112443,112446],{},"这行定义奖励函数。输入是观测 ",[23,112444,112445],{},"obs","，输出是一个浮点数奖励。",[57,112448,112450],{"className":59,"code":112449,"language":61,"meta":62,"style":62},"cart_x = obs[0]\npole_angle = obs[1]\n",[23,112451,112452,112465],{"__ignoreMap":62},[66,112453,112454,112457,112459,112461,112463],{"class":68,"line":69},[66,112455,112456],{"class":76},"cart_x ",[66,112458,99],{"class":72},[66,112460,111808],{"class":76},[66,112462,2183],{"class":102},[66,112464,704],{"class":76},[66,112466,112467,112470,112472,112474,112476],{"class":68,"line":80},[66,112468,112469],{"class":76},"pole_angle ",[66,112471,99],{"class":72},[66,112473,111808],{"class":76},[66,112475,304],{"class":102},[66,112477,704],{"class":76},[19,112479,112480,112481,112484,112485,112488],{},"数组索引从 0 开始。",[23,112482,112483],{},"obs[0]"," 是第一个元素，也就是小车位置。",[23,112486,112487],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[57,112490,112491],{"className":59,"code":111560,"language":61,"meta":62,"style":62},[23,112492,112493],{"__ignoreMap":62},[66,112494,112495,112497,112499,112501,112503,112505,112507,112509,112511,112513,112515,112517,112519,112521],{"class":68,"line":69},[66,112496,18849],{"class":72},[66,112498,111569],{"class":102},[66,112500,348],{"class":76},[66,112502,104176],{"class":102},[66,112504,1593],{"class":72},[66,112506,111578],{"class":102},[66,112508,8329],{"class":72},[66,112510,111583],{"class":76},[66,112512,1208],{"class":72},[66,112514,111583],{"class":76},[66,112516,2511],{"class":72},[66,112518,111592],{"class":76},[66,112520,1208],{"class":72},[66,112522,111597],{"class":76},[19,112524,112525,112526,112529,112530,112533],{},"这行计算奖励。",[23,112527,112528],{},"cart_x * cart_x"," 是小车位置的平方，",[23,112531,112532],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[57,112535,112537],{"className":59,"code":112536,"language":61,"meta":62,"style":62},"data.qpos[1] = 0.1\n",[23,112538,112539],{"__ignoreMap":62},[66,112540,112541,112543,112545,112547,112549],{"class":68,"line":69},[66,112542,106472],{"class":76},[66,112544,304],{"class":102},[66,112546,6259],{"class":76},[66,112548,99],{"class":72},[66,112550,111912],{"class":102},[19,112552,112553,112554,112556,112557,112559],{},"手动设置杆子的初始角度。因为 ",[23,112555,107229],{}," 是小车位置，",[23,112558,107232],{}," 是杆子角度，所以这里改的是杆子。",[57,112561,112562],{"className":59,"code":106316,"language":61,"meta":62,"style":62},[23,112563,112564],{"__ignoreMap":62},[66,112565,112566],{"class":68,"line":69},[66,112567,106316],{"class":76},[19,112569,107275,112570,112572],{},[23,112571,105803],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[57,112574,112576],{"className":59,"code":112575,"language":61,"meta":62,"style":62},"total_reward = 0.0\n",[23,112577,112578],{"__ignoreMap":62},[66,112579,112580,112583,112585],{"class":68,"line":69},[66,112581,112582],{"class":76},"total_reward ",[66,112584,99],{"class":72},[66,112586,106534],{"class":102},[19,112588,112589],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[57,112591,112593],{"className":59,"code":112592,"language":61,"meta":62,"style":62},"for step in range(1000):\n",[23,112594,112595],{"__ignoreMap":62},[66,112596,112597,112599,112601,112603,112605,112607,112609],{"class":68,"line":69},[66,112598,502],{"class":72},[66,112600,33409],{"class":76},[66,112602,507],{"class":72},[66,112604,510],{"class":102},[66,112606,348],{"class":76},[66,112608,8221],{"class":102},[66,112610,522],{"class":76},[19,112612,112613,112614,112616],{},"循环 1000 步。",[23,112615,108907],{}," 是当前步数，从 0 到 999。",[57,112618,112620],{"className":59,"code":112619,"language":61,"meta":62,"style":62},"obs = get_observation(data)\n",[23,112621,112622],{"__ignoreMap":62},[66,112623,112624,112627,112629],{"class":68,"line":69},[66,112625,112626],{"class":76},"obs ",[66,112628,99],{"class":72},[66,112630,111959],{"class":76},[19,112632,112633,112634,158],{},"读取当前状态，保存到 ",[23,112635,112445],{},[57,112637,112639],{"className":59,"code":112638,"language":61,"meta":62,"style":62},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[23,112640,112641,112653],{"__ignoreMap":62},[66,112642,112643,112645,112647,112649,112651],{"class":68,"line":69},[66,112644,112469],{"class":76},[66,112646,99],{"class":72},[66,112648,111808],{"class":76},[66,112650,304],{"class":102},[66,112652,704],{"class":76},[66,112654,112655,112658,112660,112662,112664],{"class":68,"line":80},[66,112656,112657],{"class":76},"pole_angular_velocity ",[66,112659,99],{"class":72},[66,112661,111808],{"class":76},[66,112663,1520],{"class":102},[66,112665,704],{"class":76},[19,112667,112668,112669,112672,112673,158],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[23,112670,112671],{},"obs[3]","？因为 obs 的顺序是 ",[23,112674,112675],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[57,112677,112679],{"className":59,"code":112678,"language":61,"meta":62,"style":62},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[23,112680,112681],{"__ignoreMap":62},[66,112682,112683,112685,112687,112689,112691,112693,112695,112697,112699],{"class":68,"line":69},[66,112684,109215],{"class":76},[66,112686,99],{"class":72},[66,112688,111999],{"class":102},[66,112690,8329],{"class":72},[66,112692,111592],{"class":76},[66,112694,1184],{"class":72},[66,112696,63646],{"class":102},[66,112698,8329],{"class":72},[66,112700,112012],{"class":76},[19,112702,112703,112704,102792,112706,112708],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[23,112705,107033],{},[23,112707,37117],{}," 是人为设置的系数，不是固定公式。",[57,112710,112712],{"className":59,"code":112711,"language":61,"meta":62,"style":62},"action = np.clip(action, -1.0, 1.0)\n",[23,112713,112714],{"__ignoreMap":62},[66,112715,112716,112718,112720,112722,112724,112726,112728,112730],{"class":68,"line":69},[66,112717,109215],{"class":76},[66,112719,99],{"class":72},[66,112721,109220],{"class":76},[66,112723,2511],{"class":72},[66,112725,104176],{"class":102},[66,112727,307],{"class":76},[66,112729,104176],{"class":102},[66,112731,313],{"class":76},[19,112733,112734],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[57,112736,112737],{"className":59,"code":111545,"language":61,"meta":62,"style":62},[23,112738,112739],{"__ignoreMap":62},[66,112740,112741,112743,112745,112747,112749],{"class":68,"line":69},[66,112742,107644],{"class":76},[66,112744,2183],{"class":102},[66,112746,6259],{"class":76},[66,112748,99],{"class":72},[66,112750,109243],{"class":76},[19,112752,112753],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[57,112755,112756],{"className":59,"code":106278,"language":61,"meta":62,"style":62},[23,112757,112758],{"__ignoreMap":62},[66,112759,112760],{"class":68,"line":69},[66,112761,106278],{"class":76},[19,112763,112764,112765,112767],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[23,112766,107899],{}," 计算小车和杆子的下一刻状态。",[57,112769,112771],{"className":59,"code":112770,"language":61,"meta":62,"style":62},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[23,112772,112773,112782],{"__ignoreMap":62},[66,112774,112775,112778,112780],{"class":68,"line":69},[66,112776,112777],{"class":76},"reward ",[66,112779,99],{"class":72},[66,112781,112064],{"class":76},[66,112783,112784,112786,112788],{"class":68,"line":80},[66,112785,112582],{"class":76},[66,112787,144],{"class":72},[66,112789,112074],{"class":76},[19,112791,112792,112793,112795,112796,112799,112800,158],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[23,112794,144],{}," 是简写，",[23,112797,112798],{},"total_reward += reward"," 等价于 ",[23,112801,112802],{},"total_reward = total_reward + reward",[57,112804,112806],{"className":59,"code":112805,"language":61,"meta":62,"style":62},"if step % 100 == 0:\n",[23,112807,112808],{"__ignoreMap":62},[66,112809,112810,112812,112814,112816,112818,112820,112822],{"class":68,"line":69},[66,112811,3373],{"class":72},[66,112813,33409],{"class":76},[66,112815,953],{"class":72},[66,112817,212],{"class":102},[66,112819,959],{"class":72},[66,112821,962],{"class":102},[66,112823,126],{"class":76},[19,112825,112826,112828,112829,112832],{},[23,112827,953],{}," 是取余数。",[23,112830,112831],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[57,112834,112836],{"className":59,"code":112835,"language":61,"meta":62,"style":62},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[23,112837,112838],{"__ignoreMap":62},[66,112839,112840,112842,112844,112846,112848,112850,112852,112854,112856,112858,112860,112862,112864,112866,112868,112870],{"class":68,"line":69},[66,112841,244],{"class":102},[66,112843,348],{"class":76},[66,112845,112103],{"class":356},[66,112847,112106],{"class":76},[66,112849,112109],{"class":356},[66,112851,112112],{"class":76},[66,112853,1520],{"class":102},[66,112855,112117],{"class":76},[66,112857,112120],{"class":356},[66,112859,307],{"class":76},[66,112861,33810],{"class":102},[66,112863,348],{"class":76},[66,112865,2038],{"class":102},[66,112867,112131],{"class":76},[66,112869,1520],{"class":102},[66,112871,360],{"class":76},[19,112873,112874,112875,112878,112879,112882],{},"打印当前步数、观测和动作。",[23,112876,112877],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[23,112880,112881],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,112884,104089],{"id":104088},[19,112886,112887],{},"观测向量:",[57,112889,112892],{"className":112890,"code":112891,"language":555,"meta":62},[553],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[23,112893,112891],{"__ignoreMap":62},[19,112895,112896],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,112898,112899],{},"每隔 100 步会打印一次：",[57,112901,112904],{"className":112902,"code":112903,"language":555,"meta":62},[553],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[23,112905,112903],{"__ignoreMap":62},[19,112907,112908],{},"重点观察：",[31,112910,112911,112917,112922],{},[34,112912,112913,112916],{},[23,112914,112915],{},"pole_angle"," 是否越来越大。",[34,112918,112919,112921],{},[23,112920,111498],{}," 是否跑得太远。",[34,112923,112924,112925,84316,112927,158],{},"action 是否经常被 clip 到 ",[23,112926,105688],{},[23,112928,304],{},[19,112930,112931],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,112933,104121],{"id":104120},[31,112935,112936,112942,112945,112951,112961,112967,112970],{},[34,112937,112938,112939,158],{},"把初始角度改为 ",[23,112940,112941],{},"data.qpos[1] = 0.3",[34,112943,112944],{},"重新运行，观察控制是否变差。",[34,112946,112947,112948,112950],{},"把 actuator ",[23,112949,108840],{}," 改小。",[34,112952,112953,112954,112957,112958,158],{},"打印 ",[23,112955,112956],{},"model.nq, model.nv, model.nu","，应为 ",[23,112959,112960],{},"2 2 1",[34,112962,112963,112964,112966],{},"把 reward 里的 ",[23,112965,112532],{}," 系数改大，观察总奖励变化。",[34,112968,112969],{},"把控制器改成反号，观察杆子是否更容易倒。",[34,112971,112972],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,112974,104226],{"id":104225},[484,112976,112977],{"id":112977},"杆子方向和预期不一致",[19,112979,104169,112980,112982,112983,112985],{},[23,112981,108012],{}," 和 capsule 的 ",[23,112984,104949],{},"，必要时用 viewer 可视化确认。",[484,112987,112988],{"id":112988},"控制器越控越倒",[19,112990,112991],{},"说明反馈符号可能反了，尝试:",[57,112993,112995],{"className":59,"code":112994,"language":61,"meta":62,"style":62},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[23,112996,112997],{"__ignoreMap":62},[66,112998,112999,113001,113003,113005,113007,113009,113011,113013,113015,113017],{"class":68,"line":69},[66,113000,109215],{"class":76},[66,113002,99],{"class":72},[66,113004,1593],{"class":72},[66,113006,107033],{"class":102},[66,113008,8329],{"class":72},[66,113010,111592],{"class":76},[66,113012,2511],{"class":72},[66,113014,63646],{"class":102},[66,113016,8329],{"class":72},[66,113018,112012],{"class":76},[484,113020,113021],{"id":113021},"小车飞走",[19,113023,113024,113025,113027,113028,113031],{},"降低 ",[23,113026,108840],{}," 或缩小 ",[23,113029,113030],{},"action"," 的 clip 范围。",[484,113033,113035,113037],{"id":113034},"obs3-为什么是杆子角速度",[23,113036,112671],{}," 为什么是杆子角速度",[19,113039,113040],{},"因为这个模型里：",[57,113042,113045],{"className":113043,"code":113044,"language":555,"meta":62},[553],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[23,113046,113044],{"__ignoreMap":62},[19,113048,111519],{},[57,113050,113053],{"className":113051,"code":113052,"language":555,"meta":62},[553],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[23,113054,113052],{"__ignoreMap":62},[484,113056,113058],{"id":113057},"reward-变成负数是否错误","reward 变成负数是否错误",[19,113060,113061],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,113063,104380],{"id":104379},[19,113065,113066],{},"一个控制任务通常包含：",[31,113068,113069,113072,113080,113085,113088],{},[34,113070,113071],{},"模型：Cartpole 的 body、joint、actuator。",[34,113073,113074,113075,2204,113077,113079],{},"观测：从 ",[23,113076,105803],{},[23,113078,106133],{}," 里取状态。",[34,113081,113082,113083,158],{},"动作：写入 ",[23,113084,102850],{},[34,113086,113087],{},"奖励：根据任务目标打分。",[34,113089,113090],{},"循环：obs -> action -> step -> reward。",[19,113092,113093],{},"这就是后面 Gymnasium 环境的基本骨架。",[1903,113095,106059],{},{"title":62,"searchDepth":80,"depth":80,"links":113097},[113098,113099,113100,113105,113109,113110,113111,113119],{"id":102420,"depth":80,"text":102421},{"id":102543,"depth":80,"text":102544},{"id":102818,"depth":80,"text":102819,"children":113101},[113102,113103,113104],{"id":111472,"depth":112,"text":111473},{"id":111537,"depth":112,"text":111538},{"id":111553,"depth":112,"text":111554},{"id":103026,"depth":80,"text":103027,"children":113106},[113107,113108],{"id":103345,"depth":112,"text":103345},{"id":103481,"depth":112,"text":103481},{"id":104088,"depth":80,"text":104089},{"id":104120,"depth":80,"text":104121},{"id":104225,"depth":80,"text":104226,"children":113112},[113113,113114,113115,113116,113118],{"id":112977,"depth":112,"text":112977},{"id":112988,"depth":112,"text":112988},{"id":113021,"depth":112,"text":113021},{"id":113034,"depth":112,"text":113117},"obs[3] 为什么是杆子角速度",{"id":113057,"depth":112,"text":113058},{"id":104379,"depth":80,"text":104380},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":111208,"description":62},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":113126,"title":113127,"body":113128,"description":62,"extension":1927,"meta":115141,"navigation":108,"path":115142,"seo":115143,"stem":115144,"__hash__":115145},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":113129,"toc":115117},[113130,113133,113135,113138,113140,113157,113160,113163,113169,113172,113174,113176,113200,113202,113216,113218,113259,113261,113279,113281,113284,113290,113293,113321,113325,113331,113355,113358,113389,113396,113399,113402,113408,113411,113417,113420,113426,113430,113433,113458,113461,113463,114223,114225,114237,114239,114250,114252,114255,114272,114275,114277,114288,114291,114293,114339,114342,114355,114358,114440,114443,114445,114461,114471,114484,114487,114526,114536,114547,114557,114570,114573,114602,114605,114615,114618,114624,114641,114652,114654,114660,114677,114688,114709,114712,114724,114727,114748,114751,114759,114767,114784,114787,114856,114863,114871,114874,114887,114894,114896,114899,114905,114908,114911,114917,114923,114925,114965,114967,114973,114982,114985,114987,115007,115010,115013,115019,115023,115025,115052,115055,115058,115085,115091,115094,115097,115099,115102,115105,115111,115114],[10,113131,113127],{"id":113132},"_7控制任务reacher-机械臂到达目标",[14,113134,102421],{"id":102420},[19,113136,113137],{},"本章搭建一个二维两关节 reacher 任务。",[19,113139,106104],{},[31,113141,113142,113145,113148,113151,113154],{},[34,113143,113144],{},"两个 hinge joint",[34,113146,113147],{},"两个 motor actuator",[34,113149,113150],{},"site 作为末端点和目标点",[34,113152,113153],{},"根据末端和目标距离设计 reward",[34,113155,113156],{},"构造机械臂任务的基本形式",[19,113158,113159],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,113161,113162],{},"Reacher 任务可以理解为：",[57,113164,113167],{"className":113165,"code":113166,"language":555,"meta":62},[553],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[23,113168,113166],{"__ignoreMap":62},[19,113170,113171],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,113173,102544],{"id":102543},[19,113175,102547],{},[57,113177,113178],{"className":25625,"code":106161,"language":25627,"meta":62,"style":62},[23,113179,113180],{"__ignoreMap":62},[66,113181,113182,113184,113186,113188,113190,113192,113194,113196,113198],{"class":68,"line":69},[66,113183,26380],{"class":3793},[66,113185,28116],{"class":356},[66,113187,25637],{"class":356},[66,113189,28201],{"class":102},[66,113191,106176],{"class":356},[66,113193,102572],{"class":356},[66,113195,104274],{"class":356},[66,113197,102588],{"class":356},[66,113199,106185],{"class":356},[19,113201,104592],{},[57,113203,113204],{"className":25625,"code":102693,"language":25627,"meta":62,"style":62},[23,113205,113206],{"__ignoreMap":62},[66,113207,113208,113210,113212,113214],{"class":68,"line":69},[66,113209,25634],{"class":3793},[66,113211,25637],{"class":356},[66,113213,102704],{"class":356},[66,113215,102707],{"class":356},[19,113217,104609],{},[57,113219,113221],{"className":25625,"code":113220,"language":25627,"meta":62,"style":62},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[23,113222,113223,113240,113249],{"__ignoreMap":62},[66,113224,113225,113227,113229,113231,113234,113236,113238],{"class":68,"line":69},[66,113226,32130],{"class":3793},[66,113228,30976],{"class":356},[66,113230,26918],{"class":102},[66,113232,113233],{"class":356}," mujoco-reacher",[66,113235,102749],{"class":356},[66,113237,102752],{"class":102},[66,113239,102755],{"class":102},[66,113241,113242,113244,113246],{"class":68,"line":80},[66,113243,32130],{"class":3793},[66,113245,102762],{"class":356},[66,113247,113248],{"class":356}," mujoco-reacher\n",[66,113250,113251,113253,113255,113257],{"class":68,"line":112},[66,113252,25634],{"class":3793},[66,113254,25637],{"class":356},[66,113256,102704],{"class":356},[66,113258,102707],{"class":356},[19,113260,102778],{},[31,113262,113263,113266,113269],{},[34,113264,113265],{},"本章使用低维状态，不使用图像输入。",[34,113267,113268],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[34,113270,113271,113272,2204,113274,2204,113276,113278],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[23,113273,105803],{},[23,113275,106133],{},[23,113277,105453],{}," 的方法一致。",[14,113280,102819],{"id":102818},[19,113282,113283],{},"Reacher 任务核心:",[57,113285,113288],{"className":113286,"code":113287,"language":555,"meta":62},[553],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[23,113289,113287],{"__ignoreMap":62},[19,113291,113292],{},"读取 site 世界坐标:",[57,113294,113296],{"className":59,"code":113295,"language":61,"meta":62,"style":62},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[23,113297,113298,113311],{"__ignoreMap":62},[66,113299,113300,113302,113304,113306,113309],{"class":68,"line":69},[66,113301,105407],{"class":76},[66,113303,99],{"class":72},[66,113305,105178],{"class":76},[66,113307,113308],{"class":356},"\"tip\"",[66,113310,313],{"class":76},[66,113312,113313,113316,113318],{"class":68,"line":80},[66,113314,113315],{"class":76},"tip_pos ",[66,113317,99],{"class":72},[66,113319,113320],{"class":76}," data.site_xpos[site_id]\n",[484,113322,113324],{"id":113323},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,113326,113327,113328,113330],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[23,113329,105803],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[57,113332,113334],{"className":59,"code":113333,"language":61,"meta":62,"style":62},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[23,113335,113336,113346],{"__ignoreMap":62},[66,113337,113338,113341,113343],{"class":68,"line":69},[66,113339,113340],{"class":76},"tip ",[66,113342,99],{"class":72},[66,113344,113345],{"class":76}," data.site_xpos[tip_site_id]\n",[66,113347,113348,113350,113352],{"class":68,"line":80},[66,113349,1403],{"class":76},[66,113351,99],{"class":72},[66,113353,113354],{"class":76}," data.site_xpos[target_site_id]\n",[19,113356,113357],{},"这样 reward 就很容易写：",[57,113359,113361],{"className":59,"code":113360,"language":61,"meta":62,"style":62},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[23,113362,113363,113378],{"__ignoreMap":62},[66,113364,113365,113368,113370,113373,113375],{"class":68,"line":69},[66,113366,113367],{"class":76},"dist ",[66,113369,99],{"class":72},[66,113371,113372],{"class":76}," np.linalg.norm(tip ",[66,113374,2511],{"class":72},[66,113376,113377],{"class":76}," target)\n",[66,113379,113380,113382,113384,113386],{"class":68,"line":80},[66,113381,112777],{"class":76},[66,113383,99],{"class":72},[66,113385,1593],{"class":72},[66,113387,113388],{"class":76},"dist\n",[19,113390,113391,113392,113395],{},"距离越小，",[23,113393,113394],{},"-dist"," 越接近 0，奖励越高。",[484,113397,113398],{"id":113398},"两关节机械臂的状态",[19,113400,113401],{},"这个模型有两个 hinge joint：",[57,113403,113406],{"className":113404,"code":113405,"language":555,"meta":62},[553],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[23,113407,113405],{"__ignoreMap":62},[19,113409,113410],{},"再加上末端和目标位置：",[57,113412,113415],{"className":113413,"code":113414,"language":555,"meta":62},[553],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[23,113416,113414],{"__ignoreMap":62},[19,113418,113419],{},"总维度：",[57,113421,113424],{"className":113422,"code":113423,"language":555,"meta":62},[553],"2 + 2 + 3 + 3 = 10\n",[23,113425,113423],{"__ignoreMap":62},[484,113427,113429],{"id":113428},"为什么-gravity-是-0","为什么 gravity 是 0",[19,113431,113432],{},"本章把重力设为：",[57,113434,113436],{"className":54849,"code":113435,"language":54851,"meta":62,"style":62},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[23,113437,113438],{"__ignoreMap":62},[66,113439,113440,113442,113444,113446,113448,113450,113452,113454,113456],{"class":68,"line":69},[66,113441,413],{"class":76},[66,113443,70945],{"class":53084},[66,113445,102968],{"class":3793},[66,113447,99],{"class":76},[66,113449,102973],{"class":356},[66,113451,102976],{"class":3793},[66,113453,99],{"class":76},[66,113455,105544],{"class":356},[66,113457,102918],{"class":76},[19,113459,113460],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,113462,103027],{"id":103026},[57,113464,113466],{"className":59,"code":113465,"language":61,"meta":62,"style":62},"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",[23,113467,113468,113474,113484,113488,113492,113500,113505,113510,113514,113518,113523,113528,113532,113537,113542,113547,113551,113556,113561,113566,113571,113575,113579,113583,113587,113591,113596,113601,113605,113609,113613,113617,113621,113636,113645,113657,113680,113687,113691,113695,113705,113719,113733,113740,113744,113748,113762,113774,113786,113799,113814,113831,113835,113839,113851,113863,113871,113879,113883,113899,113904,113917,113930,113945,113949,113984,114016,114020,114024,114033,114037,114053,114063,114074,114090,114106,114122,114138,114142,114160,114180,114199,114203,114207,114219],{"__ignoreMap":62},[66,113469,113470,113472],{"class":68,"line":69},[66,113471,284],{"class":72},[66,113473,103075],{"class":76},[66,113475,113476,113478,113480,113482],{"class":68,"line":80},[66,113477,284],{"class":72},[66,113479,33173],{"class":76},[66,113481,33176],{"class":72},[66,113483,33179],{"class":76},[66,113485,113486],{"class":68,"line":112},[66,113487,109],{"emptyLinePlaceholder":108},[66,113489,113490],{"class":68,"line":129},[66,113491,109],{"emptyLinePlaceholder":108},[66,113493,113494,113496,113498],{"class":68,"line":138},[66,113495,103088],{"class":102},[66,113497,15369],{"class":72},[66,113499,103093],{"class":356},[66,113501,113502],{"class":68,"line":227},[66,113503,113504],{"class":356},"\u003Cmujoco model=\"two_link_reacher\">\n",[66,113506,113507],{"class":68,"line":236},[66,113508,113509],{"class":356},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[66,113511,113512],{"class":68,"line":241},[66,113513,109],{"emptyLinePlaceholder":108},[66,113515,113516],{"class":68,"line":372},[66,113517,103112],{"class":356},[66,113519,113520],{"class":68,"line":377},[66,113521,113522],{"class":356},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[66,113524,113525],{"class":68,"line":392},[66,113526,113527],{"class":356},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[66,113529,113530],{"class":68,"line":405},[66,113531,109],{"emptyLinePlaceholder":108},[66,113533,113534],{"class":68,"line":418},[66,113535,113536],{"class":356},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[66,113538,113539],{"class":68,"line":430},[66,113540,113541],{"class":356},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[66,113543,113544],{"class":68,"line":438},[66,113545,113546],{"class":356},"      \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",[66,113548,113549],{"class":68,"line":465},[66,113550,109],{"emptyLinePlaceholder":108},[66,113552,113553],{"class":68,"line":1805},[66,113554,113555],{"class":356},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[66,113557,113558],{"class":68,"line":1817},[66,113559,113560],{"class":356},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[66,113562,113563],{"class":68,"line":1822},[66,113564,113565],{"class":356},"        \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",[66,113567,113568],{"class":68,"line":1829},[66,113569,113570],{"class":356},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[66,113572,113573],{"class":68,"line":3529},[66,113574,108211],{"class":356},[66,113576,113577],{"class":68,"line":3557},[66,113578,103141],{"class":356},[66,113580,113581],{"class":68,"line":3562},[66,113582,103146],{"class":356},[66,113584,113585],{"class":68,"line":3579},[66,113586,109],{"emptyLinePlaceholder":108},[66,113588,113589],{"class":68,"line":3584},[66,113590,108228],{"class":356},[66,113592,113593],{"class":68,"line":3589},[66,113594,113595],{"class":356},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[66,113597,113598],{"class":68,"line":3594},[66,113599,113600],{"class":356},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[66,113602,113603],{"class":68,"line":3608},[66,113604,108238],{"class":356},[66,113606,113607],{"class":68,"line":3613},[66,113608,103151],{"class":356},[66,113610,113611],{"class":68,"line":4401},[66,113612,97473],{"class":356},[66,113614,113615],{"class":68,"line":4415},[66,113616,109],{"emptyLinePlaceholder":108},[66,113618,113619],{"class":68,"line":4423},[66,113620,109],{"emptyLinePlaceholder":108},[66,113622,113623,113625,113628,113631,113633],{"class":68,"line":4428},[66,113624,33739],{"class":72},[66,113626,113627],{"class":3793}," site_position",[66,113629,113630],{"class":76},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[66,113632,3144],{"class":102},[66,113634,113635],{"class":76},") -> np.ndarray:\n",[66,113637,113638,113640,113642],{"class":68,"line":4434},[66,113639,105173],{"class":76},[66,113641,99],{"class":72},[66,113643,113644],{"class":76}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[66,113646,113647,113649,113651,113653,113655],{"class":68,"line":4440},[66,113648,380],{"class":72},[66,113650,105222],{"class":76},[66,113652,413],{"class":72},[66,113654,962],{"class":102},[66,113656,126],{"class":76},[66,113658,113659,113661,113663,113665,113667,113670,113672,113674,113676,113678],{"class":68,"line":4445},[66,113660,105205],{"class":72},[66,113662,105208],{"class":102},[66,113664,348],{"class":76},[66,113666,445],{"class":72},[66,113668,113669],{"class":356},"\"site not found: ",[66,113671,451],{"class":102},[66,113673,81588],{"class":76},[66,113675,457],{"class":102},[66,113677,1130],{"class":356},[66,113679,313],{"class":76},[66,113681,113682,113684],{"class":68,"line":9759},[66,113683,5907],{"class":72},[66,113685,113686],{"class":76}," data.site_xpos[site_id].copy()\n",[66,113688,113689],{"class":68,"line":9783},[66,113690,109],{"emptyLinePlaceholder":108},[66,113692,113693],{"class":68,"line":9788},[66,113694,109],{"emptyLinePlaceholder":108},[66,113696,113697,113699,113702],{"class":68,"line":9794},[66,113698,33739],{"class":72},[66,113700,113701],{"class":3793}," get_obs",[66,113703,113704],{"class":76},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[66,113706,113707,113710,113712,113715,113717],{"class":68,"line":9821},[66,113708,113709],{"class":76},"    tip ",[66,113711,99],{"class":72},[66,113713,113714],{"class":76}," site_position(model, data, ",[66,113716,113308],{"class":356},[66,113718,313],{"class":76},[66,113720,113721,113724,113726,113728,113731],{"class":68,"line":9826},[66,113722,113723],{"class":76},"    target ",[66,113725,99],{"class":72},[66,113727,113714],{"class":76},[66,113729,113730],{"class":356},"\"target\"",[66,113732,313],{"class":76},[66,113734,113735,113737],{"class":68,"line":9832},[66,113736,5907],{"class":72},[66,113738,113739],{"class":76}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[66,113741,113742],{"class":68,"line":9844},[66,113743,109],{"emptyLinePlaceholder":108},[66,113745,113746],{"class":68,"line":9856},[66,113747,109],{"emptyLinePlaceholder":108},[66,113749,113750,113752,113755,113758,113760],{"class":68,"line":9868},[66,113751,33739],{"class":72},[66,113753,113754],{"class":3793}," reward",[66,113756,113757],{"class":76},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[66,113759,2038],{"class":102},[66,113761,126],{"class":76},[66,113763,113764,113766,113768,113770,113772],{"class":68,"line":11523},[66,113765,113709],{"class":76},[66,113767,99],{"class":72},[66,113769,113714],{"class":76},[66,113771,113308],{"class":356},[66,113773,313],{"class":76},[66,113775,113776,113778,113780,113782,113784],{"class":68,"line":11548},[66,113777,113723],{"class":76},[66,113779,99],{"class":72},[66,113781,113714],{"class":76},[66,113783,113730],{"class":356},[66,113785,313],{"class":76},[66,113787,113788,113791,113793,113795,113797],{"class":68,"line":11571},[66,113789,113790],{"class":76},"    dist ",[66,113792,99],{"class":72},[66,113794,113372],{"class":76},[66,113796,2511],{"class":72},[66,113798,113377],{"class":76},[66,113800,113801,113804,113806,113809,113811],{"class":68,"line":11595},[66,113802,113803],{"class":76},"    control_cost ",[66,113805,99],{"class":72},[66,113807,113808],{"class":102}," 0.01",[66,113810,8329],{"class":72},[66,113812,113813],{"class":76}," np.sum(np.square(data.ctrl))\n",[66,113815,113816,113818,113820,113822,113824,113826,113828],{"class":68,"line":11600},[66,113817,5907],{"class":72},[66,113819,111569],{"class":102},[66,113821,348],{"class":76},[66,113823,2511],{"class":72},[66,113825,113367],{"class":76},[66,113827,2511],{"class":72},[66,113829,113830],{"class":76}," control_cost)\n",[66,113832,113833],{"class":68,"line":11605},[66,113834,109],{"emptyLinePlaceholder":108},[66,113836,113837],{"class":68,"line":11610},[66,113838,109],{"emptyLinePlaceholder":108},[66,113840,113841,113843,113845,113847,113849],{"class":68,"line":11619},[66,113842,33739],{"class":72},[66,113844,3803],{"class":3793},[66,113846,103172],{"class":76},[66,113848,97461],{"class":102},[66,113850,126],{"class":76},[66,113852,113853,113855,113857,113859,113861],{"class":68,"line":11624},[66,113854,103181],{"class":76},[66,113856,99],{"class":72},[66,113858,103186],{"class":76},[66,113860,103088],{"class":102},[66,113862,313],{"class":76},[66,113864,113865,113867,113869],{"class":68,"line":11630},[66,113866,103195],{"class":76},[66,113868,99],{"class":72},[66,113870,103200],{"class":76},[66,113872,113873,113875,113877],{"class":68,"line":11651},[66,113874,111925],{"class":76},[66,113876,99],{"class":72},[66,113878,106534],{"class":102},[66,113880,113881],{"class":68,"line":11657},[66,113882,109],{"emptyLinePlaceholder":108},[66,113884,113885,113887,113889,113891,113893,113895,113897],{"class":68,"line":11671},[66,113886,1083],{"class":72},[66,113888,33409],{"class":76},[66,113890,507],{"class":72},[66,113892,510],{"class":102},[66,113894,348],{"class":76},[66,113896,66853],{"class":102},[66,113898,522],{"class":76},[66,113900,113901],{"class":68,"line":11677},[66,113902,113903],{"class":76},"        mujoco.mj_forward(model, data)\n",[66,113905,113906,113909,113911,113913,113915],{"class":68,"line":11704},[66,113907,113908],{"class":76},"        tip ",[66,113910,99],{"class":72},[66,113912,113714],{"class":76},[66,113914,113308],{"class":356},[66,113916,313],{"class":76},[66,113918,113919,113922,113924,113926,113928],{"class":68,"line":11713},[66,113920,113921],{"class":76},"        target ",[66,113923,99],{"class":72},[66,113925,113714],{"class":76},[66,113927,113730],{"class":356},[66,113929,313],{"class":76},[66,113931,113932,113935,113937,113940,113942],{"class":68,"line":11719},[66,113933,113934],{"class":76},"        error ",[66,113936,99],{"class":72},[66,113938,113939],{"class":76}," target ",[66,113941,2511],{"class":72},[66,113943,113944],{"class":76}," tip\n",[66,113946,113947],{"class":68,"line":11727},[66,113948,109],{"emptyLinePlaceholder":108},[66,113950,113951,113953,113955,113957,113959,113962,113964,113966,113969,113971,113974,113976,113978,113980,113982],{"class":68,"line":11732},[66,113952,108390],{"class":76},[66,113954,2183],{"class":102},[66,113956,6259],{"class":76},[66,113958,99],{"class":72},[66,113960,113961],{"class":76}," np.clip(",[66,113963,107033],{"class":102},[66,113965,8329],{"class":72},[66,113967,113968],{"class":76}," error[",[66,113970,795],{"class":102},[66,113972,113973],{"class":76},"], ",[66,113975,2511],{"class":72},[66,113977,104176],{"class":102},[66,113979,307],{"class":76},[66,113981,104176],{"class":102},[66,113983,313],{"class":76},[66,113985,113986,113988,113990,113992,113994,113996,113998,114000,114002,114004,114006,114008,114010,114012,114014],{"class":68,"line":18407},[66,113987,108390],{"class":76},[66,113989,304],{"class":102},[66,113991,6259],{"class":76},[66,113993,99],{"class":72},[66,113995,113961],{"class":76},[66,113997,107033],{"class":102},[66,113999,8329],{"class":72},[66,114001,113968],{"class":76},[66,114003,2183],{"class":102},[66,114005,113973],{"class":76},[66,114007,2511],{"class":72},[66,114009,104176],{"class":102},[66,114011,307],{"class":76},[66,114013,104176],{"class":102},[66,114015,313],{"class":76},[66,114017,114018],{"class":68,"line":18413},[66,114019,109],{"emptyLinePlaceholder":108},[66,114021,114022],{"class":68,"line":18436},[66,114023,103290],{"class":76},[66,114025,114026,114028,114030],{"class":68,"line":18442},[66,114027,112069],{"class":76},[66,114029,144],{"class":72},[66,114031,114032],{"class":76}," reward(model, data)\n",[66,114034,114035],{"class":68,"line":18465},[66,114036,109],{"emptyLinePlaceholder":108},[66,114038,114039,114041,114043,114045,114047,114049,114051],{"class":68,"line":18479},[66,114040,4321],{"class":72},[66,114042,33409],{"class":76},[66,114044,953],{"class":72},[66,114046,212],{"class":102},[66,114048,959],{"class":72},[66,114050,962],{"class":102},[66,114052,126],{"class":76},[66,114054,114055,114058,114060],{"class":68,"line":18499},[66,114056,114057],{"class":76},"            obs ",[66,114059,99],{"class":72},[66,114061,114062],{"class":76}," get_obs(model, data)\n",[66,114064,114065,114067,114069,114071],{"class":68,"line":18505},[66,114066,36438],{"class":102},[66,114068,348],{"class":76},[66,114070,112103],{"class":356},[66,114072,114073],{"class":76},", step)\n",[66,114075,114076,114078,114080,114083,114086,114088],{"class":68,"line":18516},[66,114077,36438],{"class":102},[66,114079,348],{"class":76},[66,114081,114082],{"class":356},"\"  tip:\"",[66,114084,114085],{"class":76},", np.round(tip, ",[66,114087,1520],{"class":102},[66,114089,360],{"class":76},[66,114091,114092,114094,114096,114099,114102,114104],{"class":68,"line":18539},[66,114093,36438],{"class":102},[66,114095,348],{"class":76},[66,114097,114098],{"class":356},"\"  target:\"",[66,114100,114101],{"class":76},", np.round(target, ",[66,114103,1520],{"class":102},[66,114105,360],{"class":76},[66,114107,114108,114110,114112,114115,114118,114120],{"class":68,"line":18561},[66,114109,36438],{"class":102},[66,114111,348],{"class":76},[66,114113,114114],{"class":356},"\"  ctrl:\"",[66,114116,114117],{"class":76},", np.round(data.ctrl.copy(), ",[66,114119,1520],{"class":102},[66,114121,360],{"class":76},[66,114123,114124,114126,114128,114131,114134,114136],{"class":68,"line":18566},[66,114125,36438],{"class":102},[66,114127,348],{"class":76},[66,114129,114130],{"class":356},"\"  obs_dim:\"",[66,114132,114133],{"class":76},", obs.shape[",[66,114135,2183],{"class":102},[66,114137,6473],{"class":76},[66,114139,114140],{"class":68,"line":18572},[66,114141,109],{"emptyLinePlaceholder":108},[66,114143,114144,114146,114148,114150,114152,114154,114156,114158],{"class":68,"line":18586},[66,114145,132],{"class":102},[66,114147,348],{"class":76},[66,114149,112148],{"class":356},[66,114151,307],{"class":76},[66,114153,33810],{"class":102},[66,114155,112155],{"class":76},[66,114157,1520],{"class":102},[66,114159,360],{"class":76},[66,114161,114162,114164,114166,114169,114172,114174,114176,114178],{"class":68,"line":18599},[66,114163,132],{"class":102},[66,114165,348],{"class":76},[66,114167,114168],{"class":356},"\"final tip:\"",[66,114170,114171],{"class":76},", np.round(site_position(model, data, ",[66,114173,113308],{"class":356},[66,114175,112117],{"class":76},[66,114177,1520],{"class":102},[66,114179,360],{"class":76},[66,114181,114182,114184,114186,114189,114191,114193,114195,114197],{"class":68,"line":18604},[66,114183,132],{"class":102},[66,114185,348],{"class":76},[66,114187,114188],{"class":356},"\"target:\"",[66,114190,114171],{"class":76},[66,114192,113730],{"class":356},[66,114194,112117],{"class":76},[66,114196,1520],{"class":102},[66,114198,360],{"class":76},[66,114200,114201],{"class":68,"line":18618},[66,114202,109],{"emptyLinePlaceholder":108},[66,114204,114205],{"class":68,"line":18623},[66,114206,109],{"emptyLinePlaceholder":108},[66,114208,114209,114211,114213,114215,114217],{"class":68,"line":18629},[66,114210,3373],{"class":72},[66,114212,33014],{"class":102},[66,114214,959],{"class":72},[66,114216,103335],{"class":356},[66,114218,126],{"class":76},[66,114220,114221],{"class":68,"line":18634},[66,114222,103342],{"class":76},[19,114224,105343],{},[57,114226,114228],{"className":25625,"code":114227,"language":25627,"meta":62,"style":62},"touch ch7_reacher.py\n",[23,114229,114230],{"__ignoreMap":62},[66,114231,114232,114234],{"class":68,"line":69},[66,114233,103057],{"class":3793},[66,114235,114236],{"class":356}," ch7_reacher.py\n",[19,114238,112216],{},[57,114240,114242],{"className":25625,"code":114241,"language":25627,"meta":62,"style":62},"python ch7_reacher.py\n",[23,114243,114244],{"__ignoreMap":62},[66,114245,114246,114248],{"class":68,"line":69},[66,114247,61],{"class":3793},[66,114249,114236],{"class":356},[484,114251,103345],{"id":103345},[19,114253,114254],{},"读取 site 坐标：",[57,114256,114258],{"className":59,"code":114257,"language":61,"meta":62,"style":62},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[23,114259,114260],{"__ignoreMap":62},[66,114261,114262,114264,114266,114268,114270],{"class":68,"line":69},[66,114263,33739],{"class":72},[66,114265,113627],{"class":3793},[66,114267,113630],{"class":76},[66,114269,3144],{"class":102},[66,114271,113635],{"class":76},[19,114273,114274],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,114276,112232],{},[57,114278,114280],{"className":59,"code":114279,"language":61,"meta":62,"style":62},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[23,114281,114282],{"__ignoreMap":62},[66,114283,114284,114286],{"class":68,"line":69},[66,114285,18849],{"class":72},[66,114287,113739],{"class":76},[19,114289,114290],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,114292,111557],{},[57,114294,114296],{"className":59,"code":114295,"language":61,"meta":62,"style":62},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[23,114297,114298,114310,114323],{"__ignoreMap":62},[66,114299,114300,114302,114304,114306,114308],{"class":68,"line":69},[66,114301,113367],{"class":76},[66,114303,99],{"class":72},[66,114305,113372],{"class":76},[66,114307,2511],{"class":72},[66,114309,113377],{"class":76},[66,114311,114312,114315,114317,114319,114321],{"class":68,"line":80},[66,114313,114314],{"class":76},"control_cost ",[66,114316,99],{"class":72},[66,114318,113808],{"class":102},[66,114320,8329],{"class":72},[66,114322,113813],{"class":76},[66,114324,114325,114327,114329,114331,114333,114335,114337],{"class":68,"line":112},[66,114326,18849],{"class":72},[66,114328,111569],{"class":102},[66,114330,348],{"class":76},[66,114332,2511],{"class":72},[66,114334,113367],{"class":76},[66,114336,2511],{"class":72},[66,114338,113830],{"class":76},[19,114340,114341],{},"奖励由两部分组成：",[31,114343,114344,114349],{},[34,114345,114346,114348],{},[23,114347,113394],{},"：末端离目标越远，奖励越低。",[34,114350,114351,114354],{},[23,114352,114353],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,114356,114357],{},"简单控制器：",[57,114359,114361],{"className":59,"code":114360,"language":61,"meta":62,"style":62},"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",[23,114362,114363,114376,114408],{"__ignoreMap":62},[66,114364,114365,114368,114370,114372,114374],{"class":68,"line":69},[66,114366,114367],{"class":76},"error ",[66,114369,99],{"class":72},[66,114371,113939],{"class":76},[66,114373,2511],{"class":72},[66,114375,113944],{"class":76},[66,114377,114378,114380,114382,114384,114386,114388,114390,114392,114394,114396,114398,114400,114402,114404,114406],{"class":68,"line":80},[66,114379,107644],{"class":76},[66,114381,2183],{"class":102},[66,114383,6259],{"class":76},[66,114385,99],{"class":72},[66,114387,113961],{"class":76},[66,114389,107033],{"class":102},[66,114391,8329],{"class":72},[66,114393,113968],{"class":76},[66,114395,795],{"class":102},[66,114397,113973],{"class":76},[66,114399,2511],{"class":72},[66,114401,104176],{"class":102},[66,114403,307],{"class":76},[66,114405,104176],{"class":102},[66,114407,313],{"class":76},[66,114409,114410,114412,114414,114416,114418,114420,114422,114424,114426,114428,114430,114432,114434,114436,114438],{"class":68,"line":112},[66,114411,107644],{"class":76},[66,114413,304],{"class":102},[66,114415,6259],{"class":76},[66,114417,99],{"class":72},[66,114419,113961],{"class":76},[66,114421,107033],{"class":102},[66,114423,8329],{"class":72},[66,114425,113968],{"class":76},[66,114427,2183],{"class":102},[66,114429,113973],{"class":76},[66,114431,2511],{"class":72},[66,114433,104176],{"class":102},[66,114435,307],{"class":76},[66,114437,104176],{"class":102},[66,114439,313],{"class":76},[19,114441,114442],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[484,114444,103481],{"id":103481},[57,114446,114447],{"className":59,"code":114257,"language":61,"meta":62,"style":62},[23,114448,114449],{"__ignoreMap":62},[66,114450,114451,114453,114455,114457,114459],{"class":68,"line":69},[66,114452,33739],{"class":72},[66,114454,113627],{"class":3793},[66,114456,113630],{"class":76},[66,114458,3144],{"class":102},[66,114460,113635],{"class":76},[19,114462,114463,114464,114466,114467,84316,114469,158],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[23,114465,81588],{}," 是 site 的名字，比如 ",[23,114468,113308],{},[23,114470,113730],{},[57,114472,114474],{"className":59,"code":114473,"language":61,"meta":62,"style":62},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[23,114475,114476],{"__ignoreMap":62},[66,114477,114478,114480,114482],{"class":68,"line":69},[66,114479,105407],{"class":76},[66,114481,99],{"class":72},[66,114483,113644],{"class":76},[19,114485,114486],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[57,114488,114490],{"className":59,"code":114489,"language":61,"meta":62,"style":62},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[23,114491,114492,114504],{"__ignoreMap":62},[66,114493,114494,114496,114498,114500,114502],{"class":68,"line":69},[66,114495,3373],{"class":72},[66,114497,105222],{"class":76},[66,114499,413],{"class":72},[66,114501,962],{"class":102},[66,114503,126],{"class":76},[66,114505,114506,114508,114510,114512,114514,114516,114518,114520,114522,114524],{"class":68,"line":80},[66,114507,105668],{"class":72},[66,114509,105208],{"class":102},[66,114511,348],{"class":76},[66,114513,445],{"class":72},[66,114515,113669],{"class":356},[66,114517,451],{"class":102},[66,114519,81588],{"class":76},[66,114521,457],{"class":102},[66,114523,1130],{"class":356},[66,114525,313],{"class":76},[19,114527,114528,114529,114532,114533,114535],{},"如果 site 没找到，就主动报错。",[23,114530,114531],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[23,114534,81588],{}," 的值放进字符串里。",[57,114537,114539],{"className":59,"code":114538,"language":61,"meta":62,"style":62},"return data.site_xpos[site_id].copy()\n",[23,114540,114541],{"__ignoreMap":62},[66,114542,114543,114545],{"class":68,"line":69},[66,114544,18849],{"class":72},[66,114546,113686],{"class":76},[19,114548,114549,114550,114552,114553,114556],{},"返回这个 site 的世界坐标。",[23,114551,105453],{}," 里的每一行都是一个 site 的 ",[23,114554,114555],{},"(x, y, z)"," 坐标。",[57,114558,114560],{"className":59,"code":114559,"language":61,"meta":62,"style":62},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[23,114561,114562],{"__ignoreMap":62},[66,114563,114564,114566,114568],{"class":68,"line":69},[66,114565,33739],{"class":72},[66,114567,113701],{"class":3793},[66,114569,113704],{"class":76},[19,114571,114572],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[57,114574,114576],{"className":59,"code":114575,"language":61,"meta":62,"style":62},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[23,114577,114578,114590],{"__ignoreMap":62},[66,114579,114580,114582,114584,114586,114588],{"class":68,"line":69},[66,114581,113340],{"class":76},[66,114583,99],{"class":72},[66,114585,113714],{"class":76},[66,114587,113308],{"class":356},[66,114589,313],{"class":76},[66,114591,114592,114594,114596,114598,114600],{"class":68,"line":80},[66,114593,1403],{"class":76},[66,114595,99],{"class":72},[66,114597,113714],{"class":76},[66,114599,113730],{"class":356},[66,114601,313],{"class":76},[19,114603,114604],{},"分别读取末端点和目标点的世界坐标。",[57,114606,114607],{"className":59,"code":114279,"language":61,"meta":62,"style":62},[23,114608,114609],{"__ignoreMap":62},[66,114610,114611,114613],{"class":68,"line":69},[66,114612,18849],{"class":72},[66,114614,113739],{"class":76},[19,114616,114617],{},"把四部分拼成一个观测数组：",[57,114619,114622],{"className":114620,"code":114621,"language":555,"meta":62},[553],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[23,114623,114621],{"__ignoreMap":62},[57,114625,114627],{"className":59,"code":114626,"language":61,"meta":62,"style":62},"dist = np.linalg.norm(tip - target)\n",[23,114628,114629],{"__ignoreMap":62},[66,114630,114631,114633,114635,114637,114639],{"class":68,"line":69},[66,114632,113367],{"class":76},[66,114634,99],{"class":72},[66,114636,113372],{"class":76},[66,114638,2511],{"class":72},[66,114640,113377],{"class":76},[19,114642,114643,114644,114647,114648,114651],{},"计算 tip 到 target 的距离。",[23,114645,114646],{},"tip - target"," 得到一个三维向量，",[23,114649,114650],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,114653,16438],{},[57,114655,114658],{"className":114656,"code":114657,"language":555,"meta":62},[553],"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",[23,114659,114657],{"__ignoreMap":62},[57,114661,114663],{"className":59,"code":114662,"language":61,"meta":62,"style":62},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[23,114664,114665],{"__ignoreMap":62},[66,114666,114667,114669,114671,114673,114675],{"class":68,"line":69},[66,114668,114314],{"class":76},[66,114670,99],{"class":72},[66,114672,113808],{"class":102},[66,114674,8329],{"class":72},[66,114676,113813],{"class":76},[19,114678,114679,114680,114683,114684,114687],{},"计算动作惩罚。",[23,114681,114682],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[23,114685,114686],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[57,114689,114691],{"className":59,"code":114690,"language":61,"meta":62,"style":62},"return float(-dist - control_cost)\n",[23,114692,114693],{"__ignoreMap":62},[66,114694,114695,114697,114699,114701,114703,114705,114707],{"class":68,"line":69},[66,114696,18849],{"class":72},[66,114698,111569],{"class":102},[66,114700,348],{"class":76},[66,114702,2511],{"class":72},[66,114704,113367],{"class":76},[66,114706,2511],{"class":72},[66,114708,113830],{"class":76},[19,114710,114711],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[57,114713,114714],{"className":59,"code":112575,"language":61,"meta":62,"style":62},[23,114715,114716],{"__ignoreMap":62},[66,114717,114718,114720,114722],{"class":68,"line":69},[66,114719,112582],{"class":76},[66,114721,99],{"class":72},[66,114723,106534],{"class":102},[19,114725,114726],{},"累计奖励变量，记录整个运行过程的总分。",[57,114728,114730],{"className":59,"code":114729,"language":61,"meta":62,"style":62},"for step in range(500):\n",[23,114731,114732],{"__ignoreMap":62},[66,114733,114734,114736,114738,114740,114742,114744,114746],{"class":68,"line":69},[66,114735,502],{"class":72},[66,114737,33409],{"class":76},[66,114739,507],{"class":72},[66,114741,510],{"class":102},[66,114743,348],{"class":76},[66,114745,66853],{"class":102},[66,114747,522],{"class":76},[19,114749,114750],{},"运行 500 个控制步。",[57,114752,114753],{"className":59,"code":106316,"language":61,"meta":62,"style":62},[23,114754,114755],{"__ignoreMap":62},[66,114756,114757],{"class":68,"line":69},[66,114758,106316],{"class":76},[19,114760,114761,114762,102792,114764,114766],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[23,114763,105004],{},[23,114765,105007],{}," 是当前状态下的坐标。",[57,114768,114770],{"className":59,"code":114769,"language":61,"meta":62,"style":62},"error = target - tip\n",[23,114771,114772],{"__ignoreMap":62},[66,114773,114774,114776,114778,114780,114782],{"class":68,"line":69},[66,114775,114367],{"class":76},[66,114777,99],{"class":72},[66,114779,113939],{"class":76},[66,114781,2511],{"class":72},[66,114783,113944],{"class":76},[19,114785,114786],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[57,114788,114790],{"className":59,"code":114789,"language":61,"meta":62,"style":62},"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",[23,114791,114792,114824],{"__ignoreMap":62},[66,114793,114794,114796,114798,114800,114802,114804,114806,114808,114810,114812,114814,114816,114818,114820,114822],{"class":68,"line":69},[66,114795,107644],{"class":76},[66,114797,2183],{"class":102},[66,114799,6259],{"class":76},[66,114801,99],{"class":72},[66,114803,113961],{"class":76},[66,114805,107033],{"class":102},[66,114807,8329],{"class":72},[66,114809,113968],{"class":76},[66,114811,795],{"class":102},[66,114813,113973],{"class":76},[66,114815,2511],{"class":72},[66,114817,104176],{"class":102},[66,114819,307],{"class":76},[66,114821,104176],{"class":102},[66,114823,313],{"class":76},[66,114825,114826,114828,114830,114832,114834,114836,114838,114840,114842,114844,114846,114848,114850,114852,114854],{"class":68,"line":80},[66,114827,107644],{"class":76},[66,114829,304],{"class":102},[66,114831,6259],{"class":76},[66,114833,99],{"class":72},[66,114835,113961],{"class":76},[66,114837,107033],{"class":102},[66,114839,8329],{"class":72},[66,114841,113968],{"class":76},[66,114843,2183],{"class":102},[66,114845,113973],{"class":76},[66,114847,2511],{"class":72},[66,114849,104176],{"class":102},[66,114851,307],{"class":76},[66,114853,104176],{"class":102},[66,114855,313],{"class":76},[19,114857,114858,114859,114862],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[23,114860,114861],{},"error -> ctrl -> step"," 的流程。",[57,114864,114865],{"className":59,"code":106278,"language":61,"meta":62,"style":62},[23,114866,114867],{"__ignoreMap":62},[66,114868,114869],{"class":68,"line":69},[66,114870,106278],{"class":76},[19,114872,114873],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[57,114875,114877],{"className":59,"code":114876,"language":61,"meta":62,"style":62},"obs = get_obs(model, data)\n",[23,114878,114879],{"__ignoreMap":62},[66,114880,114881,114883,114885],{"class":68,"line":69},[66,114882,112626],{"class":76},[66,114884,99],{"class":72},[66,114886,114062],{"class":76},[19,114888,114889,114890,114893],{},"读取最新观测。后面打印 ",[23,114891,114892],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,114895,104089],{"id":104088},[19,114897,114898],{},"观测维度为:",[57,114900,114903],{"className":114901,"code":114902,"language":555,"meta":62},[553],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[23,114904,114902],{"__ignoreMap":62},[19,114906,114907],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,114909,114910],{},"程序每 100 步打印：",[57,114912,114915],{"className":114913,"code":114914,"language":555,"meta":62},[553],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[23,114916,114914],{"__ignoreMap":62},[19,114918,114919,114920,114922],{},"如果控制有效，你应该看到最终 ",[23,114921,105004],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,114924,104121],{"id":104120},[31,114926,114927,114930,114933,114939,114945,114952,114962],{},[34,114928,114929],{},"修改目标点位置。",[34,114931,114932],{},"重新运行，观察最终 tip 是否变化。",[34,114934,114935,114936,114938],{},"把 gravity 改成 ",[23,114937,104362],{},"，观察控制是否变差。",[34,114940,112953,114941,112957,114943,158],{},[23,114942,103931],{},[23,114944,795],{},[34,114946,104184,114947,104187,114949,114951],{},[23,114948,112368],{},[23,114950,109080],{},"，观察机械臂是否更难移动。",[34,114953,104184,114954,84307,114956,104187,114958,114961],{},[23,114955,105007],{},[23,114957,105919],{},[23,114959,114960],{},"0.2 0 0.6","，观察 reward 和 final tip。",[34,114963,114964],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,114966,104226],{"id":104225},[484,114968,114970],{"id":114969},"site-not-found",[23,114971,114972],{},"site not found",[19,114974,114975,114976,102792,114979,158],{},"检查 XML 中是否有 ",[23,114977,114978],{},"site name=\"tip\"",[23,114980,114981],{},"site name=\"target\"",[484,114983,114984],{"id":114984},"机械臂完全不动",[19,114986,104296],{},[31,114988,114989,114994,114997,115002],{},[34,114990,114991,114993],{},[23,114992,103931],{}," 是否为 2",[34,114995,114996],{},"actuator 是否引用正确 joint",[34,114998,114999,115001],{},[23,115000,102850],{}," 是否被赋值",[34,115003,115004,115005],{},"是否执行了 ",[23,115006,102459],{},[484,115008,115009],{"id":115009},"控制效果不好",[19,115011,115012],{},"正常。本章重点不是控制器最优，而是任务结构:",[57,115014,115017],{"className":115015,"code":115016,"language":555,"meta":62},[553],"obs → action → mj_step → reward → next_obs\n",[23,115018,115016],{"__ignoreMap":62},[484,115020,115022],{"id":115021},"tip-坐标不变化","tip 坐标不变化",[19,115024,104348],{},[31,115026,115027,115032,115040,115049],{},[34,115028,115029,115030,158],{},"是否每步调用了 ",[23,115031,102459],{},[34,115033,115034,115035,102792,115037,158],{},"是否写入了 ",[23,115036,107899],{},[23,115038,115039],{},"data.ctrl[1]",[34,115041,115042,115043,2204,115046,158],{},"actuator 是否正确引用 ",[23,115044,115045],{},"joint1",[23,115047,115048],{},"joint2",[34,115050,115051],{},"控制输入是否太小。",[484,115053,115054],{"id":115054},"目标点不会动",[19,115056,115057],{},"本章的 target 是固定 site：",[57,115059,115061],{"className":54849,"code":115060,"language":54851,"meta":62,"style":62},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[23,115062,115063],{"__ignoreMap":62},[66,115064,115065,115067,115069,115071,115073,115075,115077,115079,115082],{"class":68,"line":69},[66,115066,413],{"class":76},[66,115068,104983],{"class":53084},[66,115070,16724],{"class":3793},[66,115072,99],{"class":76},[66,115074,113730],{"class":356},[66,115076,102880],{"class":3793},[66,115078,99],{"class":76},[66,115080,115081],{"class":356},"\"0.5 0 0.4\"",[66,115083,115084],{"class":76}," ...\u002F>\n",[19,115086,115087,115088,115090],{},"它直接挂在 ",[23,115089,103614],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[484,115092,115093],{"id":115093},"机械臂不像真实机械臂",[19,115095,115096],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,115098,104380],{"id":104379},[19,115100,115101],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,115103,115104],{},"核心公式：",[57,115106,115109],{"className":115107,"code":115108,"language":555,"meta":62},[553],"distance = ||tip - target||\nreward = -distance - action_cost\n",[23,115110,115108],{"__ignoreMap":62},[19,115112,115113],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[1903,115115,115116],{},"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":62,"searchDepth":80,"depth":80,"links":115118},[115119,115120,115121,115126,115130,115131,115132,115140],{"id":102420,"depth":80,"text":102421},{"id":102543,"depth":80,"text":102544},{"id":102818,"depth":80,"text":102819,"children":115122},[115123,115124,115125],{"id":113323,"depth":112,"text":113324},{"id":113398,"depth":112,"text":113398},{"id":113428,"depth":112,"text":113429},{"id":103026,"depth":80,"text":103027,"children":115127},[115128,115129],{"id":103345,"depth":112,"text":103345},{"id":103481,"depth":112,"text":103481},{"id":104088,"depth":80,"text":104089},{"id":104120,"depth":80,"text":104121},{"id":104225,"depth":80,"text":104226,"children":115133},[115134,115135,115136,115137,115138,115139],{"id":114969,"depth":112,"text":114972},{"id":114984,"depth":112,"text":114984},{"id":115009,"depth":112,"text":115009},{"id":115021,"depth":112,"text":115022},{"id":115054,"depth":112,"text":115054},{"id":115093,"depth":112,"text":115093},{"id":104379,"depth":80,"text":104380},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":113127,"description":62},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":115147,"title":115148,"body":115149,"description":62,"extension":1927,"meta":118611,"navigation":108,"path":118612,"seo":118613,"stem":118614,"__hash__":118615},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":115150,"toc":118582},[115151,115154,115156,115159,115162,115187,115190,115196,115199,115205,115207,115209,115233,115235,115253,115255,115298,115300,115327,115329,115332,115384,115387,115393,115402,115405,115443,115446,115485,115488,115496,115503,115506,115512,115514,115568,115575,115620,115623,115627,115643,115653,115655,116916,116918,116930,116932,116943,116945,116948,116969,116972,116975,117008,117014,117017,117050,117053,117056,117097,117102,117116,117119,117132,117137,117160,117162,117177,117187,117202,117209,117229,117244,117262,117265,117282,117290,117306,117312,117344,117357,117389,117399,117434,117448,117494,117508,117550,117561,117574,117580,117613,117616,117643,117653,117693,117703,117720,117727,117745,117748,117789,117802,117817,117820,117843,117846,117858,117861,117880,117885,117906,117909,117924,117927,117961,117973,117988,117991,118016,118019,118038,118041,118073,118076,118100,118106,118136,118143,118156,118159,118161,118163,118169,118172,118175,118187,118190,118192,118246,118248,118252,118258,118267,118270,118277,118279,118302,118305,118309,118311,118329,118335,118337,118370,118373,118379,118383,118386,118406,118411,118415,118422,118442,118447,118451,118454,118474,118477,118563,118567,118570,118576,118579],[10,115152,115148],{"id":115153},"_8gymnasium-风格强化学习接口基础",[14,115155,102421],{"id":102420},[19,115157,115158],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,115160,115161],{},"你将实现:",[57,115163,115165],{"className":59,"code":115164,"language":61,"meta":62,"style":62},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[23,115166,115167,115177],{"__ignoreMap":62},[66,115168,115169,115172,115174],{"class":68,"line":69},[66,115170,115171],{"class":76},"obs, info ",[66,115173,99],{"class":72},[66,115175,115176],{"class":76}," env.reset()\n",[66,115178,115179,115182,115184],{"class":68,"line":80},[66,115180,115181],{"class":76},"obs, reward, terminated, truncated, info ",[66,115183,99],{"class":72},[66,115185,115186],{"class":76}," env.step(action)\n",[19,115188,115189],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,115191,115192,115193,115195],{},"前面章节的代码都是“脚本式”的：在 ",[23,115194,104068],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,115197,115198],{},"可以先记住 Gymnasium 环境的核心交互：",[57,115200,115203],{"className":115201,"code":115202,"language":555,"meta":62},[553],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[23,115204,115202],{"__ignoreMap":62},[14,115206,102544],{"id":102543},[19,115208,102547],{},[57,115210,115211],{"className":25625,"code":106161,"language":25627,"meta":62,"style":62},[23,115212,115213],{"__ignoreMap":62},[66,115214,115215,115217,115219,115221,115223,115225,115227,115229,115231],{"class":68,"line":69},[66,115216,26380],{"class":3793},[66,115218,28116],{"class":356},[66,115220,25637],{"class":356},[66,115222,28201],{"class":102},[66,115224,106176],{"class":356},[66,115226,102572],{"class":356},[66,115228,104274],{"class":356},[66,115230,102588],{"class":356},[66,115232,106185],{"class":356},[19,115234,104592],{},[57,115236,115238],{"className":25625,"code":115237,"language":25627,"meta":62,"style":62},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[23,115239,115240],{"__ignoreMap":62},[66,115241,115242,115244,115246,115248,115250],{"class":68,"line":69},[66,115243,25634],{"class":3793},[66,115245,25637],{"class":356},[66,115247,102704],{"class":356},[66,115249,109484],{"class":356},[66,115251,115252],{"class":356}," gymnasium\n",[19,115254,104609],{},[57,115256,115258],{"className":25625,"code":115257,"language":25627,"meta":62,"style":62},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[23,115259,115260,115277,115286],{"__ignoreMap":62},[66,115261,115262,115264,115266,115268,115271,115273,115275],{"class":68,"line":69},[66,115263,32130],{"class":3793},[66,115265,30976],{"class":356},[66,115267,26918],{"class":102},[66,115269,115270],{"class":356}," mujoco-gym-api",[66,115272,102749],{"class":356},[66,115274,102752],{"class":102},[66,115276,102755],{"class":102},[66,115278,115279,115281,115283],{"class":68,"line":80},[66,115280,32130],{"class":3793},[66,115282,102762],{"class":356},[66,115284,115285],{"class":356}," mujoco-gym-api\n",[66,115287,115288,115290,115292,115294,115296],{"class":68,"line":112},[66,115289,25634],{"class":3793},[66,115291,25637],{"class":356},[66,115293,102704],{"class":356},[66,115295,109484],{"class":356},[66,115297,115252],{"class":356},[19,115299,102778],{},[31,115301,115302,115312,115315,115321],{},[34,115303,115304,115305,115308,115309,158],{},"本章使用 ",[23,115306,115307],{},"gymnasium","，不是旧版 ",[23,115310,115311],{},"gym",[34,115313,115314],{},"Gymnasium API 与旧 Gym API 有差异。",[34,115316,115317,115318,158],{},"旧 Gym 常见返回值是 4 个: ",[23,115319,115320],{},"obs, reward, done, info",[34,115322,115323,115324,158],{},"Gymnasium 返回值是 5 个: ",[23,115325,115326],{},"obs, reward, terminated, truncated, info",[14,115328,102819],{"id":102818},[19,115330,115331],{},"强化学习环境接口包含:",[2129,115333,115334,115343],{},[2132,115335,115336],{},[2135,115337,115338,115341],{},[2138,115339,115340],{"align":25539},"方法",[2138,115342,104469],{"align":25539},[2176,115344,115345,115355,115365,115375],{},[2135,115346,115347,115352],{},[2181,115348,115349],{"align":25539},[23,115350,115351],{},"reset()",[2181,115353,115354],{"align":25539},"重置环境",[2135,115356,115357,115362],{},[2181,115358,115359],{"align":25539},[23,115360,115361],{},"step(action)",[2181,115363,115364],{"align":25539},"执行动作",[2135,115366,115367,115372],{},[2181,115368,115369],{"align":25539},[23,115370,115371],{},"observation_space",[2181,115373,115374],{"align":25539},"观测空间",[2135,115376,115377,115382],{},[2181,115378,115379],{"align":25539},[23,115380,115381],{},"action_space",[2181,115383,25457],{"align":25539},[19,115385,115386],{},"一个最小环境需要完成:",[57,115388,115391],{"className":115389,"code":115390,"language":555,"meta":62},[553],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[23,115392,115390],{"__ignoreMap":62},[484,115394,115396,102792,115399,106411],{"id":115395},"terminated-和-truncated-的区别",[23,115397,115398],{},"terminated",[23,115400,115401],{},"truncated",[19,115403,115404],{},"Gymnasium 把“结束”拆成两个概念：",[2129,115406,115407,115417],{},[2132,115408,115409],{},[2135,115410,115411,115413,115415],{},[2138,115412,106347],{"align":25539},[2138,115414,102474],{"align":25539},[2138,115416,22990],{"align":25539},[2176,115418,115419,115431],{},[2135,115420,115421,115425,115428],{},[2181,115422,115423],{"align":25539},[23,115424,115398],{},[2181,115426,115427],{"align":25539},"任务自然结束",[2181,115429,115430],{"align":25539},"机械臂到达目标、机器人摔倒",[2135,115432,115433,115437,115440],{},[2181,115434,115435],{"align":25539},[23,115436,115401],{},[2181,115438,115439],{"align":25539},"因外部限制截断",[2181,115441,115442],{"align":25539},"达到最大步数、时间限制",[19,115444,115445],{},"本章中：",[57,115447,115449],{"className":59,"code":115448,"language":61,"meta":62,"style":62},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[23,115450,115451,115466],{"__ignoreMap":62},[66,115452,115453,115456,115458,115461,115463],{"class":68,"line":69},[66,115454,115455],{"class":76},"terminated ",[66,115457,99],{"class":72},[66,115459,115460],{"class":76}," dist ",[66,115462,413],{"class":72},[66,115464,115465],{"class":102}," 0.05\n",[66,115467,115468,115471,115473,115475,115478,115480,115482],{"class":68,"line":80},[66,115469,115470],{"class":76},"truncated ",[66,115472,99],{"class":72},[66,115474,40661],{"class":102},[66,115476,115477],{"class":76},".steps ",[66,115479,3540],{"class":72},[66,115481,40661],{"class":102},[66,115483,115484],{"class":76},".max_steps\n",[19,115486,115487],{},"也就是：",[31,115489,115490,115493],{},[34,115491,115492],{},"末端距离目标小于 0.05，任务成功结束。",[34,115494,115495],{},"步数超过上限，episode 被截断。",[484,115497,115499,102792,115501],{"id":115498},"observation_space-和-action_space",[23,115500,115371],{},[23,115502,115381],{},[19,115504,115505],{},"这两个对象告诉算法：",[57,115507,115510],{"className":115508,"code":115509,"language":555,"meta":62},[553],"观测长什么样\n动作允许多大\n",[23,115511,115509],{"__ignoreMap":62},[19,115513,16438],{},[57,115515,115517],{"className":59,"code":115516,"language":61,"meta":62,"style":62},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[23,115518,115519],{"__ignoreMap":62},[66,115520,115521,115523,115526,115528,115531,115534,115537,115539,115541,115544,115546,115548,115550,115552,115554,115556,115558,115561,115563,115565],{"class":68,"line":69},[66,115522,32617],{"class":102},[66,115524,115525],{"class":76},".action_space ",[66,115527,99],{"class":72},[66,115529,115530],{"class":76}," spaces.Box(",[66,115532,115533],{"class":1234},"low",[66,115535,115536],{"class":72},"=-",[66,115538,104176],{"class":102},[66,115540,307],{"class":76},[66,115542,115543],{"class":1234},"high",[66,115545,99],{"class":72},[66,115547,104176],{"class":102},[66,115549,307],{"class":76},[66,115551,97738],{"class":1234},[66,115553,99],{"class":72},[66,115555,348],{"class":76},[66,115557,795],{"class":102},[66,115559,115560],{"class":76},",), ",[66,115562,95276],{"class":1234},[66,115564,99],{"class":72},[66,115566,115567],{"class":76},"np.float32)\n",[19,115569,115570,115571,115574],{},"表示动作是 2 维数组，每个值都在 ",[23,115572,115573],{},"[-1, 1]"," 范围内。",[57,115576,115578],{"className":59,"code":115577,"language":61,"meta":62,"style":62},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[23,115579,115580],{"__ignoreMap":62},[66,115581,115582,115584,115587,115589,115591,115593,115595,115598,115600,115602,115604,115606,115608,115610,115612,115614,115616,115618],{"class":68,"line":69},[66,115583,32617],{"class":102},[66,115585,115586],{"class":76},".observation_space ",[66,115588,99],{"class":72},[66,115590,115530],{"class":76},[66,115592,115533],{"class":1234},[66,115594,115536],{"class":72},[66,115596,115597],{"class":76},"np.inf, ",[66,115599,115543],{"class":1234},[66,115601,99],{"class":72},[66,115603,115597],{"class":76},[66,115605,97738],{"class":1234},[66,115607,99],{"class":72},[66,115609,348],{"class":76},[66,115611,790],{"class":102},[66,115613,115560],{"class":76},[66,115615,95276],{"class":1234},[66,115617,99],{"class":72},[66,115619,115567],{"class":76},[19,115621,115622],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[484,115624,115626],{"id":115625},"frame_skip-是什么","frame_skip 是什么",[57,115628,115630],{"className":59,"code":115629,"language":61,"meta":62,"style":62},"self.frame_skip = 5\n",[23,115631,115632],{"__ignoreMap":62},[66,115633,115634,115636,115639,115641],{"class":68,"line":69},[66,115635,32617],{"class":102},[66,115637,115638],{"class":76},".frame_skip ",[66,115640,99],{"class":72},[66,115642,56208],{"class":102},[19,115644,115645,115646,115649,115650,115652],{},"表示外部调用一次 ",[23,115647,115648],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[23,115651,102989],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,115654,103027],{"id":103026},[57,115656,115658],{"className":59,"code":115657,"language":61,"meta":62,"style":62},"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",[23,115659,115660,115672,115678,115688,115699,115703,115707,115715,115720,115724,115728,115732,115736,115740,115744,115748,115753,115757,115761,115765,115770,115774,115778,115782,115786,115790,115794,115798,115802,115806,115810,115814,115818,115822,115840,115855,115859,115872,115882,115897,115914,115918,115939,115958,115983,115997,116001,116011,116023,116033,116037,116079,116117,116121,116131,116147,116162,116181,116188,116192,116205,116220,116235,116248,116267,116283,116287,116328,116343,116358,116362,116401,116412,116425,116429,116439,116448,116452,116462,116477,116495,116499,116510,116527,116540,116544,116554,116558,116569,116580,116584,116598,116612,116628,116632,116645,116662,116677,116684,116688,116692,116704,116714,116732,116744,116756,116760,116768,116784,116793,116802,116810,116852,116865,116870,116874,116892,116896,116900,116912],{"__ignoreMap":62},[66,115661,115662,115664,115667,115669],{"class":68,"line":69},[66,115663,284],{"class":72},[66,115665,115666],{"class":76}," gymnasium ",[66,115668,33176],{"class":72},[66,115670,115671],{"class":76}," gym\n",[66,115673,115674,115676],{"class":68,"line":80},[66,115675,284],{"class":72},[66,115677,103075],{"class":76},[66,115679,115680,115682,115684,115686],{"class":68,"line":112},[66,115681,284],{"class":72},[66,115683,33173],{"class":76},[66,115685,33176],{"class":72},[66,115687,33179],{"class":76},[66,115689,115690,115692,115694,115696],{"class":68,"line":129},[66,115691,32532],{"class":72},[66,115693,115666],{"class":76},[66,115695,284],{"class":72},[66,115697,115698],{"class":76}," spaces\n",[66,115700,115701],{"class":68,"line":138},[66,115702,109],{"emptyLinePlaceholder":108},[66,115704,115705],{"class":68,"line":227},[66,115706,109],{"emptyLinePlaceholder":108},[66,115708,115709,115711,115713],{"class":68,"line":236},[66,115710,103088],{"class":102},[66,115712,15369],{"class":72},[66,115714,103093],{"class":356},[66,115716,115717],{"class":68,"line":241},[66,115718,115719],{"class":356},"\u003Cmujoco model=\"gym_reacher\">\n",[66,115721,115722],{"class":68,"line":372},[66,115723,113509],{"class":356},[66,115725,115726],{"class":68,"line":377},[66,115727,109],{"emptyLinePlaceholder":108},[66,115729,115730],{"class":68,"line":392},[66,115731,103112],{"class":356},[66,115733,115734],{"class":68,"line":405},[66,115735,113527],{"class":356},[66,115737,115738],{"class":68,"line":418},[66,115739,109],{"emptyLinePlaceholder":108},[66,115741,115742],{"class":68,"line":430},[66,115743,113536],{"class":356},[66,115745,115746],{"class":68,"line":438},[66,115747,113541],{"class":356},[66,115749,115750],{"class":68,"line":465},[66,115751,115752],{"class":356},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[66,115754,115755],{"class":68,"line":1805},[66,115756,109],{"emptyLinePlaceholder":108},[66,115758,115759],{"class":68,"line":1817},[66,115760,113555],{"class":356},[66,115762,115763],{"class":68,"line":1822},[66,115764,113560],{"class":356},[66,115766,115767],{"class":68,"line":1829},[66,115768,115769],{"class":356},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[66,115771,115772],{"class":68,"line":3529},[66,115773,113570],{"class":356},[66,115775,115776],{"class":68,"line":3557},[66,115777,108211],{"class":356},[66,115779,115780],{"class":68,"line":3562},[66,115781,103141],{"class":356},[66,115783,115784],{"class":68,"line":3579},[66,115785,103146],{"class":356},[66,115787,115788],{"class":68,"line":3584},[66,115789,109],{"emptyLinePlaceholder":108},[66,115791,115792],{"class":68,"line":3589},[66,115793,108228],{"class":356},[66,115795,115796],{"class":68,"line":3594},[66,115797,113595],{"class":356},[66,115799,115800],{"class":68,"line":3608},[66,115801,113600],{"class":356},[66,115803,115804],{"class":68,"line":3613},[66,115805,108238],{"class":356},[66,115807,115808],{"class":68,"line":4401},[66,115809,103151],{"class":356},[66,115811,115812],{"class":68,"line":4415},[66,115813,97473],{"class":356},[66,115815,115816],{"class":68,"line":4423},[66,115817,109],{"emptyLinePlaceholder":108},[66,115819,115820],{"class":68,"line":4428},[66,115821,109],{"emptyLinePlaceholder":108},[66,115823,115824,115826,115829,115831,115833,115835,115838],{"class":68,"line":4434},[66,115825,16499],{"class":72},[66,115827,115828],{"class":3793}," ReacherEnv",[66,115830,348],{"class":76},[66,115832,115311],{"class":3793},[66,115834,2537],{"class":76},[66,115836,115837],{"class":3793},"Env",[66,115839,522],{"class":76},[66,115841,115842,115845,115847,115849,115852],{"class":68,"line":4440},[66,115843,115844],{"class":76},"    metadata ",[66,115846,99],{"class":72},[66,115848,6264],{"class":76},[66,115850,115851],{"class":356},"\"render_modes\"",[66,115853,115854],{"class":76},": []}\n",[66,115856,115857],{"class":68,"line":4445},[66,115858,109],{"emptyLinePlaceholder":108},[66,115860,115861,115863,115865,115868,115870],{"class":68,"line":9759},[66,115862,32595],{"class":72},[66,115864,32598],{"class":102},[66,115866,115867],{"class":76},"(self) -> ",[66,115869,97461],{"class":102},[66,115871,126],{"class":76},[66,115873,115874,115876,115878,115880],{"class":68,"line":9783},[66,115875,32611],{"class":102},[66,115877,19064],{"class":76},[66,115879,32623],{"class":102},[66,115881,1253],{"class":76},[66,115883,115884,115886,115889,115891,115893,115895],{"class":68,"line":9788},[66,115885,32639],{"class":102},[66,115887,115888],{"class":76},".model ",[66,115890,99],{"class":72},[66,115892,103186],{"class":76},[66,115894,103088],{"class":102},[66,115896,313],{"class":76},[66,115898,115899,115901,115904,115906,115909,115911],{"class":68,"line":9794},[66,115900,32639],{"class":102},[66,115902,115903],{"class":76},".data ",[66,115905,99],{"class":72},[66,115907,115908],{"class":76}," mujoco.MjData(",[66,115910,32617],{"class":102},[66,115912,115913],{"class":76},".model)\n",[66,115915,115916],{"class":68,"line":9821},[66,115917,109],{"emptyLinePlaceholder":108},[66,115919,115920,115922,115925,115927,115930,115932,115935,115937],{"class":68,"line":9826},[66,115921,32639],{"class":102},[66,115923,115924],{"class":76},".tip_site_id ",[66,115926,99],{"class":72},[66,115928,115929],{"class":76}," mujoco.mj_name2id(",[66,115931,32617],{"class":102},[66,115933,115934],{"class":76},".model, mujoco.mjtObj.mjOBJ_SITE, ",[66,115936,113308],{"class":356},[66,115938,313],{"class":76},[66,115940,115941,115943,115946,115948,115950,115952,115954,115956],{"class":68,"line":9832},[66,115942,32639],{"class":102},[66,115944,115945],{"class":76},".target_site_id ",[66,115947,99],{"class":72},[66,115949,115929],{"class":76},[66,115951,32617],{"class":102},[66,115953,115934],{"class":76},[66,115955,113730],{"class":356},[66,115957,313],{"class":76},[66,115959,115960,115962,115964,115966,115968,115970,115973,115975,115977,115979,115981],{"class":68,"line":9844},[66,115961,4321],{"class":72},[66,115963,40661],{"class":102},[66,115965,115924],{"class":76},[66,115967,413],{"class":72},[66,115969,962],{"class":102},[66,115971,115972],{"class":72}," or",[66,115974,40661],{"class":102},[66,115976,115945],{"class":76},[66,115978,413],{"class":72},[66,115980,962],{"class":102},[66,115982,126],{"class":76},[66,115984,115985,115988,115990,115992,115995],{"class":68,"line":9856},[66,115986,115987],{"class":72},"            raise",[66,115989,105208],{"class":102},[66,115991,348],{"class":76},[66,115993,115994],{"class":356},"\"required sites not found\"",[66,115996,313],{"class":76},[66,115998,115999],{"class":68,"line":9868},[66,116000,109],{"emptyLinePlaceholder":108},[66,116002,116003,116005,116007,116009],{"class":68,"line":11523},[66,116004,32639],{"class":102},[66,116006,115638],{"class":76},[66,116008,99],{"class":72},[66,116010,56208],{"class":102},[66,116012,116013,116015,116018,116020],{"class":68,"line":11548},[66,116014,32639],{"class":102},[66,116016,116017],{"class":76},".max_steps ",[66,116019,99],{"class":72},[66,116021,116022],{"class":102}," 200\n",[66,116024,116025,116027,116029,116031],{"class":68,"line":11571},[66,116026,32639],{"class":102},[66,116028,115477],{"class":76},[66,116030,99],{"class":72},[66,116032,197],{"class":102},[66,116034,116035],{"class":68,"line":11595},[66,116036,109],{"emptyLinePlaceholder":108},[66,116038,116039,116041,116043,116045,116047,116049,116051,116053,116055,116057,116059,116061,116063,116065,116067,116069,116071,116073,116075,116077],{"class":68,"line":11600},[66,116040,32639],{"class":102},[66,116042,115525],{"class":76},[66,116044,99],{"class":72},[66,116046,115530],{"class":76},[66,116048,115533],{"class":1234},[66,116050,115536],{"class":72},[66,116052,104176],{"class":102},[66,116054,307],{"class":76},[66,116056,115543],{"class":1234},[66,116058,99],{"class":72},[66,116060,104176],{"class":102},[66,116062,307],{"class":76},[66,116064,97738],{"class":1234},[66,116066,99],{"class":72},[66,116068,348],{"class":76},[66,116070,795],{"class":102},[66,116072,115560],{"class":76},[66,116074,95276],{"class":1234},[66,116076,99],{"class":72},[66,116078,115567],{"class":76},[66,116080,116081,116083,116085,116087,116089,116091,116093,116095,116097,116099,116101,116103,116105,116107,116109,116111,116113,116115],{"class":68,"line":11605},[66,116082,32639],{"class":102},[66,116084,115586],{"class":76},[66,116086,99],{"class":72},[66,116088,115530],{"class":76},[66,116090,115533],{"class":1234},[66,116092,115536],{"class":72},[66,116094,115597],{"class":76},[66,116096,115543],{"class":1234},[66,116098,99],{"class":72},[66,116100,115597],{"class":76},[66,116102,97738],{"class":1234},[66,116104,99],{"class":72},[66,116106,348],{"class":76},[66,116108,790],{"class":102},[66,116110,115560],{"class":76},[66,116112,95276],{"class":1234},[66,116114,99],{"class":72},[66,116116,115567],{"class":76},[66,116118,116119],{"class":68,"line":11610},[66,116120,109],{"emptyLinePlaceholder":108},[66,116122,116123,116125,116128],{"class":68,"line":11619},[66,116124,32595],{"class":72},[66,116126,116127],{"class":3793}," _get_obs",[66,116129,116130],{"class":76},"(self) -> np.ndarray:\n",[66,116132,116133,116135,116137,116139,116142,116144],{"class":68,"line":11624},[66,116134,113908],{"class":76},[66,116136,99],{"class":72},[66,116138,40661],{"class":102},[66,116140,116141],{"class":76},".data.site_xpos[",[66,116143,32617],{"class":102},[66,116145,116146],{"class":76},".tip_site_id].copy()\n",[66,116148,116149,116151,116153,116155,116157,116159],{"class":68,"line":11630},[66,116150,113921],{"class":76},[66,116152,99],{"class":72},[66,116154,40661],{"class":102},[66,116156,116141],{"class":76},[66,116158,32617],{"class":102},[66,116160,116161],{"class":76},".target_site_id].copy()\n",[66,116163,116164,116166,116168,116171,116173,116176,116178],{"class":68,"line":11651},[66,116165,111954],{"class":76},[66,116167,99],{"class":72},[66,116169,116170],{"class":76}," np.concatenate([",[66,116172,32617],{"class":102},[66,116174,116175],{"class":76},".data.qpos.copy(), ",[66,116177,32617],{"class":102},[66,116179,116180],{"class":76},".data.qvel.copy(), tip, target])\n",[66,116182,116183,116185],{"class":68,"line":11657},[66,116184,16557],{"class":72},[66,116186,116187],{"class":76}," obs.astype(np.float32)\n",[66,116189,116190],{"class":68,"line":11671},[66,116191,109],{"emptyLinePlaceholder":108},[66,116193,116194,116196,116199,116201,116203],{"class":68,"line":11677},[66,116195,32595],{"class":72},[66,116197,116198],{"class":3793}," _get_reward",[66,116200,115867],{"class":76},[66,116202,2038],{"class":102},[66,116204,126],{"class":76},[66,116206,116207,116209,116211,116213,116215,116217],{"class":68,"line":11704},[66,116208,113908],{"class":76},[66,116210,99],{"class":72},[66,116212,40661],{"class":102},[66,116214,116141],{"class":76},[66,116216,32617],{"class":102},[66,116218,116219],{"class":76},".tip_site_id]\n",[66,116221,116222,116224,116226,116228,116230,116232],{"class":68,"line":11713},[66,116223,113921],{"class":76},[66,116225,99],{"class":72},[66,116227,40661],{"class":102},[66,116229,116141],{"class":76},[66,116231,32617],{"class":102},[66,116233,116234],{"class":76},".target_site_id]\n",[66,116236,116237,116240,116242,116244,116246],{"class":68,"line":11719},[66,116238,116239],{"class":76},"        dist ",[66,116241,99],{"class":72},[66,116243,113372],{"class":76},[66,116245,2511],{"class":72},[66,116247,113377],{"class":76},[66,116249,116250,116253,116255,116257,116259,116262,116264],{"class":68,"line":11727},[66,116251,116252],{"class":76},"        control_cost ",[66,116254,99],{"class":72},[66,116256,113808],{"class":102},[66,116258,8329],{"class":72},[66,116260,116261],{"class":76}," np.sum(np.square(",[66,116263,32617],{"class":102},[66,116265,116266],{"class":76},".data.ctrl))\n",[66,116268,116269,116271,116273,116275,116277,116279,116281],{"class":68,"line":11732},[66,116270,16557],{"class":72},[66,116272,111569],{"class":102},[66,116274,348],{"class":76},[66,116276,2511],{"class":72},[66,116278,113367],{"class":76},[66,116280,2511],{"class":72},[66,116282,113830],{"class":76},[66,116284,116285],{"class":68,"line":18407},[66,116286,109],{"emptyLinePlaceholder":108},[66,116288,116289,116291,116294,116297,116299,116302,116304,116306,116308,116310,116312,116315,116318,116320,116322,116324,116326],{"class":68,"line":18413},[66,116290,32595],{"class":72},[66,116292,116293],{"class":3793}," reset",[66,116295,116296],{"class":76},"(self, ",[66,116298,1208],{"class":72},[66,116300,116301],{"class":76},", seed: ",[66,116303,2003],{"class":102},[66,116305,26912],{"class":72},[66,116307,40721],{"class":102},[66,116309,15369],{"class":72},[66,116311,40721],{"class":102},[66,116313,116314],{"class":76},", options: ",[66,116316,116317],{"class":102},"dict",[66,116319,26912],{"class":72},[66,116321,40721],{"class":102},[66,116323,15369],{"class":72},[66,116325,40721],{"class":102},[66,116327,522],{"class":76},[66,116329,116330,116332,116335,116338,116340],{"class":68,"line":18436},[66,116331,32611],{"class":102},[66,116333,116334],{"class":76},"().reset(",[66,116336,116337],{"class":1234},"seed",[66,116339,99],{"class":72},[66,116341,116342],{"class":76},"seed)\n",[66,116344,116345,116348,116350,116353,116355],{"class":68,"line":18442},[66,116346,116347],{"class":76},"        mujoco.mj_resetData(",[66,116349,32617],{"class":102},[66,116351,116352],{"class":76},".model, ",[66,116354,32617],{"class":102},[66,116356,116357],{"class":76},".data)\n",[66,116359,116360],{"class":68,"line":18465},[66,116361,109],{"emptyLinePlaceholder":108},[66,116363,116364,116366,116369,116371,116373,116376,116378,116380,116382,116384,116386,116388,116390,116392,116394,116396,116398],{"class":68,"line":18479},[66,116365,32639],{"class":102},[66,116367,116368],{"class":76},".data.qpos[:] ",[66,116370,99],{"class":72},[66,116372,40661],{"class":102},[66,116374,116375],{"class":76},".np_random.uniform(",[66,116377,115533],{"class":1234},[66,116379,115536],{"class":72},[66,116381,87986],{"class":102},[66,116383,307],{"class":76},[66,116385,115543],{"class":1234},[66,116387,99],{"class":72},[66,116389,87986],{"class":102},[66,116391,307],{"class":76},[66,116393,33289],{"class":1234},[66,116395,99],{"class":72},[66,116397,32617],{"class":102},[66,116399,116400],{"class":76},".model.nq)\n",[66,116402,116403,116405,116408,116410],{"class":68,"line":18499},[66,116404,32639],{"class":102},[66,116406,116407],{"class":76},".data.qvel[:] ",[66,116409,99],{"class":72},[66,116411,106534],{"class":102},[66,116413,116414,116417,116419,116421,116423],{"class":68,"line":18505},[66,116415,116416],{"class":76},"        mujoco.mj_forward(",[66,116418,32617],{"class":102},[66,116420,116352],{"class":76},[66,116422,32617],{"class":102},[66,116424,116357],{"class":76},[66,116426,116427],{"class":68,"line":18516},[66,116428,109],{"emptyLinePlaceholder":108},[66,116430,116431,116433,116435,116437],{"class":68,"line":18539},[66,116432,32639],{"class":102},[66,116434,115477],{"class":76},[66,116436,99],{"class":72},[66,116438,197],{"class":102},[66,116440,116441,116443,116445],{"class":68,"line":18561},[66,116442,16557],{"class":72},[66,116444,40661],{"class":102},[66,116446,116447],{"class":76},"._get_obs(), {}\n",[66,116449,116450],{"class":68,"line":18566},[66,116451,109],{"emptyLinePlaceholder":108},[66,116453,116454,116456,116459],{"class":68,"line":18572},[66,116455,32595],{"class":72},[66,116457,116458],{"class":3793}," step",[66,116460,116461],{"class":76},"(self, action):\n",[66,116463,116464,116466,116468,116471,116473,116475],{"class":68,"line":18586},[66,116465,111994],{"class":76},[66,116467,99],{"class":72},[66,116469,116470],{"class":76}," np.asarray(action, ",[66,116472,95276],{"class":1234},[66,116474,99],{"class":72},[66,116476,115567],{"class":76},[66,116478,116479,116481,116483,116485,116487,116490,116492],{"class":68,"line":18599},[66,116480,111994],{"class":76},[66,116482,99],{"class":72},[66,116484,109220],{"class":76},[66,116486,32617],{"class":102},[66,116488,116489],{"class":76},".action_space.low, ",[66,116491,32617],{"class":102},[66,116493,116494],{"class":76},".action_space.high)\n",[66,116496,116497],{"class":68,"line":18604},[66,116498,109],{"emptyLinePlaceholder":108},[66,116500,116501,116503,116506,116508],{"class":68,"line":18618},[66,116502,32639],{"class":102},[66,116504,116505],{"class":76},".data.ctrl[:] ",[66,116507,99],{"class":72},[66,116509,109243],{"class":76},[66,116511,116512,116514,116516,116518,116520,116522,116524],{"class":68,"line":18623},[66,116513,5222],{"class":72},[66,116515,103275],{"class":76},[66,116517,507],{"class":72},[66,116519,510],{"class":102},[66,116521,348],{"class":76},[66,116523,32617],{"class":102},[66,116525,116526],{"class":76},".frame_skip):\n",[66,116528,116529,116532,116534,116536,116538],{"class":68,"line":18629},[66,116530,116531],{"class":76},"            mujoco.mj_step(",[66,116533,32617],{"class":102},[66,116535,116352],{"class":76},[66,116537,32617],{"class":102},[66,116539,116357],{"class":76},[66,116541,116542],{"class":68,"line":18634},[66,116543,109],{"emptyLinePlaceholder":108},[66,116545,116546,116548,116550,116552],{"class":68,"line":18648},[66,116547,32639],{"class":102},[66,116549,115477],{"class":76},[66,116551,144],{"class":72},[66,116553,103],{"class":102},[66,116555,116556],{"class":68,"line":18653},[66,116557,109],{"emptyLinePlaceholder":108},[66,116559,116560,116562,116564,116566],{"class":68,"line":18658},[66,116561,111954],{"class":76},[66,116563,99],{"class":72},[66,116565,40661],{"class":102},[66,116567,116568],{"class":76},"._get_obs()\n",[66,116570,116571,116573,116575,116577],{"class":68,"line":18672},[66,116572,112059],{"class":76},[66,116574,99],{"class":72},[66,116576,40661],{"class":102},[66,116578,116579],{"class":76},"._get_reward()\n",[66,116581,116582],{"class":68,"line":18684},[66,116583,109],{"emptyLinePlaceholder":108},[66,116585,116586,116588,116590,116592,116594,116596],{"class":68,"line":18689},[66,116587,113908],{"class":76},[66,116589,99],{"class":72},[66,116591,40661],{"class":102},[66,116593,116141],{"class":76},[66,116595,32617],{"class":102},[66,116597,116219],{"class":76},[66,116599,116600,116602,116604,116606,116608,116610],{"class":68,"line":18702},[66,116601,113921],{"class":76},[66,116603,99],{"class":72},[66,116605,40661],{"class":102},[66,116607,116141],{"class":76},[66,116609,32617],{"class":102},[66,116611,116234],{"class":76},[66,116613,116614,116616,116618,116620,116623,116625],{"class":68,"line":18707},[66,116615,116239],{"class":76},[66,116617,99],{"class":72},[66,116619,111569],{"class":102},[66,116621,116622],{"class":76},"(np.linalg.norm(tip ",[66,116624,2511],{"class":72},[66,116626,116627],{"class":76}," target))\n",[66,116629,116630],{"class":68,"line":18712},[66,116631,109],{"emptyLinePlaceholder":108},[66,116633,116634,116637,116639,116641,116643],{"class":68,"line":18717},[66,116635,116636],{"class":76},"        terminated ",[66,116638,99],{"class":72},[66,116640,115460],{"class":76},[66,116642,413],{"class":72},[66,116644,115465],{"class":102},[66,116646,116647,116650,116652,116654,116656,116658,116660],{"class":68,"line":18730},[66,116648,116649],{"class":76},"        truncated ",[66,116651,99],{"class":72},[66,116653,40661],{"class":102},[66,116655,115477],{"class":76},[66,116657,3540],{"class":72},[66,116659,40661],{"class":102},[66,116661,115484],{"class":76},[66,116663,116664,116667,116669,116671,116674],{"class":68,"line":18735},[66,116665,116666],{"class":76},"        info ",[66,116668,99],{"class":72},[66,116670,6264],{"class":76},[66,116672,116673],{"class":356},"\"distance\"",[66,116675,116676],{"class":76},": dist}\n",[66,116678,116679,116681],{"class":68,"line":34423},[66,116680,16557],{"class":72},[66,116682,116683],{"class":76}," obs, reward, terminated, truncated, info\n",[66,116685,116686],{"class":68,"line":34429},[66,116687,109],{"emptyLinePlaceholder":108},[66,116689,116690],{"class":68,"line":34435},[66,116691,109],{"emptyLinePlaceholder":108},[66,116693,116694,116696,116698,116700,116702],{"class":68,"line":34441},[66,116695,33739],{"class":72},[66,116697,3803],{"class":3793},[66,116699,103172],{"class":76},[66,116701,97461],{"class":102},[66,116703,126],{"class":76},[66,116705,116706,116709,116711],{"class":68,"line":34447},[66,116707,116708],{"class":76},"    env ",[66,116710,99],{"class":72},[66,116712,116713],{"class":76}," ReacherEnv()\n",[66,116715,116716,116719,116721,116724,116726,116728,116730],{"class":68,"line":34458},[66,116717,116718],{"class":76},"    obs, info ",[66,116720,99],{"class":72},[66,116722,116723],{"class":76}," env.reset(",[66,116725,116337],{"class":1234},[66,116727,99],{"class":72},[66,116729,2183],{"class":102},[66,116731,313],{"class":76},[66,116733,116734,116736,116738,116741],{"class":68,"line":34464},[66,116735,132],{"class":102},[66,116737,348],{"class":76},[66,116739,116740],{"class":356},"\"initial obs shape:\"",[66,116742,116743],{"class":76},", obs.shape)\n",[66,116745,116746,116748,116750,116753],{"class":68,"line":34484},[66,116747,132],{"class":102},[66,116749,348],{"class":76},[66,116751,116752],{"class":356},"\"initial info:\"",[66,116754,116755],{"class":76},", info)\n",[66,116757,116758],{"class":68,"line":34490},[66,116759,109],{"emptyLinePlaceholder":108},[66,116761,116762,116764,116766],{"class":68,"line":34501},[66,116763,111925],{"class":76},[66,116765,99],{"class":72},[66,116767,106534],{"class":102},[66,116769,116770,116772,116774,116776,116778,116780,116782],{"class":68,"line":34507},[66,116771,1083],{"class":72},[66,116773,33409],{"class":76},[66,116775,507],{"class":72},[66,116777,510],{"class":102},[66,116779,348],{"class":76},[66,116781,2679],{"class":102},[66,116783,522],{"class":76},[66,116785,116786,116788,116790],{"class":68,"line":34513},[66,116787,111994],{"class":76},[66,116789,99],{"class":72},[66,116791,116792],{"class":76}," env.action_space.sample()\n",[66,116794,116795,116798,116800],{"class":68,"line":34519},[66,116796,116797],{"class":76},"        obs, reward, terminated, truncated, info ",[66,116799,99],{"class":72},[66,116801,115186],{"class":76},[66,116803,116804,116806,116808],{"class":68,"line":34525},[66,116805,112069],{"class":76},[66,116807,144],{"class":72},[66,116809,112074],{"class":76},[66,116811,116812,116814,116816,116818,116820,116823,116825,116827,116830,116832,116834,116837,116839,116841,116844,116846,116848,116850],{"class":68,"line":34531},[66,116813,395],{"class":102},[66,116815,348],{"class":76},[66,116817,112103],{"class":356},[66,116819,112106],{"class":76},[66,116821,116822],{"class":356},"\"reward:\"",[66,116824,307],{"class":76},[66,116826,33810],{"class":102},[66,116828,116829],{"class":76},"(reward, ",[66,116831,1520],{"class":102},[66,116833,112117],{"class":76},[66,116835,116836],{"class":356},"\"distance:\"",[66,116838,307],{"class":76},[66,116840,33810],{"class":102},[66,116842,116843],{"class":76},"(info[",[66,116845,116673],{"class":356},[66,116847,113973],{"class":76},[66,116849,1520],{"class":102},[66,116851,360],{"class":76},[66,116853,116854,116856,116859,116862],{"class":68,"line":34537},[66,116855,4321],{"class":72},[66,116857,116858],{"class":76}," terminated ",[66,116860,116861],{"class":72},"or",[66,116863,116864],{"class":76}," truncated:\n",[66,116866,116867],{"class":68,"line":34543},[66,116868,116869],{"class":72},"            break\n",[66,116871,116872],{"class":68,"line":34563},[66,116873,109],{"emptyLinePlaceholder":108},[66,116875,116876,116878,116880,116882,116884,116886,116888,116890],{"class":68,"line":34569},[66,116877,132],{"class":102},[66,116879,348],{"class":76},[66,116881,112148],{"class":356},[66,116883,307],{"class":76},[66,116885,33810],{"class":102},[66,116887,112155],{"class":76},[66,116889,1520],{"class":102},[66,116891,360],{"class":76},[66,116893,116894],{"class":68,"line":34585},[66,116895,109],{"emptyLinePlaceholder":108},[66,116897,116898],{"class":68,"line":34591},[66,116899,109],{"emptyLinePlaceholder":108},[66,116901,116902,116904,116906,116908,116910],{"class":68,"line":34605},[66,116903,3373],{"class":72},[66,116905,33014],{"class":102},[66,116907,959],{"class":72},[66,116909,103335],{"class":356},[66,116911,126],{"class":76},[66,116913,116914],{"class":68,"line":34611},[66,116915,103342],{"class":76},[19,116917,105343],{},[57,116919,116921],{"className":25625,"code":116920,"language":25627,"meta":62,"style":62},"touch ch8_gym_env.py\n",[23,116922,116923],{"__ignoreMap":62},[66,116924,116925,116927],{"class":68,"line":69},[66,116926,103057],{"class":3793},[66,116928,116929],{"class":356}," ch8_gym_env.py\n",[19,116931,112216],{},[57,116933,116935],{"className":25625,"code":116934,"language":25627,"meta":62,"style":62},"python ch8_gym_env.py\n",[23,116936,116937],{"__ignoreMap":62},[66,116938,116939,116941],{"class":68,"line":69},[66,116940,61],{"class":3793},[66,116942,116929],{"class":356},[484,116944,103345],{"id":103345},[19,116946,116947],{},"继承 Gymnasium 环境：",[57,116949,116951],{"className":59,"code":116950,"language":61,"meta":62,"style":62},"class ReacherEnv(gym.Env):\n",[23,116952,116953],{"__ignoreMap":62},[66,116954,116955,116957,116959,116961,116963,116965,116967],{"class":68,"line":69},[66,116956,16499],{"class":72},[66,116958,115828],{"class":3793},[66,116960,348],{"class":76},[66,116962,115311],{"class":3793},[66,116964,2537],{"class":76},[66,116966,115837],{"class":3793},[66,116968,522],{"class":76},[19,116970,116971],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,116973,116974],{},"初始化模型：",[57,116976,116978],{"className":59,"code":116977,"language":61,"meta":62,"style":62},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[23,116979,116980,116994],{"__ignoreMap":62},[66,116981,116982,116984,116986,116988,116990,116992],{"class":68,"line":69},[66,116983,32617],{"class":102},[66,116985,115888],{"class":76},[66,116987,99],{"class":72},[66,116989,103186],{"class":76},[66,116991,103088],{"class":102},[66,116993,313],{"class":76},[66,116995,116996,116998,117000,117002,117004,117006],{"class":68,"line":80},[66,116997,32617],{"class":102},[66,116999,115903],{"class":76},[66,117001,99],{"class":72},[66,117003,115908],{"class":76},[66,117005,32617],{"class":102},[66,117007,115913],{"class":76},[19,117009,117010,117011,117013],{},"这和前面章节一样，只是现在放到了类的 ",[23,117012,32623],{}," 里。",[19,117015,117016],{},"缓存 site ID：",[57,117018,117020],{"className":59,"code":117019,"language":61,"meta":62,"style":62},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[23,117021,117022,117036],{"__ignoreMap":62},[66,117023,117024,117026,117028,117030,117032,117034],{"class":68,"line":69},[66,117025,32617],{"class":102},[66,117027,115924],{"class":76},[66,117029,99],{"class":72},[66,117031,115929],{"class":76},[66,117033,91330],{"class":102},[66,117035,313],{"class":76},[66,117037,117038,117040,117042,117044,117046,117048],{"class":68,"line":80},[66,117039,32617],{"class":102},[66,117041,115945],{"class":76},[66,117043,99],{"class":72},[66,117045,115929],{"class":76},[66,117047,91330],{"class":102},[66,117049,313],{"class":76},[19,117051,117052],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,117054,117055],{},"reset：",[57,117057,117059],{"className":59,"code":117058,"language":61,"meta":62,"style":62},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[23,117060,117061],{"__ignoreMap":62},[66,117062,117063,117065,117067,117069,117071,117073,117075,117077,117079,117081,117083,117085,117087,117089,117091,117093,117095],{"class":68,"line":69},[66,117064,33739],{"class":72},[66,117066,116293],{"class":3793},[66,117068,116296],{"class":76},[66,117070,1208],{"class":72},[66,117072,116301],{"class":76},[66,117074,2003],{"class":102},[66,117076,26912],{"class":72},[66,117078,40721],{"class":102},[66,117080,15369],{"class":72},[66,117082,40721],{"class":102},[66,117084,116314],{"class":76},[66,117086,116317],{"class":102},[66,117088,26912],{"class":72},[66,117090,40721],{"class":102},[66,117092,15369],{"class":72},[66,117094,40721],{"class":102},[66,117096,522],{"class":76},[19,117098,117099,117101],{},[23,117100,71835],{}," 做四件事：",[31,117103,117104,117107,117110,117113],{},[34,117105,117106],{},"设置随机种子。",[34,117108,117109],{},"重置 MuJoCo data。",[34,117111,117112],{},"随机初始化关节角。",[34,117114,117115],{},"返回初始观测和 info。",[19,117117,117118],{},"step：",[57,117120,117122],{"className":59,"code":117121,"language":61,"meta":62,"style":62},"def step(self, action):\n",[23,117123,117124],{"__ignoreMap":62},[66,117125,117126,117128,117130],{"class":68,"line":69},[66,117127,33739],{"class":72},[66,117129,116458],{"class":3793},[66,117131,116461],{"class":76},[19,117133,117134,117136],{},[23,117135,108907],{}," 做六件事：",[31,117138,117139,117142,117148,117151,117154,117157],{},[34,117140,117141],{},"检查并裁剪 action。",[34,117143,117144,117145,158],{},"写入 ",[23,117146,117147],{},"self.data.ctrl",[34,117149,117150],{},"连续推进若干个 MuJoCo 物理步。",[34,117152,117153],{},"计算新观测。",[34,117155,117156],{},"计算奖励和结束条件。",[34,117158,117159],{},"返回 Gymnasium 标准五元组。",[484,117161,103481],{"id":103481},[57,117163,117165],{"className":59,"code":117164,"language":61,"meta":62,"style":62},"import gymnasium as gym\n",[23,117166,117167],{"__ignoreMap":62},[66,117168,117169,117171,117173,117175],{"class":68,"line":69},[66,117170,284],{"class":72},[66,117172,115666],{"class":76},[66,117174,33176],{"class":72},[66,117176,115671],{"class":76},[19,117178,117179,117180,117182,117183,117186],{},"导入 Gymnasium，并起别名 ",[23,117181,115311],{},"。后面写 ",[23,117184,117185],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[57,117188,117190],{"className":59,"code":117189,"language":61,"meta":62,"style":62},"from gymnasium import spaces\n",[23,117191,117192],{"__ignoreMap":62},[66,117193,117194,117196,117198,117200],{"class":68,"line":69},[66,117195,32532],{"class":72},[66,117197,115666],{"class":76},[66,117199,284],{"class":72},[66,117201,115698],{"class":76},[19,117203,117204,117205,117208],{},"导入空间定义工具。",[23,117206,117207],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[57,117210,117211],{"className":59,"code":116950,"language":61,"meta":62,"style":62},[23,117212,117213],{"__ignoreMap":62},[66,117214,117215,117217,117219,117221,117223,117225,117227],{"class":68,"line":69},[66,117216,16499],{"class":72},[66,117218,115828],{"class":3793},[66,117220,348],{"class":76},[66,117222,115311],{"class":3793},[66,117224,2537],{"class":76},[66,117226,115837],{"class":3793},[66,117228,522],{"class":76},[19,117230,117231,117232,117235,117236,117238,117239,102792,117241,117243],{},"定义一个类，名字叫 ",[23,117233,117234],{},"ReacherEnv","。括号里的 ",[23,117237,117185],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[23,117240,71835],{},[23,117242,108907],{}," 这两个核心方法。",[57,117245,117247],{"className":59,"code":117246,"language":61,"meta":62,"style":62},"metadata = {\"render_modes\": []}\n",[23,117248,117249],{"__ignoreMap":62},[66,117250,117251,117254,117256,117258,117260],{"class":68,"line":69},[66,117252,117253],{"class":76},"metadata ",[66,117255,99],{"class":72},[66,117257,6264],{"class":76},[66,117259,115851],{"class":356},[66,117261,115854],{"class":76},[19,117263,117264],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[57,117266,117268],{"className":59,"code":117267,"language":61,"meta":62,"style":62},"def __init__(self) -> None:\n",[23,117269,117270],{"__ignoreMap":62},[66,117271,117272,117274,117276,117278,117280],{"class":68,"line":69},[66,117273,33739],{"class":72},[66,117275,32598],{"class":102},[66,117277,115867],{"class":76},[66,117279,97461],{"class":102},[66,117281,126],{"class":76},[19,117283,117284,117286,117287,158],{},[23,117285,32623],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[23,117288,117289],{},"env = ReacherEnv()",[57,117291,117293],{"className":59,"code":117292,"language":61,"meta":62,"style":62},"super().__init__()\n",[23,117294,117295],{"__ignoreMap":62},[66,117296,117297,117300,117302,117304],{"class":68,"line":69},[66,117298,117299],{"class":102},"super",[66,117301,19064],{"class":76},[66,117303,32623],{"class":102},[66,117305,1253],{"class":76},[19,117307,117308,117309,117311],{},"调用父类 ",[23,117310,117185],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[57,117313,117314],{"className":59,"code":116977,"language":61,"meta":62,"style":62},[23,117315,117316,117330],{"__ignoreMap":62},[66,117317,117318,117320,117322,117324,117326,117328],{"class":68,"line":69},[66,117319,32617],{"class":102},[66,117321,115888],{"class":76},[66,117323,99],{"class":72},[66,117325,103186],{"class":76},[66,117327,103088],{"class":102},[66,117329,313],{"class":76},[66,117331,117332,117334,117336,117338,117340,117342],{"class":68,"line":80},[66,117333,32617],{"class":102},[66,117335,115903],{"class":76},[66,117337,99],{"class":72},[66,117339,115908],{"class":76},[66,117341,32617],{"class":102},[66,117343,115913],{"class":76},[19,117345,117346,117347,117349,117350,102792,117353,117356],{},"把 MuJoCo 模型和状态保存到 ",[23,117348,32617],{}," 上。",[23,117351,117352],{},"self.model",[23,117354,117355],{},"self.data"," 表示这个环境对象自己的模型和状态。",[57,117358,117359],{"className":59,"code":117019,"language":61,"meta":62,"style":62},[23,117360,117361,117375],{"__ignoreMap":62},[66,117362,117363,117365,117367,117369,117371,117373],{"class":68,"line":69},[66,117364,32617],{"class":102},[66,117366,115924],{"class":76},[66,117368,99],{"class":72},[66,117370,115929],{"class":76},[66,117372,91330],{"class":102},[66,117374,313],{"class":76},[66,117376,117377,117379,117381,117383,117385,117387],{"class":68,"line":80},[66,117378,32617],{"class":102},[66,117380,115945],{"class":76},[66,117382,99],{"class":72},[66,117384,115929],{"class":76},[66,117386,91330],{"class":102},[66,117388,313],{"class":76},[19,117390,117391,117392,102792,117395,117398],{},"提前查好 tip 和 target 的 site ID。这样 ",[23,117393,117394],{},"_get_obs",[23,117396,117397],{},"_get_reward"," 里就不用每次按名字查找。",[57,117400,117402],{"className":59,"code":117401,"language":61,"meta":62,"style":62},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[23,117403,117404,117414,117424],{"__ignoreMap":62},[66,117405,117406,117408,117410,117412],{"class":68,"line":69},[66,117407,32617],{"class":102},[66,117409,115638],{"class":76},[66,117411,99],{"class":72},[66,117413,56208],{"class":102},[66,117415,117416,117418,117420,117422],{"class":68,"line":80},[66,117417,32617],{"class":102},[66,117419,116017],{"class":76},[66,117421,99],{"class":72},[66,117423,116022],{"class":102},[66,117425,117426,117428,117430,117432],{"class":68,"line":112},[66,117427,32617],{"class":102},[66,117429,115477],{"class":76},[66,117431,99],{"class":72},[66,117433,197],{"class":102},[19,117435,117436,117439,117440,117443,117444,117447],{},[23,117437,117438],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[23,117441,117442],{},"max_steps"," 是一个 episode 最多运行多少步。",[23,117445,117446],{},"steps"," 记录当前 episode 已经走了多少步。",[57,117449,117450],{"className":59,"code":115516,"language":61,"meta":62,"style":62},[23,117451,117452],{"__ignoreMap":62},[66,117453,117454,117456,117458,117460,117462,117464,117466,117468,117470,117472,117474,117476,117478,117480,117482,117484,117486,117488,117490,117492],{"class":68,"line":69},[66,117455,32617],{"class":102},[66,117457,115525],{"class":76},[66,117459,99],{"class":72},[66,117461,115530],{"class":76},[66,117463,115533],{"class":1234},[66,117465,115536],{"class":72},[66,117467,104176],{"class":102},[66,117469,307],{"class":76},[66,117471,115543],{"class":1234},[66,117473,99],{"class":72},[66,117475,104176],{"class":102},[66,117477,307],{"class":76},[66,117479,97738],{"class":1234},[66,117481,99],{"class":72},[66,117483,348],{"class":76},[66,117485,795],{"class":102},[66,117487,115560],{"class":76},[66,117489,95276],{"class":1234},[66,117491,99],{"class":72},[66,117493,115567],{"class":76},[19,117495,117496,117497,117500,117501,102792,117504,117507],{},"定义动作空间。",[23,117498,117499],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[23,117502,117503],{},"low=-1.0",[23,117505,117506],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[57,117509,117510],{"className":59,"code":115577,"language":61,"meta":62,"style":62},[23,117511,117512],{"__ignoreMap":62},[66,117513,117514,117516,117518,117520,117522,117524,117526,117528,117530,117532,117534,117536,117538,117540,117542,117544,117546,117548],{"class":68,"line":69},[66,117515,32617],{"class":102},[66,117517,115586],{"class":76},[66,117519,99],{"class":72},[66,117521,115530],{"class":76},[66,117523,115533],{"class":1234},[66,117525,115536],{"class":72},[66,117527,115597],{"class":76},[66,117529,115543],{"class":1234},[66,117531,99],{"class":72},[66,117533,115597],{"class":76},[66,117535,97738],{"class":1234},[66,117537,99],{"class":72},[66,117539,348],{"class":76},[66,117541,790],{"class":102},[66,117543,115560],{"class":76},[66,117545,95276],{"class":1234},[66,117547,99],{"class":72},[66,117549,115567],{"class":76},[19,117551,117552,117553,117556,117557,117560],{},"定义观测空间。",[23,117554,117555],{},"shape=(10,)"," 表示观测是 10 个数。",[23,117558,117559],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[57,117562,117564],{"className":59,"code":117563,"language":61,"meta":62,"style":62},"def _get_obs(self) -> np.ndarray:\n",[23,117565,117566],{"__ignoreMap":62},[66,117567,117568,117570,117572],{"class":68,"line":69},[66,117569,33739],{"class":72},[66,117571,116127],{"class":3793},[66,117573,116130],{"class":76},[19,117575,117576,117577,117579],{},"定义内部函数，用来生成观测。函数名前面的 ",[23,117578,2967],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[57,117581,117583],{"className":59,"code":117582,"language":61,"meta":62,"style":62},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[23,117584,117585,117599],{"__ignoreMap":62},[66,117586,117587,117589,117591,117593,117595,117597],{"class":68,"line":69},[66,117588,113340],{"class":76},[66,117590,99],{"class":72},[66,117592,40661],{"class":102},[66,117594,116141],{"class":76},[66,117596,32617],{"class":102},[66,117598,116146],{"class":76},[66,117600,117601,117603,117605,117607,117609,117611],{"class":68,"line":80},[66,117602,1403],{"class":76},[66,117604,99],{"class":72},[66,117606,40661],{"class":102},[66,117608,116141],{"class":76},[66,117610,32617],{"class":102},[66,117612,116161],{"class":76},[19,117614,117615],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[57,117617,117619],{"className":59,"code":117618,"language":61,"meta":62,"style":62},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[23,117620,117621,117637],{"__ignoreMap":62},[66,117622,117623,117625,117627,117629,117631,117633,117635],{"class":68,"line":69},[66,117624,112626],{"class":76},[66,117626,99],{"class":72},[66,117628,116170],{"class":76},[66,117630,32617],{"class":102},[66,117632,116175],{"class":76},[66,117634,32617],{"class":102},[66,117636,116180],{"class":76},[66,117638,117639,117641],{"class":68,"line":80},[66,117640,18849],{"class":72},[66,117642,116187],{"class":76},[19,117644,117645,117646,117649,117650,117652],{},"拼接观测，并转换成 ",[23,117647,117648],{},"float32","。很多强化学习库默认使用 ",[23,117651,117648],{},"，所以这里主动转换。",[57,117654,117655],{"className":59,"code":117058,"language":61,"meta":62,"style":62},[23,117656,117657],{"__ignoreMap":62},[66,117658,117659,117661,117663,117665,117667,117669,117671,117673,117675,117677,117679,117681,117683,117685,117687,117689,117691],{"class":68,"line":69},[66,117660,33739],{"class":72},[66,117662,116293],{"class":3793},[66,117664,116296],{"class":76},[66,117666,1208],{"class":72},[66,117668,116301],{"class":76},[66,117670,2003],{"class":102},[66,117672,26912],{"class":72},[66,117674,40721],{"class":102},[66,117676,15369],{"class":72},[66,117678,40721],{"class":102},[66,117680,116314],{"class":76},[66,117682,116317],{"class":102},[66,117684,26912],{"class":72},[66,117686,40721],{"class":102},[66,117688,15369],{"class":72},[66,117690,40721],{"class":102},[66,117692,522],{"class":76},[19,117694,117695,117696,117698,117699,117702],{},"定义 reset。",[23,117697,116337],{}," 用来控制随机数，保证实验可以复现。",[23,117700,117701],{},"options"," 用来接收额外配置，本章暂时不用。",[57,117704,117706],{"className":59,"code":117705,"language":61,"meta":62,"style":62},"super().reset(seed=seed)\n",[23,117707,117708],{"__ignoreMap":62},[66,117709,117710,117712,117714,117716,117718],{"class":68,"line":69},[66,117711,117299],{"class":102},[66,117713,116334],{"class":76},[66,117715,116337],{"class":1234},[66,117717,99],{"class":72},[66,117719,116342],{"class":76},[19,117721,117722,117723,117726],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[23,117724,117725],{},"self.np_random"," 生成可复现的随机数。",[57,117728,117730],{"className":59,"code":117729,"language":61,"meta":62,"style":62},"mujoco.mj_resetData(self.model, self.data)\n",[23,117731,117732],{"__ignoreMap":62},[66,117733,117734,117737,117739,117741,117743],{"class":68,"line":69},[66,117735,117736],{"class":76},"mujoco.mj_resetData(",[66,117738,32617],{"class":102},[66,117740,116352],{"class":76},[66,117742,32617],{"class":102},[66,117744,116357],{"class":76},[19,117746,117747],{},"把 MuJoCo 状态重置到默认状态。",[57,117749,117751],{"className":59,"code":117750,"language":61,"meta":62,"style":62},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[23,117752,117753],{"__ignoreMap":62},[66,117754,117755,117757,117759,117761,117763,117765,117767,117769,117771,117773,117775,117777,117779,117781,117783,117785,117787],{"class":68,"line":69},[66,117756,32617],{"class":102},[66,117758,116368],{"class":76},[66,117760,99],{"class":72},[66,117762,40661],{"class":102},[66,117764,116375],{"class":76},[66,117766,115533],{"class":1234},[66,117768,115536],{"class":72},[66,117770,87986],{"class":102},[66,117772,307],{"class":76},[66,117774,115543],{"class":1234},[66,117776,99],{"class":72},[66,117778,87986],{"class":102},[66,117780,307],{"class":76},[66,117782,33289],{"class":1234},[66,117784,99],{"class":72},[66,117786,32617],{"class":102},[66,117788,116400],{"class":76},[19,117790,117112,117791,117794,117795,117798,117799,117801],{},[23,117792,117793],{},"[:]"," 表示修改整个数组。",[23,117796,117797],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[23,117800,103923],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[57,117803,117805],{"className":59,"code":117804,"language":61,"meta":62,"style":62},"self.data.qvel[:] = 0.0\n",[23,117806,117807],{"__ignoreMap":62},[66,117808,117809,117811,117813,117815],{"class":68,"line":69},[66,117810,32617],{"class":102},[66,117812,116407],{"class":76},[66,117814,99],{"class":72},[66,117816,106534],{"class":102},[19,117818,117819],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[57,117821,117823],{"className":59,"code":117822,"language":61,"meta":62,"style":62},"self.steps = 0\nreturn self._get_obs(), {}\n",[23,117824,117825,117835],{"__ignoreMap":62},[66,117826,117827,117829,117831,117833],{"class":68,"line":69},[66,117828,32617],{"class":102},[66,117830,115477],{"class":76},[66,117832,99],{"class":72},[66,117834,197],{"class":102},[66,117836,117837,117839,117841],{"class":68,"line":80},[66,117838,18849],{"class":72},[66,117840,40661],{"class":102},[66,117842,116447],{"class":76},[19,117844,117845],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[57,117847,117848],{"className":59,"code":117121,"language":61,"meta":62,"style":62},[23,117849,117850],{"__ignoreMap":62},[66,117851,117852,117854,117856],{"class":68,"line":69},[66,117853,33739],{"class":72},[66,117855,116458],{"class":3793},[66,117857,116461],{"class":76},[19,117859,117860],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[57,117862,117864],{"className":59,"code":117863,"language":61,"meta":62,"style":62},"action = np.asarray(action, dtype=np.float32)\n",[23,117865,117866],{"__ignoreMap":62},[66,117867,117868,117870,117872,117874,117876,117878],{"class":68,"line":69},[66,117869,109215],{"class":76},[66,117871,99],{"class":72},[66,117873,116470],{"class":76},[66,117875,95276],{"class":1234},[66,117877,99],{"class":72},[66,117879,115567],{"class":76},[19,117881,117882,117883,158],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[23,117884,117648],{},[57,117886,117888],{"className":59,"code":117887,"language":61,"meta":62,"style":62},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[23,117889,117890],{"__ignoreMap":62},[66,117891,117892,117894,117896,117898,117900,117902,117904],{"class":68,"line":69},[66,117893,109215],{"class":76},[66,117895,99],{"class":72},[66,117897,109220],{"class":76},[66,117899,32617],{"class":102},[66,117901,116489],{"class":76},[66,117903,32617],{"class":102},[66,117905,116494],{"class":76},[19,117907,117908],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[57,117910,117912],{"className":59,"code":117911,"language":61,"meta":62,"style":62},"self.data.ctrl[:] = action\n",[23,117913,117914],{"__ignoreMap":62},[66,117915,117916,117918,117920,117922],{"class":68,"line":69},[66,117917,32617],{"class":102},[66,117919,116505],{"class":76},[66,117921,99],{"class":72},[66,117923,109243],{"class":76},[19,117925,117926],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[57,117928,117930],{"className":59,"code":117929,"language":61,"meta":62,"style":62},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[23,117931,117932,117948],{"__ignoreMap":62},[66,117933,117934,117936,117938,117940,117942,117944,117946],{"class":68,"line":69},[66,117935,502],{"class":72},[66,117937,103275],{"class":76},[66,117939,507],{"class":72},[66,117941,510],{"class":102},[66,117943,348],{"class":76},[66,117945,32617],{"class":102},[66,117947,116526],{"class":76},[66,117949,117950,117953,117955,117957,117959],{"class":68,"line":80},[66,117951,117952],{"class":76},"    mujoco.mj_step(",[66,117954,32617],{"class":102},[66,117956,116352],{"class":76},[66,117958,32617],{"class":102},[66,117960,116357],{"class":76},[19,117962,117963,117964,117967,117968,117970,117971,158],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[23,117965,117966],{},"frame_skip=5","，所以外部调用一次 ",[23,117969,115648],{},"，内部实际执行 5 次 ",[23,117972,102989],{},[57,117974,117976],{"className":59,"code":117975,"language":61,"meta":62,"style":62},"self.steps += 1\n",[23,117977,117978],{"__ignoreMap":62},[66,117979,117980,117982,117984,117986],{"class":68,"line":69},[66,117981,32617],{"class":102},[66,117983,115477],{"class":76},[66,117985,144],{"class":72},[66,117987,103],{"class":102},[19,117989,117990],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[57,117992,117994],{"className":59,"code":117993,"language":61,"meta":62,"style":62},"obs = self._get_obs()\nreward = self._get_reward()\n",[23,117995,117996,118006],{"__ignoreMap":62},[66,117997,117998,118000,118002,118004],{"class":68,"line":69},[66,117999,112626],{"class":76},[66,118001,99],{"class":72},[66,118003,40661],{"class":102},[66,118005,116568],{"class":76},[66,118007,118008,118010,118012,118014],{"class":68,"line":80},[66,118009,112777],{"class":76},[66,118011,99],{"class":72},[66,118013,40661],{"class":102},[66,118015,116579],{"class":76},[19,118017,118018],{},"计算新的观测和奖励。",[57,118020,118022],{"className":59,"code":118021,"language":61,"meta":62,"style":62},"dist = float(np.linalg.norm(tip - target))\n",[23,118023,118024],{"__ignoreMap":62},[66,118025,118026,118028,118030,118032,118034,118036],{"class":68,"line":69},[66,118027,113367],{"class":76},[66,118029,99],{"class":72},[66,118031,111569],{"class":102},[66,118033,116622],{"class":76},[66,118035,2511],{"class":72},[66,118037,116627],{"class":76},[19,118039,118040],{},"计算末端到目标的距离，并转换成 Python float。",[57,118042,118043],{"className":59,"code":115448,"language":61,"meta":62,"style":62},[23,118044,118045,118057],{"__ignoreMap":62},[66,118046,118047,118049,118051,118053,118055],{"class":68,"line":69},[66,118048,115455],{"class":76},[66,118050,99],{"class":72},[66,118052,115460],{"class":76},[66,118054,413],{"class":72},[66,118056,115465],{"class":102},[66,118058,118059,118061,118063,118065,118067,118069,118071],{"class":68,"line":80},[66,118060,115470],{"class":76},[66,118062,99],{"class":72},[66,118064,40661],{"class":102},[66,118066,115477],{"class":76},[66,118068,3540],{"class":72},[66,118070,40661],{"class":102},[66,118072,115484],{"class":76},[19,118074,118075],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[57,118077,118079],{"className":59,"code":118078,"language":61,"meta":62,"style":62},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[23,118080,118081,118094],{"__ignoreMap":62},[66,118082,118083,118086,118088,118090,118092],{"class":68,"line":69},[66,118084,118085],{"class":76},"info ",[66,118087,99],{"class":72},[66,118089,6264],{"class":76},[66,118091,116673],{"class":356},[66,118093,116676],{"class":76},[66,118095,118096,118098],{"class":68,"line":80},[66,118097,18849],{"class":72},[66,118099,116683],{"class":76},[19,118101,118102,118105],{},[23,118103,118104],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[57,118107,118109],{"className":59,"code":118108,"language":61,"meta":62,"style":62},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[23,118110,118111,118120],{"__ignoreMap":62},[66,118112,118113,118116,118118],{"class":68,"line":69},[66,118114,118115],{"class":76},"env ",[66,118117,99],{"class":72},[66,118119,116713],{"class":76},[66,118121,118122,118124,118126,118128,118130,118132,118134],{"class":68,"line":80},[66,118123,115171],{"class":76},[66,118125,99],{"class":72},[66,118127,116723],{"class":76},[66,118129,116337],{"class":1234},[66,118131,99],{"class":72},[66,118133,2183],{"class":102},[66,118135,313],{"class":76},[19,118137,118138,118139,118142],{},"创建环境并重置。",[23,118140,118141],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[57,118144,118146],{"className":59,"code":118145,"language":61,"meta":62,"style":62},"action = env.action_space.sample()\n",[23,118147,118148],{"__ignoreMap":62},[66,118149,118150,118152,118154],{"class":68,"line":69},[66,118151,109215],{"class":76},[66,118153,99],{"class":72},[66,118155,116792],{"class":76},[19,118157,118158],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,118160,104089],{"id":104088},[19,118162,107257],{},[57,118164,118167],{"className":118165,"code":118166,"language":555,"meta":62},[553],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[23,118168,118166],{"__ignoreMap":62},[19,118170,118171],{},"这个环境已经具备强化学习环境的基本结构。",[19,118173,118174],{},"主函数里使用随机动作：",[57,118176,118177],{"className":59,"code":118145,"language":61,"meta":62,"style":62},[23,118178,118179],{"__ignoreMap":62},[66,118180,118181,118183,118185],{"class":68,"line":69},[66,118182,109215],{"class":76},[66,118184,99],{"class":72},[66,118186,116792],{"class":76},[19,118188,118189],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,118191,104121],{"id":104120},[31,118193,118194,118197,118203,118212,118221,118230,118236],{},[34,118195,118196],{},"运行程序。",[34,118198,118199,118200,158],{},"确认 ",[23,118201,118202],{},"obs.shape == (10,)",[34,118204,112953,118205,118208,118209,158],{},[23,118206,118207],{},"env.action_space","，应类似 ",[23,118210,118211],{},"Box(-1.0, 1.0, (2,), float32)",[34,118213,107358,118214,118217,118218,158],{},[23,118215,118216],{},"self.max_steps = 10","，确认环境会更快 ",[23,118219,118220],{},"truncated=True",[34,118222,104184,118223,104187,118226,118229],{},[23,118224,118225],{},"terminated = dist \u003C 0.05",[23,118227,118228],{},"dist \u003C 0.2","，观察是否更容易结束。",[34,118231,104184,118232,118235],{},[23,118233,118234],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[34,118237,118238,118239,118241,118242,118245],{},"在 ",[23,118240,118104],{}," 里加入 ",[23,118243,118244],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,118247,104226],{"id":104225},[484,118249,118251],{"id":118250},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,118253,118254,118255,118257],{},"Gymnasium 的 ",[23,118256,108907],{}," 返回 5 个值:",[57,118259,118261],{"className":59,"code":118260,"language":61,"meta":62,"style":62},"obs, reward, terminated, truncated, info\n",[23,118262,118263],{"__ignoreMap":62},[66,118264,118265],{"class":68,"line":69},[66,118266,118260],{"class":76},[19,118268,118269],{},"不是旧 Gym 的 4 个值。",[484,118271,118273,118276],{"id":118272},"datactrl-action-维度错误",[23,118274,118275],{},"data.ctrl[:] = action"," 维度错误",[19,118278,104296],{},[57,118280,118282],{"className":59,"code":118281,"language":61,"meta":62,"style":62},"print(self.model.nu)\nprint(action.shape)\n",[23,118283,118284,118295],{"__ignoreMap":62},[66,118285,118286,118288,118290,118292],{"class":68,"line":69},[66,118287,244],{"class":102},[66,118289,348],{"class":76},[66,118291,32617],{"class":102},[66,118293,118294],{"class":76},".model.nu)\n",[66,118296,118297,118299],{"class":68,"line":80},[66,118298,244],{"class":102},[66,118300,118301],{"class":76},"(action.shape)\n",[19,118303,118304],{},"两者必须匹配。",[484,118306,118308],{"id":118307},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,118310,104235],{},[57,118312,118314],{"className":59,"code":118313,"language":61,"meta":62,"style":62},"mujoco.mj_forward(self.model, self.data)\n",[23,118315,118316],{"__ignoreMap":62},[66,118317,118318,118321,118323,118325,118327],{"class":68,"line":69},[66,118319,118320],{"class":76},"mujoco.mj_forward(",[66,118322,32617],{"class":102},[66,118324,116352],{"class":76},[66,118326,32617],{"class":102},[66,118328,116357],{"class":76},[484,118330,118332,118334],{"id":118331},"observation_space-维度和-obs-不一致",[23,118333,115371],{}," 维度和 obs 不一致",[19,118336,104348],{},[57,118338,118340],{"className":59,"code":118339,"language":61,"meta":62,"style":62},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[23,118341,118342,118352,118359],{"__ignoreMap":62},[66,118343,118344,118346,118348,118350],{"class":68,"line":69},[66,118345,112626],{"class":76},[66,118347,99],{"class":72},[66,118349,40661],{"class":102},[66,118351,116568],{"class":76},[66,118353,118354,118356],{"class":68,"line":80},[66,118355,244],{"class":102},[66,118357,118358],{"class":76},"(obs.shape)\n",[66,118360,118361,118363,118365,118367],{"class":68,"line":112},[66,118362,244],{"class":102},[66,118364,348],{"class":76},[66,118366,32617],{"class":102},[66,118368,118369],{"class":76},".observation_space.shape)\n",[19,118371,118372],{},"两者必须一致。本章观测是：",[57,118374,118377],{"className":118375,"code":118376,"language":555,"meta":62},[553],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[23,118378,118376],{"__ignoreMap":62},[484,118380,118382],{"id":118381},"action-超过范围","action 超过范围",[19,118384,118385],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[57,118387,118388],{"className":59,"code":117887,"language":61,"meta":62,"style":62},[23,118389,118390],{"__ignoreMap":62},[66,118391,118392,118394,118396,118398,118400,118402,118404],{"class":68,"line":69},[66,118393,109215],{"class":76},[66,118395,99],{"class":72},[66,118397,109220],{"class":76},[66,118399,32617],{"class":102},[66,118401,116489],{"class":76},[66,118403,32617],{"class":102},[66,118405,116494],{"class":76},[19,118407,118408,118409,158],{},"这能避免无效动作直接写入 ",[23,118410,102850],{},[484,118412,118414],{"id":118413},"忘记返回-info","忘记返回 info",[19,118416,118254,118417,102792,118419,118421],{},[23,118418,71835],{},[23,118420,108907],{}," 都会返回 info：",[57,118423,118424],{"className":59,"code":115164,"language":61,"meta":62,"style":62},[23,118425,118426,118434],{"__ignoreMap":62},[66,118427,118428,118430,118432],{"class":68,"line":69},[66,118429,115171],{"class":76},[66,118431,99],{"class":72},[66,118433,115176],{"class":76},[66,118435,118436,118438,118440],{"class":68,"line":80},[66,118437,115181],{"class":76},[66,118439,99],{"class":72},[66,118441,115186],{"class":76},[19,118443,118444,118445,158],{},"即使暂时没有额外信息，也返回 ",[23,118446,34249],{},[14,118448,118450],{"id":118449},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,118452,118453],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[31,118455,118456,118459,118462,118465,118468,118471],{},[34,118457,118458],{},"更稳定的 reward。",[34,118460,118461],{},"合理的 episode 长度。",[34,118463,118464],{},"可重复的随机目标采样。",[34,118466,118467],{},"render 接口。",[34,118469,118470],{},"环境注册代码。",[34,118472,118473],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,118475,118476],{},"如果只是自己写训练循环，最小形式是：",[57,118478,118480],{"className":59,"code":118479,"language":61,"meta":62,"style":62},"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",[23,118481,118482,118490,118506,118510,118526,118535,118544,118554],{"__ignoreMap":62},[66,118483,118484,118486,118488],{"class":68,"line":69},[66,118485,118115],{"class":76},[66,118487,99],{"class":72},[66,118489,116713],{"class":76},[66,118491,118492,118494,118496,118498,118500,118502,118504],{"class":68,"line":80},[66,118493,115171],{"class":76},[66,118495,99],{"class":72},[66,118497,116723],{"class":76},[66,118499,116337],{"class":1234},[66,118501,99],{"class":72},[66,118503,2183],{"class":102},[66,118505,313],{"class":76},[66,118507,118508],{"class":68,"line":112},[66,118509,109],{"emptyLinePlaceholder":108},[66,118511,118512,118514,118516,118518,118520,118522,118524],{"class":68,"line":129},[66,118513,502],{"class":72},[66,118515,103275],{"class":76},[66,118517,507],{"class":72},[66,118519,510],{"class":102},[66,118521,348],{"class":76},[66,118523,8221],{"class":102},[66,118525,522],{"class":76},[66,118527,118528,118531,118533],{"class":68,"line":138},[66,118529,118530],{"class":76},"    action ",[66,118532,99],{"class":72},[66,118534,116792],{"class":76},[66,118536,118537,118540,118542],{"class":68,"line":227},[66,118538,118539],{"class":76},"    obs, reward, terminated, truncated, info ",[66,118541,99],{"class":72},[66,118543,115186],{"class":76},[66,118545,118546,118548,118550,118552],{"class":68,"line":236},[66,118547,380],{"class":72},[66,118549,116858],{"class":76},[66,118551,116861],{"class":72},[66,118553,116864],{"class":76},[66,118555,118556,118559,118561],{"class":68,"line":241},[66,118557,118558],{"class":76},"        obs, info ",[66,118560,99],{"class":72},[66,118562,115176],{"class":76},[14,118564,118566],{"id":118565},"_9本章小结","9.本章小结",[19,118568,118569],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[57,118571,118574],{"className":118572,"code":118573,"language":555,"meta":62},[553],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[23,118575,118573],{"__ignoreMap":62},[19,118577,118578],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[1903,118580,118581],{},"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":62,"searchDepth":80,"depth":80,"links":118583},[118584,118585,118586,118593,118597,118598,118599,118609,118610],{"id":102420,"depth":80,"text":102421},{"id":102543,"depth":80,"text":102544},{"id":102818,"depth":80,"text":102819,"children":118587},[118588,118590,118592],{"id":115395,"depth":112,"text":118589},"terminated 和 truncated 的区别",{"id":115498,"depth":112,"text":118591},"observation_space 和 action_space",{"id":115625,"depth":112,"text":115626},{"id":103026,"depth":80,"text":103027,"children":118594},[118595,118596],{"id":103345,"depth":112,"text":103345},{"id":103481,"depth":112,"text":103481},{"id":104088,"depth":80,"text":104089},{"id":104120,"depth":80,"text":104121},{"id":104225,"depth":80,"text":104226,"children":118600},[118601,118602,118604,118605,118607,118608],{"id":118250,"depth":112,"text":118251},{"id":118272,"depth":112,"text":118603},"data.ctrl[:] = action 维度错误",{"id":118307,"depth":112,"text":118308},{"id":118331,"depth":112,"text":118606},"observation_space 维度和 obs 不一致",{"id":118381,"depth":112,"text":118382},{"id":118413,"depth":112,"text":118414},{"id":118449,"depth":80,"text":118450},{"id":118565,"depth":80,"text":118566},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":115148,"description":62},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":118617,"title":118618,"body":118619,"description":119042,"extension":1927,"meta":119043,"navigation":108,"path":119044,"seo":119045,"stem":119046,"__hash__":119047},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":118620,"toc":119032},[118621,118625,118628,118631,118651,118657,118663,118673,118676,118679,118699,118702,118706,118709,118715,118718,118732,118735,118738,118812,118815,118821,118824,118847,118850,118900,118903,118909,118912,118915,118918,118937,118940,118946,118949,118952,118955,118975,118978,118981,118984,119029],[10,118622,118624],{"id":118623},"mujoco-学习","MuJoCo 学习",[19,118626,118627],{},"初版",[19,118629,118630],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[31,118632,118633,118636,118639,118648],{},[34,118634,118635],{},"MuJoCo 模型文件在描述什么。",[34,118637,118638],{},"Python 代码怎样读取和推进仿真。",[34,118640,118641,2204,118643,2204,118645,118647],{},[23,118642,105803],{},[23,118644,106133],{},[23,118646,106136],{}," 这些数组为什么重要。",[34,118649,118650],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,118652,118653,118654,118656],{},"默认环境为 Fedora 44、Python >= 3.10、",[23,118655,102801],{}," 官方 Python bindings。",[19,118658,118659,118660,118662],{},"注意：本文禁止使用 ",[23,118661,102786],{},"。所有示例均使用：",[57,118664,118665],{"className":59,"code":103351,"language":61,"meta":62,"style":62},[23,118666,118667],{"__ignoreMap":62},[66,118668,118669,118671],{"class":68,"line":69},[66,118670,284],{"class":72},[66,118672,103075],{"class":76},[14,118674,118675],{"id":118675},"适合谁阅读",[19,118677,118678],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[31,118680,118681,118684,118687,118690],{},[34,118682,118683],{},"没学过 MuJoCo，只会一点 Python。",[34,118685,118686],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[34,118688,118689],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[34,118691,118692,118693,118695,118696,118698],{},"以前接触过 ",[23,118694,102786],{},"，现在想迁移到官方 ",[23,118697,102795],{}," Python bindings。",[19,118700,118701],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,118703,118705],{"id":118704},"mujoco-到底是什么","MuJoCo 到底是什么",[19,118707,118708],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[57,118710,118713],{"className":118711,"code":118712,"language":555,"meta":62},[553],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[23,118714,118712],{"__ignoreMap":62},[19,118716,118717],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[31,118719,118720,118723,118726,118729],{},[34,118721,118722],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[34,118724,118725],{},"快速测试控制算法，不必一开始就上真实机器人。",[34,118727,118728],{},"生成强化学习环境。",[34,118730,118731],{},"采集状态、动作、图像、奖励等训练数据。",[14,118733,118734],{"id":118734},"学习前的心智模型",[19,118736,118737],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[2129,118739,118740,118752],{},[2132,118741,118742],{},[2135,118743,118744,118747,118750],{},[2138,118745,118746],{"align":25539},"部分",[2138,118748,118749],{"align":25539},"负责什么",[2138,118751,22990],{"align":25539},[2176,118753,118754,118765,118777,118789,118801],{},[2135,118755,118756,118759,118762],{},[2181,118757,118758],{"align":25539},"MJCF XML",[2181,118760,118761],{"align":25539},"定义世界和机器人结构",[2181,118763,118764],{"align":25539},"地面、盒子、关节、电机、摄像头",[2135,118766,118767,118771,118774],{},[2181,118768,118769],{"align":25539},[23,118770,102483],{},[2181,118772,118773],{"align":25539},"编译后的静态模型",[2181,118775,118776],{"align":25539},"有几个关节、有几个电机、时间步长是多少",[2135,118778,118779,118783,118786],{},[2181,118780,118781],{"align":25539},[23,118782,102493],{},[2181,118784,118785],{"align":25539},"运行中的动态状态",[2181,118787,118788],{"align":25539},"当前时间、位置、速度、电机输入",[2135,118790,118791,118795,118798],{},[2181,118792,118793],{"align":25539},[23,118794,102989],{},[2181,118796,118797],{"align":25539},"推进一步物理仿真",[2181,118799,118800],{"align":25539},"根据重力、力、碰撞更新状态",[2135,118802,118803,118806,118809],{},[2181,118804,118805],{"align":25539},"Viewer \u002F Renderer",[2181,118807,118808],{"align":25539},"把仿真显示出来",[2181,118810,118811],{"align":25539},"打开窗口或保存图片",[19,118813,118814],{},"一句话总结：",[57,118816,118819],{"className":118817,"code":118818,"language":555,"meta":62},[553],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[23,118820,118818],{"__ignoreMap":62},[19,118822,118823],{},"参考来源：",[2982,118825,118826,118833,118840],{},[34,118827,118828,118829],{},"MuJoCo Python 官方文档：",[2229,118830,118831],{"href":118831,"rel":118832},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[25668],[34,118834,118835,118836],{},"MuJoCo XML Reference：",[2229,118837,118838],{"href":118838,"rel":118839},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[25668],[34,118841,118842,118843],{},"MuJoCo Overview：",[2229,118844,118845],{"href":118845,"rel":118846},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[25668],[14,118848,118849],{"id":118849},"章节目录",[31,118851,118852,118858,118864,118870,118876,118882,118888,118894],{},[34,118853,118854],{},[2229,118855,118857],{"href":118856},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[34,118859,118860],{},[2229,118861,118863],{"href":118862},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[34,118865,118866],{},[2229,118867,118869],{"href":118868},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[34,118871,118872],{},[2229,118873,118875],{"href":118874},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[34,118877,118878],{},[2229,118879,118881],{"href":118880},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[34,118883,118884],{},[2229,118885,118887],{"href":118886},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[34,118889,118890],{},[2229,118891,118893],{"href":118892},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[34,118895,118896],{},[2229,118897,118899],{"href":118898},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,118901,118902],{"id":118902},"推荐学习路线",[57,118904,118907],{"className":118905,"code":118906,"language":555,"meta":62},[553],"环境安装\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",[23,118908,118906],{"__ignoreMap":62},[19,118910,118911],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,118913,118914],{"id":118914},"建议的目录结构",[19,118916,118917],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[57,118919,118921],{"className":25625,"code":118920,"language":25627,"meta":62,"style":62},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[23,118922,118923,118931],{"__ignoreMap":62},[66,118924,118925,118927,118929],{"class":68,"line":69},[66,118926,103040],{"class":3793},[66,118928,31016],{"class":102},[66,118930,103045],{"class":356},[66,118932,118933,118935],{"class":68,"line":80},[66,118934,103050],{"class":102},[66,118936,103045],{"class":356},[19,118938,118939],{},"每一章的代码都单独保存：",[57,118941,118944],{"className":118942,"code":118943,"language":555,"meta":62},[553],"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",[23,118945,118943],{"__ignoreMap":62},[19,118947,118948],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,118950,118951],{"id":118951},"学习方法",[19,118953,118954],{},"每章建议按这个顺序操作：",[31,118956,118957,118960,118963,118966,118969,118972],{},[34,118958,118959],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[34,118961,118962],{},"复制最小可运行代码，保存成指定文件。",[34,118964,118965],{},"运行代码，确认没有报错。",[34,118967,118968],{},"对照“运行结果说明”理解输出。",[34,118970,118971],{},"做“验证步骤”，主动改一两个参数。",[34,118973,118974],{},"遇到报错先看“常见错误与解决方案”。",[19,118976,118977],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,118979,118980],{"id":118980},"全局排错顺序",[19,118982,118983],{},"遇到问题时，按下面顺序查：",[31,118985,118986,118992,118998,119003,119006,119009,119016,119026],{},[34,118987,118988,118989],{},"Python 环境是否激活：",[23,118990,118991],{},"which python",[34,118993,118994,118995],{},"MuJoCo 是否能导入：",[23,118996,118997],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[34,118999,119000,119001],{},"是否误装了 ",[23,119002,102786],{},[34,119004,119005],{},"XML 标签是否闭合、属性是否拼写正确",[34,119007,119008],{},"actuator 引用的 joint 名字是否存在",[34,119010,119011,119013,119014],{},[23,119012,102850],{}," 的长度是否等于 ",[23,119015,103931],{},[34,119017,107358,119018,84316,119020,119022,119023],{},[23,119019,105803],{},[23,119021,106133],{}," 后是否调用了 ",[23,119024,119025],{},"mujoco.mj_forward",[34,119027,119028],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[1903,119030,119031],{},"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":62,"searchDepth":80,"depth":80,"links":119033},[119034,119035,119036,119037,119038,119039,119040,119041],{"id":118675,"depth":80,"text":118675},{"id":118704,"depth":80,"text":118705},{"id":118734,"depth":80,"text":118734},{"id":118849,"depth":80,"text":118849},{"id":118902,"depth":80,"text":118902},{"id":118914,"depth":80,"text":118914},{"id":118951,"depth":80,"text":118951},{"id":118980,"depth":80,"text":118980},"仿真搭建。",{"category":25181},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":118618,"description":119042},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":119049,"title":119050,"body":119051,"description":1926,"extension":1927,"meta":119506,"navigation":108,"path":119507,"seo":119508,"stem":119509,"__hash__":119510},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":119052,"toc":119504},[119053,119056,119059,119065,119501],[10,119054,119050],{"id":119055},"_1-最常用的基本操作更新",[19,119057,119058],{},"装linux系统教程：",[19,119060,119061],{},[2229,119062,119063],{"href":119063,"rel":119064},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[25668],[57,119066,119070],{"className":119067,"code":119068,"language":119069,"meta":62,"style":62},"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",[23,119071,119072,119077,119082,119091,119096,119105,119110,119130,119135,119146,119151,119160,119165,119193,119198,119217,119222,119241,119245,119250,119266,119270,119275,119305,119309,119314,119330,119334,119339,119354,119358,119363,119379,119383,119388,119400,119412,119416,119421,119438,119442,119447,119465,119469,119474,119483,119487,119492],{"__ignoreMap":62},[66,119073,119074],{"class":68,"line":69},[66,119075,119076],{"class":758},"#更新相关的知识\n",[66,119078,119079],{"class":68,"line":80},[66,119080,119081],{"class":758},"# 更新软件包列表（从服务器获取最新软件信息）\n",[66,119083,119084,119086,119089],{"class":68,"line":112},[66,119085,26380],{"class":3793},[66,119087,119088],{"class":356}," apt",[66,119090,28043],{"class":356},[66,119092,119093],{"class":68,"line":129},[66,119094,119095],{"class":758},"# 升级所有可更新的软件包（不删除旧包）\n",[66,119097,119098,119100,119102],{"class":68,"line":138},[66,119099,26380],{"class":3793},[66,119101,119088],{"class":356},[66,119103,119104],{"class":356}," upgrade\n",[66,119106,119107],{"class":68,"line":227},[66,119108,119109],{"class":758},"#更新和升级软件包\n",[66,119111,119112,119114,119116,119119,119121,119123,119125,119128],{"class":68,"line":236},[66,119113,26380],{"class":3793},[66,119115,119088],{"class":356},[66,119117,119118],{"class":356}," update",[66,119120,27991],{"class":76},[66,119122,26380],{"class":3793},[66,119124,119088],{"class":356},[66,119126,119127],{"class":356}," upgrade",[66,119129,102755],{"class":102},[66,119131,119132],{"class":68,"line":241},[66,119133,119134],{"class":758},"#列出可更新的软件包及版本信息\n",[66,119136,119137,119140,119143],{"class":68,"line":372},[66,119138,119139],{"class":3793},"apt",[66,119141,119142],{"class":356}," list",[66,119144,119145],{"class":102}," --upgradable\n",[66,119147,119148],{"class":68,"line":377},[66,119149,119150],{"class":758},"#彻底升级（处理依赖关系，可能删除旧包）\n",[66,119152,119153,119155,119157],{"class":68,"line":392},[66,119154,26380],{"class":3793},[66,119156,119088],{"class":356},[66,119158,119159],{"class":356}," full-upgrade\n",[66,119161,119162],{"class":68,"line":405},[66,119163,119164],{"class":758},"#设置指定版本\n",[66,119166,119167,119169,119171,119173,119175,119178,119180,119182,119184,119186,119189,119191],{"class":68,"line":418},[66,119168,26380],{"class":3793},[66,119170,119088],{"class":356},[66,119172,25637],{"class":356},[66,119174,30702],{"class":72},[66,119176,119177],{"class":356},"package_nam",[66,119179,2068],{"class":76},[66,119181,386],{"class":72},[66,119183,99],{"class":356},[66,119185,413],{"class":72},[66,119187,119188],{"class":356},"version_numbe",[66,119190,2649],{"class":76},[66,119192,53091],{"class":72},[66,119194,119195],{"class":68,"line":430},[66,119196,119197],{"class":758},"#只安装软件包不升级\n",[66,119199,119200,119202,119204,119206,119208,119210,119212,119214],{"class":68,"line":438},[66,119201,26380],{"class":3793},[66,119203,119088],{"class":356},[66,119205,25637],{"class":356},[66,119207,30702],{"class":72},[66,119209,119177],{"class":356},[66,119211,2068],{"class":76},[66,119213,386],{"class":72},[66,119215,119216],{"class":102}," --no-upgrade\n",[66,119218,119219],{"class":68,"line":465},[66,119220,119221],{"class":758},"#只升级，不存在就不安装\n",[66,119223,119224,119226,119228,119230,119232,119234,119236,119238],{"class":68,"line":1805},[66,119225,26380],{"class":3793},[66,119227,119088],{"class":356},[66,119229,25637],{"class":356},[66,119231,30702],{"class":72},[66,119233,119177],{"class":356},[66,119235,2068],{"class":76},[66,119237,386],{"class":72},[66,119239,119240],{"class":102}," --only-upgrade\n",[66,119242,119243],{"class":68,"line":1817},[66,119244,109],{"emptyLinePlaceholder":108},[66,119246,119247],{"class":68,"line":1822},[66,119248,119249],{"class":758},"#安装指定的软件命令\n",[66,119251,119252,119254,119256,119258,119260,119262,119264],{"class":68,"line":1829},[66,119253,26380],{"class":3793},[66,119255,119088],{"class":356},[66,119257,25637],{"class":356},[66,119259,30702],{"class":72},[66,119261,119177],{"class":356},[66,119263,2068],{"class":76},[66,119265,53091],{"class":72},[66,119267,119268],{"class":68,"line":3529},[66,119269,109],{"emptyLinePlaceholder":108},[66,119271,119272],{"class":68,"line":3557},[66,119273,119274],{"class":758},"#安装多个软件包\n",[66,119276,119277,119279,119281,119283,119285,119288,119291,119293,119295,119298,119300,119302],{"class":68,"line":3562},[66,119278,26380],{"class":3793},[66,119280,119088],{"class":356},[66,119282,25637],{"class":356},[66,119284,30702],{"class":72},[66,119286,119287],{"class":356},"package_",[66,119289,119290],{"class":72},"1>",[66,119292,30702],{"class":72},[66,119294,119287],{"class":356},[66,119296,119297],{"class":72},"2>",[66,119299,30702],{"class":72},[66,119301,119287],{"class":356},[66,119303,119304],{"class":72},"3>\n",[66,119306,119307],{"class":68,"line":3579},[66,119308,109],{"emptyLinePlaceholder":108},[66,119310,119311],{"class":68,"line":3584},[66,119312,119313],{"class":758},"#更新指定的软件命令\n",[66,119315,119316,119318,119320,119322,119324,119326,119328],{"class":68,"line":3589},[66,119317,26380],{"class":3793},[66,119319,119088],{"class":356},[66,119321,119118],{"class":356},[66,119323,30702],{"class":72},[66,119325,119177],{"class":356},[66,119327,2068],{"class":76},[66,119329,53091],{"class":72},[66,119331,119332],{"class":68,"line":3594},[66,119333,109],{"emptyLinePlaceholder":108},[66,119335,119336],{"class":68,"line":3608},[66,119337,119338],{"class":758},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[66,119340,119341,119343,119346,119348,119350,119352],{"class":68,"line":3613},[66,119342,119139],{"class":3793},[66,119344,119345],{"class":356}," show",[66,119347,30702],{"class":72},[66,119349,119177],{"class":356},[66,119351,2068],{"class":76},[66,119353,53091],{"class":72},[66,119355,119356],{"class":68,"line":4401},[66,119357,109],{"emptyLinePlaceholder":108},[66,119359,119360],{"class":68,"line":4415},[66,119361,119362],{"class":758},"#删除软件包命令\n",[66,119364,119365,119367,119369,119371,119373,119375,119377],{"class":68,"line":4423},[66,119366,26380],{"class":3793},[66,119368,119088],{"class":356},[66,119370,27880],{"class":356},[66,119372,30702],{"class":72},[66,119374,119177],{"class":356},[66,119376,2068],{"class":76},[66,119378,53091],{"class":72},[66,119380,119381],{"class":68,"line":4428},[66,119382,109],{"emptyLinePlaceholder":108},[66,119384,119385],{"class":68,"line":4434},[66,119386,119387],{"class":758},"# 清理旧版本和缓存（释放磁盘空间）\n",[66,119389,119390,119392,119394,119397],{"class":68,"line":4440},[66,119391,26380],{"class":3793},[66,119393,119088],{"class":356},[66,119395,119396],{"class":356}," autoremove",[66,119398,119399],{"class":758},"  # 删除不再需要的依赖和库文件\n",[66,119401,119402,119404,119406,119409],{"class":68,"line":4445},[66,119403,26380],{"class":3793},[66,119405,119088],{"class":356},[66,119407,119408],{"class":356}," clean",[66,119410,119411],{"class":758},"       # 清理下载的缓存包\n",[66,119413,119414],{"class":68,"line":9759},[66,119415,109],{"emptyLinePlaceholder":108},[66,119417,119418],{"class":68,"line":9783},[66,119419,119420],{"class":758},"#移除软件包及配置文件\n",[66,119422,119423,119425,119427,119430,119432,119434,119436],{"class":68,"line":9788},[66,119424,26380],{"class":3793},[66,119426,119088],{"class":356},[66,119428,119429],{"class":356}," purge",[66,119431,30702],{"class":72},[66,119433,119177],{"class":356},[66,119435,2068],{"class":76},[66,119437,53091],{"class":72},[66,119439,119440],{"class":68,"line":9794},[66,119441,109],{"emptyLinePlaceholder":108},[66,119443,119444],{"class":68,"line":9821},[66,119445,119446],{"class":758},"#查找软件包命令\n",[66,119448,119449,119451,119453,119456,119458,119461,119463],{"class":68,"line":9826},[66,119450,26380],{"class":3793},[66,119452,119088],{"class":356},[66,119454,119455],{"class":356}," search",[66,119457,30702],{"class":72},[66,119459,119460],{"class":356},"keywor",[66,119462,2302],{"class":76},[66,119464,53091],{"class":72},[66,119466,119467],{"class":68,"line":9832},[66,119468,109],{"emptyLinePlaceholder":108},[66,119470,119471],{"class":68,"line":9844},[66,119472,119473],{"class":758},"#列出所有已安装的包\n",[66,119475,119476,119478,119480],{"class":68,"line":9856},[66,119477,119139],{"class":3793},[66,119479,119142],{"class":356},[66,119481,119482],{"class":102}," --installed\n",[66,119484,119485],{"class":68,"line":9868},[66,119486,109],{"emptyLinePlaceholder":108},[66,119488,119489],{"class":68,"line":11523},[66,119490,119491],{"class":758},"#列出所有已安装的包的版本信息\n",[66,119493,119494,119496,119498],{"class":68,"line":11548},[66,119495,119139],{"class":3793},[66,119497,119142],{"class":356},[66,119499,119500],{"class":102}," --all-versions\n",[1903,119502,119503],{},"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":62,"searchDepth":80,"depth":80,"links":119505},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":119050,"description":1926},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":119512,"title":119513,"body":119514,"description":1926,"extension":1927,"meta":120255,"navigation":108,"path":120256,"seo":120257,"stem":120258,"__hash__":120259},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":119515,"toc":120242},[119516,119519,119523,119526,119532,119536,119540,119546,119551,119556,119561,119566,119571,119574,119577,119580,119583,119587,119590,119595,119598,119603,119606,119611,119618,119621,119624,119627,119630,119633,119644,119648,119652,119657,119662,119666,119671,119675,119680,119684,119688,119693,119696,119741,119746,119750,119754,119759,119765,119770,119780,119785,119795,119800,119805,119832,119836,119839,119844,119847,119872,119876,119881,119884,119889,119894,119914,119919,119922,119937,119941,119994,119997,120002,120006,120009,120024,120027,120030,120035,120039,120043,120046,120050,120054,120057,120062,120067,120071,120078,120086,120089,120096,120101,120106,120109,120114,120121,120126,120133,120137,120139,120144,120148,120151,120154,120159,120162,120167,120170,120175,120180,120185,120189,120194,120198,120239],[10,119517,119513],{"id":119518},"_2-linux装机教程",[14,119520,119522],{"id":119521},"_21-实体机","2.1 实体机",[19,119524,119525],{},"使用清华源：（Ubuntu24.04）",[19,119527,119528],{},[2229,119529,119530],{"href":119530,"rel":119531},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[25668],[14,119533,119535],{"id":119534},"_22-普通虚拟机","2.2 普通虚拟机",[484,119537,119539],{"id":119538},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,119541,119542],{},[2229,119543,119544],{"href":119544,"rel":119545},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[25668],[19,119547,119548],{},[3304,119549],{"alt":62,"src":119550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,119552,119553],{},[3304,119554],{"alt":62,"src":119555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,119557,119558],{},[3304,119559],{"alt":62,"src":119560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,119562,119563],{},[3304,119564],{"alt":62,"src":119565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,119567,119568],{},[3304,119569],{"alt":62,"src":119570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,119572,119573],{},"内存4G（4096MB）；",[19,119575,119576],{},"CPU给4个核；",[19,119578,119579],{},"硬盘动态分配60G；",[19,119581,119582],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[484,119584,119586],{"id":119585},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,119588,119589],{},"按照1.1的步骤下载Ubuntu",[19,119591,119592],{},[3304,119593],{"alt":62,"src":119594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,119596,119597],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,119599,119600],{},[3304,119601],{"alt":62,"src":119602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,119604,119605],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,119607,119608],{},[3304,119609],{"alt":62,"src":119610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,119612,119613,119614,119617],{},"选择“正常安装”(找不到都用Alt+F7)， ",[2141,119615,119616],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,119619,119620],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,119622,119623],{},"将改动写入磁盘吗 继续",[19,119625,119626],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,119628,119629],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,119631,119632],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,119634,119635,119636,119639,119640,119643],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[2141,119637,119638],{},"除了"," 选不发送系统信息与不升级之外， ",[2141,119641,119642],{},"其它"," 都跳过或前进）",[484,119645,119647],{"id":119646},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[23801,119649,119651],{"id":119650},"_2231-全屏","2.2.3.1 全屏",[19,119653,119654],{},[3304,119655],{"alt":62,"src":119656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,119658,119659],{},[3304,119660],{"alt":62,"src":119661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[23801,119663,119665],{"id":119664},"_2232-文件交换","2.2.3.2 文件交换",[19,119667,119668],{},[3304,119669],{"alt":62,"src":119670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[23801,119672,119674],{"id":119673},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,119676,119677],{},[3304,119678],{"alt":62,"src":119679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,119681,119683],{"id":119682},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[484,119685,119687],{"id":119686},"_231-简介与优缺点","2.3.1 简介与优缺点",[31,119689,119690],{},[34,119691,119692],{},"什么情况下推荐？",[19,119694,119695],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[31,119697,119698],{"start":80},[34,119699,119700,119701],{},"优缺点：",[31,119702,119703,119733],{},[34,119704,119705,119706],{},"优点：",[31,119707,119708,119711,119718,119721,119724,119727,119730],{},[34,119709,119710],{},"WSL2是最好的Linux发行版;(bushi)",[34,119712,119713,119714,119717],{},"性能损耗极低。且比在Windows上跑深度性能 ",[2141,119715,119716],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[34,119719,119720],{},"非常方便调用USB设备，可以USB直通;",[34,119722,119723],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[34,119725,119726],{},"非常方便Win与WSL2互相传文件等协同操作;",[34,119728,119729],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[34,119731,119732],{},"非常方便使用Windows的VScode远程开发;",[34,119734,119735,119736],{},"缺点：",[31,119737,119738],{},[34,119739,119740],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,119742,119743],{},[3304,119744],{"alt":62,"src":119745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[484,119747,119749],{"id":119748},"_232-安装教程","2.3.2 安装教程",[23801,119751,119753],{"id":119752},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[31,119755,119756],{},[34,119757,119758],{},"方法一(图形界面)",[19,119760,119761,119762,807],{},"用Win+R输入",[23,119763,119764],{},"appwiz.cpl",[19,119766,119767],{},[3304,119768],{"alt":62,"src":119769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,119771,119772,119773,119776,119777,28274],{},"点击OK进入 ",[2141,119774,119775],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[2141,119778,119779],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,119781,119782],{},[3304,119783],{"alt":62,"src":119784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,119786,119787,119788,102792,119791,119794],{},"选择 ",[2141,119789,119790],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[2141,119792,119793],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,119796,119797],{},[3304,119798],{"alt":62,"src":119799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[31,119801,119802],{"start":80},[34,119803,119804],{},"方法二(命令行)",[57,119806,119810],{"className":119807,"code":119808,"language":119809,"meta":62,"style":62},"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",[23,119811,119812,119817,119822,119827],{"__ignoreMap":62},[66,119813,119814],{"class":68,"line":69},[66,119815,119816],{},"# 开启 Linux 子系统\n",[66,119818,119819],{"class":68,"line":80},[66,119820,119821],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[66,119823,119824],{"class":68,"line":112},[66,119825,119826],{},"# 开启虚拟机平台\n",[66,119828,119829],{"class":68,"line":129},[66,119830,119831],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[23801,119833,119835],{"id":119834},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,119837,119838],{},"用管理员权限打开powershell",[19,119840,119841],{},[3304,119842],{"alt":62,"src":119843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,119845,119846],{},"升级WSL并设置默认版本为WSL2",[57,119848,119850],{"className":119807,"code":119849,"language":119809,"meta":62,"style":62},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[23,119851,119852,119857,119862,119867],{"__ignoreMap":62},[66,119853,119854],{"class":68,"line":69},[66,119855,119856],{},"# 更新 wsl\n",[66,119858,119859],{"class":68,"line":80},[66,119860,119861],{},"wsl --update\n",[66,119863,119864],{"class":68,"line":112},[66,119865,119866],{},"# 将 wsl 版本设置为 wsl2\n",[66,119868,119869],{"class":68,"line":129},[66,119870,119871],{},"wsl --set-default-version 2\n",[23801,119873,119875],{"id":119874},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[31,119877,119878],{},[34,119879,119880],{},"方式一(商店下载)",[19,119882,119883],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,119885,119886],{},[3304,119887],{"alt":62,"src":119888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[31,119890,119891],{"start":80},[34,119892,119893],{},"方式二(命令行安装)",[57,119895,119897],{"className":119807,"code":119896,"language":119809,"meta":62,"style":62},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[23,119898,119899,119904,119909],{"__ignoreMap":62},[66,119900,119901],{"class":68,"line":69},[66,119902,119903],{},"# 列出可安装的 Linux 版本\n",[66,119905,119906],{"class":68,"line":80},[66,119907,119908],{},"#（需要科学手段）\n",[66,119910,119911],{"class":68,"line":112},[66,119912,119913],{},"wsl --list --online\n",[19,119915,119916],{},[3304,119917],{"alt":62,"src":119918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,119920,119921],{},"选择对应发行版并安装",[57,119923,119925],{"className":119807,"code":119924,"language":119809,"meta":62,"style":62},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[23,119926,119927,119932],{"__ignoreMap":62},[66,119928,119929],{"class":68,"line":69},[66,119930,119931],{},"# Ubuntu安装完毕后需要重启系统\n",[66,119933,119934],{"class":68,"line":80},[66,119935,119936],{},"wsl --install -d Ubuntu-24.04\n",[23801,119938,119940],{"id":119939},"_2324-查看系统状态","2.3.2.4 查看系统状态",[57,119942,119944],{"className":119807,"code":119943,"language":119809,"meta":62,"style":62},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[23,119945,119946,119951,119956,119961,119966,119970,119974,119979,119984,119989],{"__ignoreMap":62},[66,119947,119948],{"class":68,"line":69},[66,119949,119950],{},"# 查看 wsl\n",[66,119952,119953],{"class":68,"line":80},[66,119954,119955],{},"wsl -l\n",[66,119957,119958],{"class":68,"line":112},[66,119959,119960],{},"# 查看 wsl 运行版本或模式\n",[66,119962,119963],{"class":68,"line":129},[66,119964,119965],{},"wsl -l -v\n",[66,119967,119968],{"class":68,"line":138},[66,119969,109],{"emptyLinePlaceholder":108},[66,119971,119972],{"class":68,"line":227},[66,119973,109],{"emptyLinePlaceholder":108},[66,119975,119976],{"class":68,"line":236},[66,119977,119978],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[66,119980,119981],{"class":68,"line":241},[66,119982,119983],{},"wsl --set-version \u003Cdistro> 2\n",[66,119985,119986],{"class":68,"line":372},[66,119987,119988],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[66,119990,119991],{"class":68,"line":377},[66,119992,119993],{},"wsl --unregister \u003Cdistro>\n",[19,119995,119996],{},"输出Version为2即正常",[19,119998,119999],{},[3304,120000],{"alt":62,"src":120001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[23801,120003,120005],{"id":120004},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,120007,120008],{},"直接在Powershell里输入wsl命令进入子系统",[57,120010,120012],{"className":119807,"code":120011,"language":119809,"meta":62,"style":62},"# 进入子系统\nwsl\n",[23,120013,120014,120019],{"__ignoreMap":62},[66,120015,120016],{"class":68,"line":69},[66,120017,120018],{},"# 进入子系统\n",[66,120020,120021],{"class":68,"line":80},[66,120022,120023],{},"wsl\n",[19,120025,120026],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,120028,120029],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,120031,120032],{},[3304,120033],{"alt":62,"src":120034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[484,120036,120038],{"id":120037},"_233-配置各种环境","2.3.3 配置各种环境",[23801,120040,120042],{"id":120041},"_2331-换源","2.3.3.1 换源",[19,120044,120045],{},"(同实体机LINUX，往下找教程)",[23801,120047,120049],{"id":120048},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[24713,120051,120053],{"id":120052},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,120055,120056],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,120058,120059],{},[3304,120060],{"alt":62,"src":120061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,120063,120064],{},[3304,120065],{"alt":62,"src":120066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[24713,120068,120070],{"id":120069},"_23322-cuda","2.3.3.2.2 CUDA",[19,120072,120073,120074],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[2229,120075,120076],{"href":120076,"rel":120077},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[25668],[19,120079,120080,120083],{},[3304,120081],{"alt":62,"src":120082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[3304,120084],{"alt":62,"src":120085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,120087,120088],{},"在下方的网站，选择合适的版本。",[19,120090,120091,120092],{},"WSL2 专属 CUDA 指南：",[2229,120093,120094],{"href":120094,"rel":120095},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[25668],[19,120097,120098],{},[2141,120099,120100],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,120102,120103],{},[3304,120104],{"alt":62,"src":120105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,120107,120108],{},"挨行敲一遍",[19,120110,120111],{},[3304,120112],{"alt":62,"src":120113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,120115,120116,120117,120120],{},"敲完后，输入",[23,120118,120119],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,120122,120123],{},[3304,120124],{"alt":62,"src":120125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,120127,120128,120129,120132],{},"（请详看下方教程的",[2141,120130,120131],{},"安装CUDA的配置环境来看","如何配置环境）",[24713,120134,120136],{"id":120135},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,120138,120045],{},[19,120140,120141],{},[3304,120142],{"alt":62,"src":120143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[23801,120145,120147],{"id":120146},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,120149,120150],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,120152,120153],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,120155,120156],{},[3304,120157],{"alt":62,"src":120158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,120160,120161],{},"连接WSL2",[19,120163,120164],{},[3304,120165],{"alt":62,"src":120166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,120168,120169],{},"远程开发成功。",[19,120171,120172],{},[3304,120173],{"alt":62,"src":120174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,120176,120177],{},[3304,120178],{"alt":62,"src":120179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,120181,120182],{},[3304,120183],{"alt":62,"src":120184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[23801,120186,120188],{"id":120187},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,120190,120191],{},[3304,120192],{"alt":62,"src":120193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[23801,120195,120197],{"id":120196},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[57,120199,120201],{"className":119067,"code":120200,"language":119069,"meta":62,"style":62},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[23,120202,120203,120211,120219,120230,120234],{"__ignoreMap":62},[66,120204,120205,120207,120209],{"class":68,"line":69},[66,120206,26380],{"class":3793},[66,120208,119088],{"class":356},[66,120210,28043],{"class":356},[66,120212,120213,120215,120217],{"class":68,"line":80},[66,120214,26380],{"class":3793},[66,120216,119088],{"class":356},[66,120218,119104],{"class":356},[66,120220,120221,120223,120225,120227],{"class":68,"line":112},[66,120222,26380],{"class":3793},[66,120224,119088],{"class":356},[66,120226,25637],{"class":356},[66,120228,120229],{"class":356}," mesa-utils\n",[66,120231,120232],{"class":68,"line":129},[66,120233,109],{"emptyLinePlaceholder":108},[66,120235,120236],{"class":68,"line":138},[66,120237,120238],{"class":758},"#然后重启wsl2即可\n",[1903,120240,120241],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":62,"searchDepth":80,"depth":80,"links":120243},[120244,120245,120250],{"id":119521,"depth":80,"text":119522},{"id":119534,"depth":80,"text":119535,"children":120246},[120247,120248,120249],{"id":119538,"depth":112,"text":119539},{"id":119585,"depth":112,"text":119586},{"id":119646,"depth":112,"text":119647},{"id":119682,"depth":80,"text":119683,"children":120251},[120252,120253,120254],{"id":119686,"depth":112,"text":119687},{"id":119748,"depth":112,"text":119749},{"id":120037,"depth":112,"text":120038},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":119513,"description":1926},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":120261,"title":120262,"body":120263,"description":1926,"extension":1927,"meta":123199,"navigation":108,"path":123200,"seo":123201,"stem":123202,"__hash__":123203},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":120264,"toc":123171},[120265,120268,120272,120278,120282,120288,120292,120480,120483,120488,120492,120496,120499,120502,120508,120513,120516,120519,120524,120557,120562,120566,120643,120646,120651,120655,120658,120697,120700,120709,120727,120732,120739,120856,120861,120864,120891,120896,120900,120909,120959,120966,120970,120973,120987,120994,121028,121033,121037,121060,121063,121068,121072,121075,121078,121081,121123,121127,121130,121133,121174,121178,121182,121185,121190,121195,121198,121221,121224,121232,121237,121240,121245,121250,121253,121258,121262,121267,121290,121295,121357,121365,121370,121375,121378,121383,121386,121391,121396,121414,121419,121425,121430,121444,121448,121451,121454,121457,121500,121503,121508,121609,121612,121617,121621,121625,121662,121666,121670,121674,121720,121724,121769,121773,121780,121788,121843,121846,121923,121926,121949,121953,121956,121961,121966,121974,121977,121982,121987,121992,121995,122000,122009,122012,122017,122020,122091,122096,122099,122104,122107,122112,122115,122120,122123,122128,122133,122136,122211,122214,122227,122232,122235,122249,122252,122281,122286,122315,122318,122323,122327,122332,122341,122344,122349,122352,122357,122360,122363,122368,122371,122376,122381,122384,122389,122392,122517,122522,122552,122555,122560,122565,122582,122585,122628,122631,122658,122663,122676,122819,122823,122828,122842,122845,122896,122899,122929,122932,122948,122953,122967,122970,123037,123042,123051,123056,123059,123071,123076,123083,123107,123110,123115,123118,123137,123142,123149,123161,123168],[10,120266,120262],{"id":120267},"_3-安装必备配置",[14,120269,120271],{"id":120270},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[57,120273,120276],{"className":120274,"code":120275,"language":555},[553],"  打开下方网站（注意，该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",[23,120277,120275],{"__ignoreMap":62},[484,120279,120281],{"id":120280},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[57,120283,120286],{"className":120284,"code":120285,"language":555},[553],"  输入以下命令\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",[23,120287,120285],{"__ignoreMap":62},[484,120289,120291],{"id":120290},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[57,120293,120297],{"className":120294,"code":120295,"language":120296,"meta":62,"style":62},"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",[23,120298,120299,120307,120318,120330,120344,120348,120358,120363,120367,120371,120376,120380,120392,120396,120401,120405,120416,120420,120436,120440,120451,120455,120460,120464,120472],{"__ignoreMap":62},[66,120300,120301,120303,120305],{"class":68,"line":69},[66,120302,26380],{"class":3793},[66,120304,119088],{"class":356},[66,120306,28043],{"class":356},[66,120308,120309,120311,120313,120315],{"class":68,"line":80},[66,120310,26380],{"class":3793},[66,120312,119088],{"class":356},[66,120314,25637],{"class":356},[66,120316,120317],{"class":356}," vim\n",[66,120319,120320,120322,120325,120327],{"class":68,"line":112},[66,120321,26380],{"class":3793},[66,120323,120324],{"class":356}," rm",[66,120326,27127],{"class":102},[66,120328,120329],{"class":356}," \u002Fetc\u002Fapt\u002Fsources.list\n",[66,120331,120332,120334,120336,120338,120341],{"class":68,"line":129},[66,120333,26380],{"class":3793},[66,120335,120324],{"class":356},[66,120337,27127],{"class":102},[66,120339,120340],{"class":356}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[66,120342,120343],{"class":102},"**\n",[66,120345,120346],{"class":68,"line":138},[66,120347,109],{"emptyLinePlaceholder":108},[66,120349,120350,120352,120355],{"class":68,"line":227},[66,120351,26380],{"class":3793},[66,120353,120354],{"class":356}," vim",[66,120356,120357],{"class":356}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[66,120359,120360],{"class":68,"line":236},[66,120361,120362],{"class":356},"```\n",[66,120364,120365],{"class":68,"line":241},[66,120366,109],{"emptyLinePlaceholder":108},[66,120368,120369],{"class":68,"line":372},[66,120370,109],{"emptyLinePlaceholder":108},[66,120372,120373],{"class":68,"line":377},[66,120374,120375],{"class":3793},"选择好Ubuntu版本后，复制下方的内容。\n",[66,120377,120378],{"class":68,"line":392},[66,120379,109],{"emptyLinePlaceholder":108},[66,120381,120382,120384,120387,120390],{"class":68,"line":405},[66,120383,2217],{"class":72},[66,120385,120386],{"class":356},"[](",[66,120388,120389],{"class":3793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[66,120391,313],{"class":356},[66,120393,120394],{"class":68,"line":418},[66,120395,109],{"emptyLinePlaceholder":108},[66,120397,120398],{"class":68,"line":430},[66,120399,120400],{"class":3793},"粘贴进去\n",[66,120402,120403],{"class":68,"line":438},[66,120404,109],{"emptyLinePlaceholder":108},[66,120406,120407,120409,120411,120414],{"class":68,"line":465},[66,120408,2217],{"class":72},[66,120410,120386],{"class":356},[66,120412,120413],{"class":3793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[66,120415,313],{"class":356},[66,120417,120418],{"class":68,"line":1805},[66,120419,109],{"emptyLinePlaceholder":108},[66,120421,120422,120425,120428,120431,120433],{"class":68,"line":1817},[66,120423,120424],{"class":3793},"按一下ESC，然后英文冒号，输入",[66,120426,120427],{"class":356}," `",[66,120429,120430],{"class":3793},":wq!",[66,120432,2947],{"class":356},[66,120434,120435],{"class":3793},"然后回车\n",[66,120437,120438],{"class":68,"line":1822},[66,120439,109],{"emptyLinePlaceholder":108},[66,120441,120442,120444,120446,120449],{"class":68,"line":1829},[66,120443,2217],{"class":72},[66,120445,120386],{"class":356},[66,120447,120448],{"class":3793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[66,120450,313],{"class":356},[66,120452,120453],{"class":68,"line":3529},[66,120454,109],{"emptyLinePlaceholder":108},[66,120456,120457],{"class":68,"line":3557},[66,120458,120459],{"class":3793},"输入以下命令\n",[66,120461,120462],{"class":68,"line":3562},[66,120463,109],{"emptyLinePlaceholder":108},[66,120465,120466,120469],{"class":68,"line":3579},[66,120467,120468],{"class":356},"```",[66,120470,120471],{"class":3793},"Bash\n",[66,120473,120474,120476,120478],{"class":68,"line":3584},[66,120475,26380],{"class":3793},[66,120477,119088],{"class":356},[66,120479,28043],{"class":356},[19,120481,120482],{},"这里被替换成对应学校则成功",[19,120484,120485],{},[3304,120486],{"alt":62,"src":120487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,120489,120491],{"id":120490},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[484,120493,120495],{"id":120494},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,120497,120498],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,120500,120501],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,120503,120504],{},[2229,120505,120506],{"href":120506,"rel":120507},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[25668],[19,120509,120510],{},[3304,120511],{"alt":62,"src":120512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,120514,120515],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,120517,120518],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,120520,120521],{},[3304,120522],{"alt":62,"src":120523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[57,120525,120527],{"className":119067,"code":120526,"language":119069,"meta":62,"style":62},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[23,120528,120529,120534,120541,120546],{"__ignoreMap":62},[66,120530,120531],{"class":68,"line":69},[66,120532,120533],{"class":758},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[66,120535,120536,120538],{"class":68,"line":80},[66,120537,103050],{"class":102},[66,120539,120540],{"class":356}," ~\u002FDownloads\n",[66,120542,120543],{"class":68,"line":112},[66,120544,120545],{"class":758},"#下方chrome安装包名不一定是这个，根据名字来看\n",[66,120547,120548,120550,120552,120554],{"class":68,"line":129},[66,120549,26380],{"class":3793},[66,120551,119088],{"class":356},[66,120553,25637],{"class":356},[66,120555,120556],{"class":356}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,120558,120559],{},[3304,120560],{"alt":62,"src":120561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[484,120563,120565],{"id":120564},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[57,120567,120569],{"className":119067,"code":120568,"language":119069,"meta":62,"style":62},"# 老版\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",[23,120570,120571,120576,120584,120595,120600,120604,120609,120619,120627,120638],{"__ignoreMap":62},[66,120572,120573],{"class":68,"line":69},[66,120574,120575],{"class":758},"# 老版\n",[66,120577,120578,120580,120582],{"class":68,"line":80},[66,120579,26380],{"class":3793},[66,120581,119088],{"class":356},[66,120583,28043],{"class":356},[66,120585,120586,120588,120590,120592],{"class":68,"line":112},[66,120587,26380],{"class":3793},[66,120589,119088],{"class":356},[66,120591,25637],{"class":356},[66,120593,120594],{"class":356}," neofetch\n",[66,120596,120597],{"class":68,"line":129},[66,120598,120599],{"class":3793},"neofetch\n",[66,120601,120602],{"class":68,"line":138},[66,120603,109],{"emptyLinePlaceholder":108},[66,120605,120606],{"class":68,"line":227},[66,120607,120608],{"class":758},"# 新版\n",[66,120610,120611,120613,120616],{"class":68,"line":236},[66,120612,26380],{"class":3793},[66,120614,120615],{"class":356}," add-apt-repository",[66,120617,120618],{"class":356}," ppa:zhangsongcui3371\u002Ffastfetch\n",[66,120620,120621,120623,120625],{"class":68,"line":241},[66,120622,26380],{"class":3793},[66,120624,119088],{"class":356},[66,120626,28043],{"class":356},[66,120628,120629,120631,120633,120635],{"class":68,"line":372},[66,120630,26380],{"class":3793},[66,120632,119088],{"class":356},[66,120634,25637],{"class":356},[66,120636,120637],{"class":356}," fastfetch\n",[66,120639,120640],{"class":68,"line":377},[66,120641,120642],{"class":3793},"fastfetch\n",[19,120644,120645],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,120647,120648],{},[3304,120649],{"alt":62,"src":120650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[484,120652,120654],{"id":120653},"_323-移除snap应用","3.2.3 移除snap应用",[19,120656,120657],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[57,120659,120661],{"className":119067,"code":120660,"language":119069,"meta":62,"style":62},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[23,120662,120663,120675,120686],{"__ignoreMap":62},[66,120664,120665,120667,120669,120672],{"class":68,"line":69},[66,120666,26380],{"class":3793},[66,120668,28314],{"class":356},[66,120670,120671],{"class":356}," disable",[66,120673,120674],{"class":356}," snapd.service\n",[66,120676,120677,120679,120681,120683],{"class":68,"line":80},[66,120678,26380],{"class":3793},[66,120680,28314],{"class":356},[66,120682,120671],{"class":356},[66,120684,120685],{"class":356}," snapd.socket\n",[66,120687,120688,120690,120692,120694],{"class":68,"line":112},[66,120689,26380],{"class":3793},[66,120691,28314],{"class":356},[66,120693,120671],{"class":356},[66,120695,120696],{"class":356}," snapd.seeded.service\n",[19,120698,120699],{},"然后查看snap应用列表",[19,120701,120702,120703,120708],{},"根据你安装的选择不同（最小安装或普通安装），有",[2229,120704,120707],{"href":120705,"rel":120706},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[25668],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[57,120710,120712],{"className":119067,"code":120711,"language":119069,"meta":62,"style":62},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[23,120713,120714,120719],{"__ignoreMap":62},[66,120715,120716],{"class":68,"line":69},[66,120717,120718],{"class":758},"# 查询当前系统上snap安装了哪些app\n",[66,120720,120721,120724],{"class":68,"line":80},[66,120722,120723],{"class":3793},"snap",[66,120725,120726],{"class":356}," list\n",[19,120728,120729],{},[3304,120730],{"alt":62,"src":120731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,120733,120734,120735,120738],{},"卸载掉图中所有应用，按照 ",[2141,120736,120737],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[57,120740,120742],{"className":119067,"code":120741,"language":119069,"meta":62,"style":62},"#移除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",[23,120743,120744,120749,120761,120766,120777,120782,120793,120798,120809,120814,120818,120823,120834,120845],{"__ignoreMap":62},[66,120745,120746],{"class":68,"line":69},[66,120747,120748],{"class":758},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[66,120750,120751,120753,120756,120758],{"class":68,"line":80},[66,120752,26380],{"class":3793},[66,120754,120755],{"class":356}," snap",[66,120757,27880],{"class":356},[66,120759,120760],{"class":356}," snap-store\n",[66,120762,120763],{"class":68,"line":112},[66,120764,120765],{"class":758},"#移除firefox浏览器\n",[66,120767,120768,120770,120772,120774],{"class":68,"line":129},[66,120769,26380],{"class":3793},[66,120771,120755],{"class":356},[66,120773,27880],{"class":356},[66,120775,120776],{"class":356}," firefox\n",[66,120778,120779],{"class":68,"line":138},[66,120780,120781],{"class":758},"#移除gnome-42-2204\n",[66,120783,120784,120786,120788,120790],{"class":68,"line":227},[66,120785,26380],{"class":3793},[66,120787,120755],{"class":356},[66,120789,27880],{"class":356},[66,120791,120792],{"class":356}," gnome-42-2204\n",[66,120794,120795],{"class":68,"line":236},[66,120796,120797],{"class":758},"#移除gtk-common-themes\n",[66,120799,120800,120802,120804,120806],{"class":68,"line":241},[66,120801,26380],{"class":3793},[66,120803,120755],{"class":356},[66,120805,27880],{"class":356},[66,120807,120808],{"class":356}," gtk-common-themes\n",[66,120810,120811],{"class":68,"line":372},[66,120812,120813],{"class":758},"#移除其它...\n",[66,120815,120816],{"class":68,"line":377},[66,120817,4498],{"class":76},[66,120819,120820],{"class":68,"line":392},[66,120821,120822],{"class":758},"#移除core22,bare以及snapd\n",[66,120824,120825,120827,120829,120831],{"class":68,"line":405},[66,120826,26380],{"class":3793},[66,120828,120755],{"class":356},[66,120830,27880],{"class":356},[66,120832,120833],{"class":356}," core22\n",[66,120835,120836,120838,120840,120842],{"class":68,"line":418},[66,120837,26380],{"class":3793},[66,120839,120755],{"class":356},[66,120841,27880],{"class":356},[66,120843,120844],{"class":356}," bare\n",[66,120846,120847,120849,120851,120853],{"class":68,"line":430},[66,120848,26380],{"class":3793},[66,120850,120755],{"class":356},[66,120852,27880],{"class":356},[66,120854,120855],{"class":356}," snapd\n",[19,120857,120858],{},[3304,120859],{"alt":62,"src":120860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,120862,120863],{},"输入以下命令查看是否还有snap包",[57,120865,120867],{"className":119067,"code":120866,"language":119069,"meta":62,"style":62},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[23,120868,120869,120875,120879,120883,120887],{"__ignoreMap":62},[66,120870,120871,120873],{"class":68,"line":69},[66,120872,120723],{"class":3793},[66,120874,120726],{"class":356},[66,120876,120877],{"class":68,"line":80},[66,120878,120575],{"class":758},[66,120880,120881],{"class":68,"line":112},[66,120882,120599],{"class":3793},[66,120884,120885],{"class":68,"line":129},[66,120886,120608],{"class":758},[66,120888,120889],{"class":68,"line":138},[66,120890,120642],{"class":3793},[19,120892,120893],{},[3304,120894],{"alt":62,"src":120895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[484,120897,120899],{"id":120898},"_324-移除snap","3.2.4 移除snap",[19,120901,120902,120903,120908],{},"在删除掉",[2229,120904,120907],{"href":120905,"rel":120906},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[25668],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[57,120910,120912],{"className":119067,"code":120911,"language":119069,"meta":62,"style":62}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[23,120913,120914,120919,120932,120937,120948],{"__ignoreMap":62},[66,120915,120916],{"class":68,"line":69},[66,120917,120918],{"class":758}," #使用apt移除掉snap\n",[66,120920,120921,120923,120925,120927,120930],{"class":68,"line":80},[66,120922,26380],{"class":3793},[66,120924,119088],{"class":356},[66,120926,119396],{"class":356},[66,120928,120929],{"class":102}," --purge",[66,120931,120855],{"class":356},[66,120933,120934],{"class":68,"line":112},[66,120935,120936],{"class":758},"#移除snapd的一些目录\n",[66,120938,120939,120941,120943,120945],{"class":68,"line":129},[66,120940,26380],{"class":3793},[66,120942,120324],{"class":356},[66,120944,27127],{"class":102},[66,120946,120947],{"class":356}," \u002Fvar\u002Fcache\u002Fsnapd\n",[66,120949,120950,120952,120954,120956],{"class":68,"line":138},[66,120951,26380],{"class":3793},[66,120953,120324],{"class":356},[66,120955,27127],{"class":102},[66,120957,120958],{"class":356}," ~\u002Fsnap\n",[19,120960,120961,120962,120965],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[23,120963,120964],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[484,120967,120969],{"id":120968},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,120971,120972],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[57,120974,120976],{"className":119067,"code":120975,"language":119069,"meta":62,"style":62},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[23,120977,120978],{"__ignoreMap":62},[66,120979,120980,120982,120984],{"class":68,"line":69},[66,120981,26380],{"class":3793},[66,120983,120354],{"class":356},[66,120985,120986],{"class":356}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,120988,120989,120990,120993],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[23,120991,120992],{},":wq"," 回车",[57,120995,120997],{"className":119067,"code":120996,"language":119069,"meta":62,"style":62},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[23,120998,120999,121006,121020],{"__ignoreMap":62},[66,121000,121001,121004],{"class":68,"line":69},[66,121002,121003],{"class":3793},"Package:",[66,121005,120855],{"class":356},[66,121007,121008,121011,121014,121017],{"class":68,"line":80},[66,121009,121010],{"class":3793},"Pin:",[66,121012,121013],{"class":356}," release",[66,121015,121016],{"class":356}," a=",[66,121018,121019],{"class":102},"*\n",[66,121021,121022,121025],{"class":68,"line":112},[66,121023,121024],{"class":3793},"Pin-Priority:",[66,121026,121027],{"class":102}," -10\n",[19,121029,121030],{},[3304,121031],{"alt":62,"src":121032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[484,121034,121036],{"id":121035},"_326-测试是否成功","3.2.6 测试是否成功",[57,121038,121040],{"className":119067,"code":121039,"language":119069,"meta":62,"style":62},"sudo apt update\nsudo apt install firefox\n",[23,121041,121042,121050],{"__ignoreMap":62},[66,121043,121044,121046,121048],{"class":68,"line":69},[66,121045,26380],{"class":3793},[66,121047,119088],{"class":356},[66,121049,28043],{"class":356},[66,121051,121052,121054,121056,121058],{"class":68,"line":80},[66,121053,26380],{"class":3793},[66,121055,119088],{"class":356},[66,121057,25637],{"class":356},[66,121059,120776],{"class":356},[19,121061,121062],{},"这里提示snapd无法被安装，就证明成功了",[19,121064,121065],{},[3304,121066],{"alt":62,"src":121067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[484,121069,121071],{"id":121070},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,121073,121074],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,121076,121077],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,121079,121080],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[57,121082,121084],{"className":119067,"code":121083,"language":119069,"meta":62,"style":62},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[23,121085,121086,121091,121100,121105,121113],{"__ignoreMap":62},[66,121087,121088],{"class":68,"line":69},[66,121089,121090],{"class":758},"# 添加Mozilla提供的源\n",[66,121092,121093,121095,121097],{"class":68,"line":80},[66,121094,26380],{"class":3793},[66,121096,120615],{"class":356},[66,121098,121099],{"class":356}," ppa:mozillateam\u002Fppa\n",[66,121101,121102],{"class":68,"line":112},[66,121103,121104],{"class":758},"# 安装Firefox\n",[66,121106,121107,121109,121111],{"class":68,"line":129},[66,121108,26380],{"class":3793},[66,121110,119088],{"class":356},[66,121112,28043],{"class":356},[66,121114,121115,121117,121119,121121],{"class":68,"line":138},[66,121116,26380],{"class":3793},[66,121118,119088],{"class":356},[66,121120,25637],{"class":356},[66,121122,120776],{"class":356},[484,121124,121126],{"id":121125},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,121128,121129],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,121131,121132],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[57,121134,121136],{"className":119067,"code":121135,"language":119069,"meta":62,"style":62},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[23,121137,121138,121143,121153,121161,121165],{"__ignoreMap":62},[66,121139,121140],{"class":68,"line":69},[66,121141,121142],{"class":758},"#删掉禁止安装snap的配置文件\n",[66,121144,121145,121147,121149,121151],{"class":68,"line":80},[66,121146,26380],{"class":3793},[66,121148,120324],{"class":356},[66,121150,27127],{"class":102},[66,121152,120986],{"class":356},[66,121154,121155,121157,121159],{"class":68,"line":112},[66,121156,26380],{"class":3793},[66,121158,119088],{"class":356},[66,121160,28043],{"class":356},[66,121162,121163],{"class":68,"line":129},[66,121164,109],{"emptyLinePlaceholder":108},[66,121166,121167,121169,121171],{"class":68,"line":138},[66,121168,26380],{"class":3793},[66,121170,119088],{"class":356},[66,121172,121173],{"class":356}," dist-update\n",[14,121175,121177],{"id":121176},"_33-中文输入法","3.3 中文输入法",[484,121179,121181],{"id":121180},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,121183,121184],{},"官网下载搜狗输入法",[19,121186,121187],{},[3304,121188],{"alt":62,"src":121189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,121191,121192],{},[3304,121193],{"alt":62,"src":121194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,121196,121197],{},"打开终端输入如下",[57,121199,121201],{"className":119067,"code":121200,"language":119069,"meta":62,"style":62},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[23,121202,121203,121210],{"__ignoreMap":62},[66,121204,121205,121207],{"class":68,"line":69},[66,121206,103050],{"class":102},[66,121208,121209],{"class":356}," ~\u002FDownloads\u002F\n",[66,121211,121212,121214,121216,121218],{"class":68,"line":80},[66,121213,26380],{"class":3793},[66,121215,119088],{"class":356},[66,121217,25637],{"class":356},[66,121219,121220],{"class":356}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,121222,121223],{},"打开Fcitx",[19,121225,121226,121229],{},[3304,121227],{"alt":62,"src":121228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[3304,121230],{"alt":62,"src":121231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,121233,121234],{},[3304,121235],{"alt":62,"src":121236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,121238,121239],{},"添加搜狗输入法",[19,121241,121242],{},[3304,121243],{"alt":62,"src":121244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,121246,121247],{},[3304,121248],{"alt":62,"src":121249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,121251,121252],{},"将搜狗输入法设置为唯一输入法",[19,121254,121255],{},[3304,121256],{"alt":62,"src":121257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[484,121259,121261],{"id":121260},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[31,121263,121264],{},[34,121265,121266],{},"卸载旧输入法",[57,121268,121270],{"className":120294,"code":121269,"language":120296,"meta":62,"style":62},"sudo apt purge fcitx* ibus*\n",[23,121271,121272],{"__ignoreMap":62},[66,121273,121274,121276,121278,121280,121283,121285,121288],{"class":68,"line":69},[66,121275,26380],{"class":3793},[66,121277,119088],{"class":356},[66,121279,119429],{"class":356},[66,121281,121282],{"class":356}," fcitx",[66,121284,1208],{"class":102},[66,121286,121287],{"class":356}," ibus",[66,121289,121019],{"class":102},[31,121291,121292],{"start":80},[34,121293,121294],{},"安装Fcitx5",[57,121296,121298],{"className":119067,"code":121297,"language":119069,"meta":62,"style":62},"# 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",[23,121299,121300,121305,121319,121323,121328,121337,121345],{"__ignoreMap":62},[66,121301,121302],{"class":68,"line":69},[66,121303,121304],{"class":758},"# Ubuntu22.04及以上、Debian12及以上\n",[66,121306,121307,121309,121311,121313,121316],{"class":68,"line":80},[66,121308,26380],{"class":3793},[66,121310,119088],{"class":356},[66,121312,25637],{"class":356},[66,121314,121315],{"class":356}," fcitx5",[66,121317,121318],{"class":356}," fcitx5-chinese-addons\n",[66,121320,121321],{"class":68,"line":112},[66,121322,109],{"emptyLinePlaceholder":108},[66,121324,121325],{"class":68,"line":129},[66,121326,121327],{"class":758},"# Ubuntu20.04\n",[66,121329,121330,121332,121334],{"class":68,"line":138},[66,121331,26380],{"class":3793},[66,121333,120615],{"class":356},[66,121335,121336],{"class":356}," ppa:zhsj\u002Ffcitx5\n",[66,121338,121339,121341,121343],{"class":68,"line":227},[66,121340,26380],{"class":3793},[66,121342,119088],{"class":356},[66,121344,28043],{"class":356},[66,121346,121347,121349,121351,121353,121355],{"class":68,"line":236},[66,121348,26380],{"class":3793},[66,121350,119088],{"class":356},[66,121352,25637],{"class":356},[66,121354,121315],{"class":356},[66,121356,121318],{"class":356},[31,121358,121359,121362],{"start":112},[34,121360,121361],{},"Reboot System",[34,121363,121364],{},"启动Fcitx5",[19,121366,121367],{},[3304,121368],{"alt":62,"src":121369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[31,121371,121372],{"start":138},[34,121373,121374],{},"修改一些设置",[19,121376,121377],{},"将Pinyin和Keyboard - English US加入到左边。",[19,121379,121380],{},[3304,121381],{"alt":62,"src":121382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,121384,121385],{},"添加快捷键以便于更好切换中英文",[19,121387,121388],{},[3304,121389],{"alt":62,"src":121390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[31,121392,121393],{"start":227},[34,121394,121395],{},"重启",[57,121397,121399],{"className":120294,"code":121398,"language":120296,"meta":62,"style":62},"sudo shutdown -r now\n",[23,121400,121401],{"__ignoreMap":62},[66,121402,121403,121405,121408,121411],{"class":68,"line":69},[66,121404,26380],{"class":3793},[66,121406,121407],{"class":356}," shutdown",[66,121409,121410],{"class":102}," -r",[66,121412,121413],{"class":356}," now\n",[31,121415,121416],{"start":236},[34,121417,121418],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,121420,121421],{},[2229,121422,121423],{"href":121423,"rel":121424},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[25668],[31,121426,121427],{"start":241},[34,121428,121429],{},"再重启",[57,121431,121432],{"className":120294,"code":121398,"language":120296,"meta":62,"style":62},[23,121433,121434],{"__ignoreMap":62},[66,121435,121436,121438,121440,121442],{"class":68,"line":69},[66,121437,26380],{"class":3793},[66,121439,121407],{"class":356},[66,121441,121410],{"class":102},[66,121443,121413],{"class":356},[14,121445,121447],{"id":121446},"_34-pip3源替换","3.4 pip3源替换",[19,121449,121450],{},"非Debian系发行版需要做。",[19,121452,121453],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,121455,121456],{},"使用dnf的系统也可能不用做。",[57,121458,121460],{"className":119067,"code":121459,"language":119069,"meta":62,"style":62},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[23,121461,121462,121467,121474,121479,121484],{"__ignoreMap":62},[66,121463,121464],{"class":68,"line":69},[66,121465,121466],{"class":758},"# 检查是否已安装 pip\n",[66,121468,121469,121472],{"class":68,"line":80},[66,121470,121471],{"class":3793},"pip3",[66,121473,28094],{"class":102},[66,121475,121476],{"class":68,"line":112},[66,121477,121478],{"class":758},"# 如果未安装，先安装 pip3（见下方）\n",[66,121480,121481],{"class":68,"line":129},[66,121482,121483],{"class":758},"# 配置 pip 使用清华源\n",[66,121485,121486,121488,121491,121494,121497],{"class":68,"line":138},[66,121487,121471],{"class":3793},[66,121489,121490],{"class":356}," config",[66,121492,121493],{"class":356}," set",[66,121495,121496],{"class":356}," global.index-url",[66,121498,121499],{"class":356}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,121501,121502],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,121504,121505],{},[3304,121506],{"alt":62,"src":121507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[57,121509,121511],{"className":119067,"code":121510,"language":119069,"meta":62,"style":62},"#安装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",[23,121512,121513,121518,121526,121537,121541,121546,121565,121569,121574,121586,121590,121595],{"__ignoreMap":62},[66,121514,121515],{"class":68,"line":69},[66,121516,121517],{"class":758},"#安装pip3\n",[66,121519,121520,121522,121524],{"class":68,"line":80},[66,121521,26380],{"class":3793},[66,121523,119088],{"class":356},[66,121525,28043],{"class":356},[66,121527,121528,121530,121532,121534],{"class":68,"line":112},[66,121529,26380],{"class":3793},[66,121531,27877],{"class":356},[66,121533,25637],{"class":356},[66,121535,121536],{"class":356}," python3-pip\n",[66,121538,121539],{"class":68,"line":129},[66,121540,109],{"emptyLinePlaceholder":108},[66,121542,121543],{"class":68,"line":138},[66,121544,121545],{"class":758},"#更新pip3\n",[66,121547,121548,121550,121552,121554,121556,121558,121561,121563],{"class":68,"line":227},[66,121549,102653],{"class":3793},[66,121551,102656],{"class":102},[66,121553,102679],{"class":356},[66,121555,25637],{"class":356},[66,121557,28231],{"class":102},[66,121559,121560],{"class":356}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[66,121562,102684],{"class":102},[66,121564,102687],{"class":356},[66,121566,121567],{"class":68,"line":236},[66,121568,109],{"emptyLinePlaceholder":108},[66,121570,121571],{"class":68,"line":241},[66,121572,121573],{"class":758},"#设置pip源为清华源\n",[66,121575,121576,121578,121580,121582,121584],{"class":68,"line":372},[66,121577,121471],{"class":3793},[66,121579,121490],{"class":356},[66,121581,121493],{"class":356},[66,121583,121496],{"class":356},[66,121585,121499],{"class":356},[66,121587,121588],{"class":68,"line":377},[66,121589,109],{"emptyLinePlaceholder":108},[66,121591,121592],{"class":68,"line":392},[66,121593,121594],{"class":758},"#测试\n",[66,121596,121597,121599,121601,121603,121605,121607],{"class":68,"line":405},[66,121598,102653],{"class":3793},[66,121600,102656],{"class":102},[66,121602,102679],{"class":356},[66,121604,25637],{"class":356},[66,121606,102684],{"class":102},[66,121608,102687],{"class":356},[19,121610,121611],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,121613,121614],{},[3304,121615],{"alt":62,"src":121616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,121618,121620],{"id":121619},"_35-显卡驱动安装","3.5 显卡驱动安装",[484,121622,121624],{"id":121623},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[57,121626,121628],{"className":120294,"code":121627,"language":120296,"meta":62,"style":62},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[23,121629,121630,121635,121650,121655],{"__ignoreMap":62},[66,121631,121632],{"class":68,"line":69},[66,121633,121634],{"class":758},"# 如果是使用apt安装的驱动\n",[66,121636,121637,121639,121641,121643,121645,121648],{"class":68,"line":80},[66,121638,26380],{"class":3793},[66,121640,27877],{"class":356},[66,121642,27880],{"class":356},[66,121644,120929],{"class":102},[66,121646,121647],{"class":356}," nvidia",[66,121649,121019],{"class":102},[66,121651,121652],{"class":68,"line":112},[66,121653,121654],{"class":758},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[66,121656,121657,121659],{"class":68,"line":129},[66,121658,26380],{"class":3793},[66,121660,121661],{"class":356}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[484,121663,121665],{"id":121664},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[23801,121667,121669],{"id":121668},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[24713,121671,121673],{"id":121672},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[57,121675,121677],{"className":120294,"code":121676,"language":120296,"meta":62,"style":62},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[23,121678,121679,121684,121695,121700,121710,121715],{"__ignoreMap":62},[66,121680,121681],{"class":68,"line":69},[66,121682,121683],{"class":758},"# 安装英伟达驱动\n",[66,121685,121686,121688,121690,121692],{"class":68,"line":80},[66,121687,26380],{"class":3793},[66,121689,119088],{"class":356},[66,121691,25637],{"class":356},[66,121693,121694],{"class":356}," nvidia-driver-版本号\n",[66,121696,121697],{"class":68,"line":112},[66,121698,121699],{"class":758},"# 重启 \n",[66,121701,121702,121704,121706,121708],{"class":68,"line":129},[66,121703,26380],{"class":3793},[66,121705,121407],{"class":356},[66,121707,121410],{"class":102},[66,121709,121413],{"class":356},[66,121711,121712],{"class":68,"line":138},[66,121713,121714],{"class":758},"# 检查驱动是否安装成功\n",[66,121716,121717],{"class":68,"line":227},[66,121718,121719],{"class":3793},"nvidia-smi\n",[24713,121721,121723],{"id":121722},"_35212-debian","3.5.2.1.2 Debian",[57,121725,121727],{"className":120294,"code":121726,"language":120296,"meta":62,"style":62},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[23,121728,121729,121733,121747,121751,121761,121765],{"__ignoreMap":62},[66,121730,121731],{"class":68,"line":69},[66,121732,121683],{"class":758},[66,121734,121735,121737,121739,121741,121744],{"class":68,"line":80},[66,121736,26380],{"class":3793},[66,121738,119088],{"class":356},[66,121740,25637],{"class":356},[66,121742,121743],{"class":356}," nvidia-driver",[66,121745,121746],{"class":356}," nvidia-settings\n",[66,121748,121749],{"class":68,"line":112},[66,121750,121699],{"class":758},[66,121752,121753,121755,121757,121759],{"class":68,"line":129},[66,121754,26380],{"class":3793},[66,121756,121407],{"class":356},[66,121758,121410],{"class":102},[66,121760,121413],{"class":356},[66,121762,121763],{"class":68,"line":138},[66,121764,121714],{"class":758},[66,121766,121767],{"class":68,"line":227},[66,121768,121719],{"class":3793},[23801,121770,121772],{"id":121771},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,121774,121775,121776,121779],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[2141,121777,121778],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,121781,121782,121783],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[25356,121784,121785],{},[2141,121786,121787],{},"（也可以不禁用桌面环境，直接进行下一步。）",[57,121789,121791],{"className":120294,"code":121790,"language":120296,"meta":62,"style":62},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[23,121792,121793,121798,121808,121813,121826,121831],{"__ignoreMap":62},[66,121794,121795],{"class":68,"line":69},[66,121796,121797],{"class":758},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[66,121799,121800,121802,121805],{"class":68,"line":80},[66,121801,26380],{"class":3793},[66,121803,121804],{"class":356}," telinit",[66,121806,121807],{"class":102}," 3\n",[66,121809,121810],{"class":68,"line":112},[66,121811,121812],{"class":758},"# ubuntu 使用下方命令\n",[66,121814,121815,121817,121820,121823],{"class":68,"line":129},[66,121816,26380],{"class":3793},[66,121818,121819],{"class":356}," service",[66,121821,121822],{"class":356}," lightdm",[66,121824,121825],{"class":356}," stop\n",[66,121827,121828],{"class":68,"line":138},[66,121829,121830],{"class":758},"# Fedora 使用下方命令\n",[66,121832,121833,121835,121837,121840],{"class":68,"line":227},[66,121834,26380],{"class":3793},[66,121836,28314],{"class":356},[66,121838,121839],{"class":356}," isolate",[66,121841,121842],{"class":356}," multi-user.target\n",[19,121844,121845],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[57,121847,121849],{"className":120294,"code":121848,"language":120296,"meta":62,"style":62},"# 编译环境+准备工作\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",[23,121850,121851,121856,121867,121872,121879,121884,121896,121901,121908,121913],{"__ignoreMap":62},[66,121852,121853],{"class":68,"line":69},[66,121854,121855],{"class":758},"# 编译环境+准备工作\n",[66,121857,121858,121860,121862,121864],{"class":68,"line":80},[66,121859,26380],{"class":3793},[66,121861,119088],{"class":356},[66,121863,25637],{"class":356},[66,121865,121866],{"class":356}," build-essential\n",[66,121868,121869],{"class":68,"line":112},[66,121870,121871],{"class":758},"# 进入到.run目录中\n",[66,121873,121874,121876],{"class":68,"line":129},[66,121875,103050],{"class":102},[66,121877,121878],{"class":356}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[66,121880,121881],{"class":68,"line":138},[66,121882,121883],{"class":758},"# 给驱动文件增加可执行权限：\n",[66,121885,121886,121888,121890,121893],{"class":68,"line":227},[66,121887,26380],{"class":3793},[66,121889,26383],{"class":356},[66,121891,121892],{"class":356}," a+x",[66,121894,121895],{"class":356}," NVIDIA-Linux-x86_64-550.107.02.run\n",[66,121897,121898],{"class":68,"line":236},[66,121899,121900],{"class":758},"# 然后执行安装：\n",[66,121902,121903,121905],{"class":68,"line":241},[66,121904,26380],{"class":3793},[66,121906,121907],{"class":356}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[66,121909,121910],{"class":68,"line":372},[66,121911,121912],{"class":758},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[66,121914,121915,121917,121920],{"class":68,"line":377},[66,121916,26380],{"class":3793},[66,121918,121919],{"class":356}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[66,121921,121922],{"class":102},"  --no-opengl-files\n",[19,121924,121925],{},"安装完毕重启即可",[57,121927,121929],{"className":120294,"code":121928,"language":120296,"meta":62,"style":62},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[23,121930,121931,121935,121941,121945],{"__ignoreMap":62},[66,121932,121933],{"class":68,"line":69},[66,121934,121699],{"class":758},[66,121936,121937,121939],{"class":68,"line":80},[66,121938,26380],{"class":3793},[66,121940,28448],{"class":356},[66,121942,121943],{"class":68,"line":112},[66,121944,121714],{"class":758},[66,121946,121947],{"class":68,"line":129},[66,121948,121719],{"class":3793},[484,121950,121952],{"id":121951},"_353-安装cuda","3.5.3 安装CUDA",[19,121954,121955],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,121957,121958],{},[3304,121959],{"alt":62,"src":121960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[31,121962,121963],{},[34,121964,121965],{},"先查看显卡驱动所支持的最高CUDA版本",[57,121967,121968],{"className":120294,"code":121719,"language":120296,"meta":62,"style":62},[23,121969,121970],{"__ignoreMap":62},[66,121971,121972],{"class":68,"line":69},[66,121973,121719],{"class":3793},[19,121975,121976],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,121978,121979],{},[3304,121980],{"alt":62,"src":121981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[31,121983,121984],{"start":80},[34,121985,121986],{},"下载CUDA并安装CUDA",[19,121988,120073,121989],{},[2229,121990,120076],{"href":120076,"rel":121991},[25668],[19,121993,121994],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,121996,121997],{},[3304,121998],{"alt":62,"src":121999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,122001,122002,122003,122008],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[2229,122004,122007],{"href":122005,"rel":122006},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[25668],"Vinci机器人队单片机教程","）",[19,122010,122011],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,122013,122014],{},[3304,122015],{"alt":62,"src":122016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,122018,122019],{},"将最下方框框里的命令敲入终端",[57,122021,122023],{"className":120294,"code":122022,"language":120296,"meta":62,"style":62},"# 在当前文件夹下创建一个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",[23,122024,122025,122030,122039,122044,122051,122056,122064,122069,122080,122085],{"__ignoreMap":62},[66,122026,122027],{"class":68,"line":69},[66,122028,122029],{"class":758},"# 在当前文件夹下创建一个ttt的子文件夹\n",[66,122031,122032,122034,122036],{"class":68,"line":80},[66,122033,103040],{"class":3793},[66,122035,31016],{"class":102},[66,122037,122038],{"class":356}," .\u002Fttt\n",[66,122040,122041],{"class":68,"line":112},[66,122042,122043],{"class":758},"# 进入ttt文件夹\n",[66,122045,122046,122048],{"class":68,"line":129},[66,122047,103050],{"class":102},[66,122049,122050],{"class":356}," ttt\n",[66,122052,122053],{"class":68,"line":138},[66,122054,122055],{"class":758},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[66,122057,122058,122061],{"class":68,"line":227},[66,122059,122060],{"class":3793},"wget",[66,122062,122063],{"class":356}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[66,122065,122066],{"class":68,"line":236},[66,122067,122068],{"class":758},"# 给予权限\n",[66,122070,122071,122073,122075,122077],{"class":68,"line":241},[66,122072,26380],{"class":3793},[66,122074,26383],{"class":356},[66,122076,121892],{"class":356},[66,122078,122079],{"class":356}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[66,122081,122082],{"class":68,"line":372},[66,122083,122084],{"class":758},"# 运行脚本\n",[66,122086,122087,122089],{"class":68,"line":377},[66,122088,26380],{"class":3793},[66,122090,122079],{"class":356},[19,122092,122093],{},[3304,122094],{"alt":62,"src":122095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,122097,122098],{},"正在安装中：",[19,122100,122101],{},[3304,122102],{"alt":62,"src":122103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,122105,122106],{},"输入accept接受即可",[19,122108,122109],{},[3304,122110],{"alt":62,"src":122111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,122113,122114],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,122116,122117],{},[3304,122118],{"alt":62,"src":122119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,122121,122122],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,122124,122125],{},[3304,122126],{"alt":62,"src":122127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[31,122129,122130],{"start":112},[34,122131,122132],{},"配置环境",[19,122134,122135],{},"根据上方确认一下路径，比如我上面红色框起来的为",[57,122137,122139],{"className":120294,"code":122138,"language":120296,"meta":62,"style":62},"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",[23,122140,122141,122157,122172],{"__ignoreMap":62},[66,122142,122143,122146,122149,122152,122155],{"class":68,"line":69},[66,122144,122145],{"class":3793},"Please",[66,122147,122148],{"class":356}," make",[66,122150,122151],{"class":356}," sure",[66,122153,122154],{"class":356}," that",[66,122156,4498],{"class":76},[66,122158,122159,122161,122164,122167,122170],{"class":68,"line":80},[66,122160,1593],{"class":3793},[66,122162,122163],{"class":356},"   PATH",[66,122165,122166],{"class":356}," includes",[66,122168,122169],{"class":356}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[66,122171,4498],{"class":76},[66,122173,122174,122176,122179,122181,122184,122187,122189,122192,122195,122198,122201,122203,122206,122208],{"class":68,"line":112},[66,122175,1593],{"class":3793},[66,122177,122178],{"class":356},"   LD_LIBRARY_PATH",[66,122180,122166],{"class":356},[66,122182,122183],{"class":356}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[66,122185,122186],{"class":356}," or,",[66,122188,7022],{"class":356},[66,122190,122191],{"class":356}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[66,122193,122194],{"class":356}," to",[66,122196,122197],{"class":356}," \u002Fetc\u002Fld.so.conf",[66,122199,122200],{"class":356}," and",[66,122202,29031],{"class":356},[66,122204,122205],{"class":356}," ldconfig",[66,122207,66383],{"class":356},[66,122209,122210],{"class":356}," root\n",[19,122212,122213],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[57,122215,122217],{"className":120294,"code":122216,"language":120296,"meta":62,"style":62},"which nvcc\n",[23,122218,122219],{"__ignoreMap":62},[66,122220,122221,122224],{"class":68,"line":69},[66,122222,122223],{"class":102},"which",[66,122225,122226],{"class":356}," nvcc\n",[19,122228,122229],{},[3304,122230],{"alt":62,"src":122231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,122233,122234],{},"所以我进行以下操作：",[57,122236,122238],{"className":120294,"code":122237,"language":120296,"meta":62,"style":62},"sudo vim ~\u002F.bashrc\n",[23,122239,122240],{"__ignoreMap":62},[66,122241,122242,122244,122246],{"class":68,"line":69},[66,122243,26380],{"class":3793},[66,122245,120354],{"class":356},[66,122247,122248],{"class":356}," ~\u002F.bashrc\n",[19,122250,122251],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[57,122253,122255],{"className":120294,"code":122254,"language":120296,"meta":62,"style":62},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[23,122256,122257,122269],{"__ignoreMap":62},[66,122258,122259,122261,122264,122266],{"class":68,"line":69},[66,122260,26845],{"class":72},[66,122262,122263],{"class":76}," PATH",[66,122265,99],{"class":72},[66,122267,122268],{"class":76},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[66,122270,122271,122273,122276,122278],{"class":68,"line":80},[66,122272,26845],{"class":72},[66,122274,122275],{"class":76}," LD_LIBRARY_PATH",[66,122277,99],{"class":72},[66,122279,122280],{"class":76},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,122282,122283],{},[3304,122284],{"alt":62,"src":122285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[57,122287,122289],{"className":120294,"code":122288,"language":120296,"meta":62,"style":62},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[23,122290,122291,122296,122302,122307],{"__ignoreMap":62},[66,122292,122293],{"class":68,"line":69},[66,122294,122295],{"class":758},"# 刷新当前终端的环境变量\n",[66,122297,122298,122300],{"class":68,"line":80},[66,122299,102667],{"class":102},[66,122301,122248],{"class":356},[66,122303,122304],{"class":68,"line":112},[66,122305,122306],{"class":758},"# 验证CUDA是否安装成功\n",[66,122308,122309,122312],{"class":68,"line":129},[66,122310,122311],{"class":3793},"nvcc",[66,122313,122314],{"class":102}," -V\n",[19,122316,122317],{},"出现下图这种则安装成功。",[19,122319,122320],{},[3304,122321],{"alt":62,"src":122322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[484,122324,122326],{"id":122325},"_354-安装cudnn","3.5.4 安装cuDNN",[31,122328,122329],{},[34,122330,122331],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,122333,122334,122335,122340],{},"前往 NVIDIA cuDNN 下载页面：",[2229,122336,122339],{"href":122337,"rel":122338},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[25668],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,122342,122343],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,122345,122346],{},[3304,122347],{"alt":62,"src":122348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,122350,122351],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,122353,122354],{},[3304,122355],{"alt":62,"src":122356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,122358,122359],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,122361,122362],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,122364,122365],{},[2141,122366,122367],{},"我这里选择所有Linux X86_64最通用的办法：",[19,122369,122370],{},"下载好的：",[19,122372,122373],{},[3304,122374],{"alt":62,"src":122375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[31,122377,122378],{"start":80},[34,122379,122380],{},"安装cuDNN",[19,122382,122383],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,122385,122386],{},[3304,122387],{"alt":62,"src":122388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,122390,122391],{},"解压文件，并复制到对应位置完成安装",[57,122393,122395],{"className":120294,"code":122394,"language":120296,"meta":62,"style":62},"# 解压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",[23,122396,122397,122402,122413,122418,122425,122430,122446,122460,122465,122476,122485,122489,122505],{"__ignoreMap":62},[66,122398,122399],{"class":68,"line":69},[66,122400,122401],{"class":758},"# 解压cuDNN文件\n",[66,122403,122404,122407,122410],{"class":68,"line":80},[66,122405,122406],{"class":3793},"tar",[66,122408,122409],{"class":102}," -xvf",[66,122411,122412],{"class":356}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[66,122414,122415],{"class":68,"line":112},[66,122416,122417],{"class":758},"# cd进文件夹\n",[66,122419,122420,122422],{"class":68,"line":129},[66,122421,103050],{"class":102},[66,122423,122424],{"class":356}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[66,122426,122427],{"class":68,"line":138},[66,122428,122429],{"class":758},"# 复制cuDNN文件到CUDA目录\n",[66,122431,122432,122434,122436,122439,122441,122444],{"class":68,"line":227},[66,122433,26380],{"class":3793},[66,122435,29662],{"class":356},[66,122437,122438],{"class":356}," include\u002Fcudnn",[66,122440,1208],{"class":102},[66,122442,122443],{"class":356},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[66,122445,4498],{"class":76},[66,122447,122448,122450,122452,122455,122457],{"class":68,"line":236},[66,122449,26380],{"class":3793},[66,122451,29662],{"class":356},[66,122453,122454],{"class":356}," lib\u002Flibcudnn",[66,122456,1208],{"class":102},[66,122458,122459],{"class":356},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[66,122461,122462],{"class":68,"line":241},[66,122463,122464],{"class":758},"# 对比一下有没有缺文件\n",[66,122466,122467,122469,122472,122474],{"class":68,"line":372},[66,122468,28562],{"class":3793},[66,122470,122471],{"class":356}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[66,122473,1208],{"class":102},[66,122475,4498],{"class":76},[66,122477,122478,122480,122483],{"class":68,"line":377},[66,122479,28562],{"class":3793},[66,122481,122482],{"class":356}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[66,122484,121019],{"class":102},[66,122486,122487],{"class":68,"line":392},[66,122488,122068],{"class":758},[66,122490,122491,122493,122495,122498,122500,122502],{"class":68,"line":405},[66,122492,26380],{"class":3793},[66,122494,26383],{"class":356},[66,122496,122497],{"class":356}," a+r",[66,122499,122471],{"class":356},[66,122501,1208],{"class":102},[66,122503,122504],{"class":76},"   \n",[66,122506,122507,122509,122511,122513,122515],{"class":68,"line":418},[66,122508,26380],{"class":3793},[66,122510,26383],{"class":356},[66,122512,122497],{"class":356},[66,122514,122482],{"class":356},[66,122516,121019],{"class":102},[31,122518,122519],{"start":112},[34,122520,122521],{},"检查是否安装成功",[57,122523,122525],{"className":120294,"code":122524,"language":120296,"meta":62,"style":62},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[23,122526,122527,122532],{"__ignoreMap":62},[66,122528,122529],{"class":68,"line":69},[66,122530,122531],{"class":758},"# 检查cuDNN版本命令\n",[66,122533,122534,122537,122540,122542,122544,122547,122550],{"class":68,"line":80},[66,122535,122536],{"class":3793},"cat",[66,122538,122539],{"class":356}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[66,122541,26912],{"class":72},[66,122543,32036],{"class":3793},[66,122545,122546],{"class":356}," CUDNN_MAJOR",[66,122548,122549],{"class":102}," -A",[66,122551,49507],{"class":102},[19,122553,122554],{},"出现下图这样的就是安装成功了",[19,122556,122557],{},[3304,122558],{"alt":62,"src":122559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[31,122561,122562],{"start":129},[34,122563,122564],{},"软链接(一般不需要)",[57,122566,122568],{"className":120294,"code":122567,"language":120296,"meta":62,"style":62},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[23,122569,122570,122575],{"__ignoreMap":62},[66,122571,122572],{"class":68,"line":69},[66,122573,122574],{"class":758},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[66,122576,122577,122579],{"class":68,"line":80},[66,122578,26380],{"class":3793},[66,122580,122581],{"class":356}," ldconfig\n",[19,122583,122584],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[57,122586,122591],{"className":122587,"code":122588,"language":122589,"meta":122590,"style":62},"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",[23,122592,122593,122598,122603,122608,122613,122618,122623],{"__ignoreMap":62},[66,122594,122595],{"class":68,"line":69},[66,122596,122597],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[66,122599,122600],{"class":68,"line":80},[66,122601,122602],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[66,122604,122605],{"class":68,"line":112},[66,122606,122607],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[66,122609,122610],{"class":68,"line":129},[66,122611,122612],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[66,122614,122615],{"class":68,"line":138},[66,122616,122617],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[66,122619,122620],{"class":68,"line":227},[66,122621,122622],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[66,122624,122625],{"class":68,"line":236},[66,122626,122627],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,122629,122630],{},"运行下方的命令",[57,122632,122634],{"className":120294,"code":122633,"language":120296,"meta":62,"style":62},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[23,122635,122636,122641,122648,122653],{"__ignoreMap":62},[66,122637,122638],{"class":68,"line":69},[66,122639,122640],{"class":758},"# cd进入CUDA路径\n",[66,122642,122643,122645],{"class":68,"line":80},[66,122644,103050],{"class":102},[66,122646,122647],{"class":356}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[66,122649,122650],{"class":68,"line":112},[66,122651,122652],{"class":758}," # 查看本路径下的需要软链接的文件名\n",[66,122654,122655],{"class":68,"line":129},[66,122656,122657],{"class":3793}," ls\n",[19,122659,122660],{},[3304,122661],{"alt":62,"src":122662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,122664,122665,122666,20213,122669,20213,122672,122675],{},"如上图，我需要将",[23,122667,122668],{},"libcudnn_xxx_xxxxx.so.8.9.7",[23,122670,122671],{},"libcudnn_xxx_xxxxx.so.8",[23,122673,122674],{},"libcudnn_xxx_xxxxx.so","软链接",[57,122677,122679],{"className":120294,"code":122678,"language":120296,"meta":62,"style":62},"# 创建符号链接。对于每个 .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",[23,122680,122681,122686,122702,122716,122730,122744,122758,122772,122786,122791,122797,122802],{"__ignoreMap":62},[66,122682,122683],{"class":68,"line":69},[66,122684,122685],{"class":758},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[66,122687,122688,122690,122693,122696,122699],{"class":68,"line":80},[66,122689,26380],{"class":3793},[66,122691,122692],{"class":356}," ln",[66,122694,122695],{"class":102}," -sf",[66,122697,122698],{"class":356}," libcudnn_cnn_train.so.8.9.7",[66,122700,122701],{"class":356}," libcudnn_cnn_train.so.8\n",[66,122703,122704,122706,122708,122710,122713],{"class":68,"line":112},[66,122705,26380],{"class":3793},[66,122707,122692],{"class":356},[66,122709,122695],{"class":102},[66,122711,122712],{"class":356}," libcudnn_adv_infer.so.8.9.7",[66,122714,122715],{"class":356}," libcudnn_adv_infer.so.8\n",[66,122717,122718,122720,122722,122724,122727],{"class":68,"line":129},[66,122719,26380],{"class":3793},[66,122721,122692],{"class":356},[66,122723,122695],{"class":102},[66,122725,122726],{"class":356}," libcudnn_adv_train.so.8.9.7",[66,122728,122729],{"class":356}," libcudnn_adv_train.so.8\n",[66,122731,122732,122734,122736,122738,122741],{"class":68,"line":138},[66,122733,26380],{"class":3793},[66,122735,122692],{"class":356},[66,122737,122695],{"class":102},[66,122739,122740],{"class":356}," libcudnn_cnn_infer.so.8.9.7",[66,122742,122743],{"class":356}," libcudnn_cnn_infer.so.8\n",[66,122745,122746,122748,122750,122752,122755],{"class":68,"line":227},[66,122747,26380],{"class":3793},[66,122749,122692],{"class":356},[66,122751,122695],{"class":102},[66,122753,122754],{"class":356}," libcudnn.so.8.9.7",[66,122756,122757],{"class":356}," libcudnn.so.8\n",[66,122759,122760,122762,122764,122766,122769],{"class":68,"line":236},[66,122761,26380],{"class":3793},[66,122763,122692],{"class":356},[66,122765,122695],{"class":102},[66,122767,122768],{"class":356}," libcudnn_ops_infer.so.8.9.7",[66,122770,122771],{"class":356}," libcudnn_ops_infer.so.8\n",[66,122773,122774,122776,122778,122780,122783],{"class":68,"line":241},[66,122775,26380],{"class":3793},[66,122777,122692],{"class":356},[66,122779,122695],{"class":102},[66,122781,122782],{"class":356}," libcudnn_ops_train.so.8.9.7",[66,122784,122785],{"class":356}," libcudnn_ops_train.so.8\n",[66,122787,122788],{"class":68,"line":372},[66,122789,122790],{"class":758},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[66,122792,122793,122795],{"class":68,"line":377},[66,122794,26380],{"class":3793},[66,122796,122581],{"class":356},[66,122798,122799],{"class":68,"line":392},[66,122800,122801],{"class":758},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[66,122803,122804,122806,122809,122812,122814,122817],{"class":68,"line":405},[66,122805,28562],{"class":3793},[66,122807,122808],{"class":102}," -l",[66,122810,122811],{"class":356}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[66,122813,1208],{"class":102},[66,122815,122816],{"class":356},".so",[66,122818,121019],{"class":102},[484,122820,122822],{"id":122821},"_355-常见问题","3.5.5 常见问题",[31,122824,122825],{},[34,122826,122827],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[57,122829,122831],{"className":120294,"code":122830,"language":120296,"meta":62,"style":62},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[23,122832,122833],{"__ignoreMap":62},[66,122834,122835,122837,122839],{"class":68,"line":69},[66,122836,26380],{"class":3793},[66,122838,120354],{"class":356},[66,122840,122841],{"class":356}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,122843,122844],{},"blacklist-nouveau.conf文件内容如下：",[57,122846,122848],{"className":120294,"code":122847,"language":120296,"meta":62,"style":62},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[23,122849,122850,122858,122865,122877,122887],{"__ignoreMap":62},[66,122851,122852,122855],{"class":68,"line":69},[66,122853,122854],{"class":3793},"blacklist",[66,122856,122857],{"class":356}," nouveau\n",[66,122859,122860,122862],{"class":68,"line":80},[66,122861,122854],{"class":3793},[66,122863,122864],{"class":356}," lbm-nouveau\n",[66,122866,122867,122869,122872,122875],{"class":68,"line":112},[66,122868,117701],{"class":3793},[66,122870,122871],{"class":356}," nouveau",[66,122873,122874],{"class":356}," modeset=",[66,122876,4906],{"class":102},[66,122878,122879,122882,122884],{"class":68,"line":129},[66,122880,122881],{"class":102},"alias",[66,122883,122871],{"class":356},[66,122885,122886],{"class":356}," off\n",[66,122888,122889,122891,122894],{"class":68,"line":138},[66,122890,122881],{"class":102},[66,122892,122893],{"class":356}," lbm-nouveau",[66,122895,122886],{"class":356},[19,122897,122898],{},"接着运行下方命令",[57,122900,122902],{"className":120294,"code":122901,"language":120296,"meta":62,"style":62},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[23,122903,122904,122914,122919],{"__ignoreMap":62},[66,122905,122906,122908,122911],{"class":68,"line":69},[66,122907,26380],{"class":3793},[66,122909,122910],{"class":356}," update-initramfs",[66,122912,122913],{"class":102}," -u\n",[66,122915,122916],{"class":68,"line":80},[66,122917,122918],{"class":3793},"或者\n",[66,122920,122921,122923,122926],{"class":68,"line":112},[66,122922,26380],{"class":3793},[66,122924,122925],{"class":356}," dracut",[66,122927,122928],{"class":102}," --force\n",[19,122930,122931],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[57,122933,122935],{"className":120294,"code":122934,"language":120296,"meta":62,"style":62},"lsmod | grep nouveau\n",[23,122936,122937],{"__ignoreMap":62},[66,122938,122939,122942,122944,122946],{"class":68,"line":69},[66,122940,122941],{"class":3793},"lsmod",[66,122943,26912],{"class":72},[66,122945,32036],{"class":3793},[66,122947,122857],{"class":356},[31,122949,122950],{"start":80},[34,122951,122952],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[57,122954,122956],{"className":120294,"code":122955,"language":120296,"meta":62,"style":62},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[23,122957,122958],{"__ignoreMap":62},[66,122959,122960,122962,122964],{"class":68,"line":69},[66,122961,26380],{"class":3793},[66,122963,120354],{"class":356},[66,122965,122966],{"class":356}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,122968,122969],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[57,122971,122973],{"className":120294,"code":122972,"language":120296,"meta":62,"style":62},"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",[23,122974,122975,122983,122991,122999,123006,123014,123024,123032],{"__ignoreMap":62},[66,122976,122977,122980],{"class":68,"line":69},[66,122978,122979],{"class":3793},"Section",[66,122981,122982],{"class":356}," \"OutputClass\"\n",[66,122984,122985,122988],{"class":68,"line":80},[66,122986,122987],{"class":3793},"   Identifier",[66,122989,122990],{"class":356}," \"nvidia\"\n",[66,122992,122993,122996],{"class":68,"line":112},[66,122994,122995],{"class":3793},"   MatchDriver",[66,122997,122998],{"class":356}," \"nvidia-drm\"\n",[66,123000,123001,123004],{"class":68,"line":129},[66,123002,123003],{"class":3793},"   Driver",[66,123005,122990],{"class":356},[66,123007,123008,123011],{"class":68,"line":138},[66,123009,123010],{"class":3793},"   Option",[66,123012,123013],{"class":356}," \"AllowEmptyInitialConfiguration\"\n",[66,123015,123016,123018,123021],{"class":68,"line":227},[66,123017,123010],{"class":3793},[66,123019,123020],{"class":356}," \"PrimaryGPU\"",[66,123022,123023],{"class":356}," \"yes\"\n",[66,123025,123026,123029],{"class":68,"line":236},[66,123027,123028],{"class":3793},"   ModulePath",[66,123030,123031],{"class":356}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[66,123033,123034],{"class":68,"line":241},[66,123035,123036],{"class":3793},"EndSection\n",[31,123038,123039],{"start":112},[34,123040,123041],{},"安装N卡驱动提示错误",[57,123043,123045],{"className":122587,"code":123044,"language":122589,"meta":122590,"style":62},"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",[23,123046,123047],{"__ignoreMap":62},[66,123048,123049],{"class":68,"line":69},[66,123050,123044],{},[31,123052,123053],{},[34,123054,123055],{},"检查当前运行的内核版本：",[19,123057,123058],{},"运行以下命令以查看你当前正在使用的内核版本：",[57,123060,123062],{"className":119067,"code":123061,"language":119069,"meta":62,"style":62},"uname -r\n",[23,123063,123064],{"__ignoreMap":62},[66,123065,123066,123068],{"class":68,"line":69},[66,123067,71983],{"class":3793},[66,123069,123070],{"class":102}," -r\n",[31,123072,123073],{"start":80},[34,123074,123075],{},"安装内核开发文件：",[19,123077,123078,123079,123082],{},"确保你已经安装了与当前内核版本相匹配的 ",[23,123080,123081],{},"kernel-devel"," 包。运行以下命令来安装：",[57,123084,123086],{"className":119067,"code":123085,"language":119069,"meta":62,"style":62},"sudo dnf install kernel-devel-$(uname -r)\n",[23,123087,123088],{"__ignoreMap":62},[66,123089,123090,123092,123094,123096,123099,123101,123103,123105],{"class":68,"line":69},[66,123091,26380],{"class":3793},[66,123093,28116],{"class":356},[66,123095,25637],{"class":356},[66,123097,123098],{"class":356}," kernel-devel-",[66,123100,26902],{"class":76},[66,123102,71983],{"class":3793},[66,123104,121410],{"class":102},[66,123106,313],{"class":76},[19,123108,123109],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[31,123111,123112],{"start":112},[34,123113,123114],{},"安装内核源代码（如果需要）：",[19,123116,123117],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[57,123119,123121],{"className":119067,"code":123120,"language":119069,"meta":62,"style":62},"sudo dnf install kernel-headers kernel-source\n",[23,123122,123123],{"__ignoreMap":62},[66,123124,123125,123127,123129,123131,123134],{"class":68,"line":69},[66,123126,26380],{"class":3793},[66,123128,28116],{"class":356},[66,123130,25637],{"class":356},[66,123132,123133],{"class":356}," kernel-headers",[66,123135,123136],{"class":356}," kernel-source\n",[31,123138,123139],{"start":129},[34,123140,123141],{},"检查安装：",[19,123143,123144,123145,123148],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[23,123146,123147],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[57,123150,123152],{"className":119067,"code":123151,"language":119069,"meta":62,"style":62},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[23,123153,123154],{"__ignoreMap":62},[66,123155,123156,123158],{"class":68,"line":69},[66,123157,28562],{"class":3793},[66,123159,123160],{"class":356}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,123162,123163,123164,123167],{},"如果仍然遇到问题，可以通过 ",[23,123165,123166],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[1903,123169,123170],{},"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":62,"searchDepth":80,"depth":80,"links":123172},[123173,123177,123187,123191,123192],{"id":120270,"depth":80,"text":120271,"children":123174},[123175,123176],{"id":120280,"depth":112,"text":120281},{"id":120290,"depth":112,"text":120291},{"id":120490,"depth":80,"text":120491,"children":123178},[123179,123180,123181,123182,123183,123184,123185,123186],{"id":120494,"depth":112,"text":120495},{"id":120564,"depth":112,"text":120565},{"id":120653,"depth":112,"text":120654},{"id":120898,"depth":112,"text":120899},{"id":120968,"depth":112,"text":120969},{"id":121035,"depth":112,"text":121036},{"id":121070,"depth":112,"text":121071},{"id":121125,"depth":112,"text":121126},{"id":121176,"depth":80,"text":121177,"children":123188},[123189,123190],{"id":121180,"depth":112,"text":121181},{"id":121260,"depth":112,"text":121261},{"id":121446,"depth":80,"text":121447},{"id":121619,"depth":80,"text":121620,"children":123193},[123194,123195,123196,123197,123198],{"id":121623,"depth":112,"text":121624},{"id":121664,"depth":112,"text":121665},{"id":121951,"depth":112,"text":121952},{"id":122325,"depth":112,"text":122326},{"id":122821,"depth":112,"text":122822},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":120262,"description":1926},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":123205,"title":123206,"body":123207,"description":1926,"extension":1927,"meta":123547,"navigation":108,"path":123548,"seo":123549,"stem":123550,"__hash__":123551},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":123208,"toc":123545},[123209,123212,123217,123220,123466,123471,123474,123510,123513,123542],[10,123210,123206],{"id":123211},"_4-命令教程长期积累",[31,123213,123214],{},[34,123215,123216],{},"大多数命令",[19,123218,123219],{},"常用 Linux 命令速查：",[57,123221,123223],{"className":119067,"code":123222,"language":119069,"meta":62,"style":62},"# 文件与目录\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",[23,123224,123225,123230,123237,123244,123252,123259,123266,123274,123282,123289,123296,123304,123308,123313,123320,123328,123335,123339,123344,123351,123359,123367,123375,123383,123387,123392,123400,123407,123414,123422,123430,123434,123439,123448,123457],{"__ignoreMap":62},[66,123226,123227],{"class":68,"line":69},[66,123228,123229],{"class":758},"# 文件与目录\n",[66,123231,123232,123234],{"class":68,"line":80},[66,123233,28562],{"class":3793},[66,123235,123236],{"class":758},"        # 列出目录内容\n",[66,123238,123239,123241],{"class":68,"line":112},[66,123240,103050],{"class":102},[66,123242,123243],{"class":758},"        # 切换目录\n",[66,123245,123246,123249],{"class":68,"line":129},[66,123247,123248],{"class":102},"pwd",[66,123250,123251],{"class":758},"       # 显示当前路径\n",[66,123253,123254,123256],{"class":68,"line":138},[66,123255,103040],{"class":3793},[66,123257,123258],{"class":758},"     # 创建目录\n",[66,123260,123261,123263],{"class":68,"line":227},[66,123262,27124],{"class":3793},[66,123264,123265],{"class":758},"        # 删除文件或目录\n",[66,123267,123268,123271],{"class":68,"line":236},[66,123269,123270],{"class":3793},"cp",[66,123272,123273],{"class":758},"        # 复制文件或目录\n",[66,123275,123276,123279],{"class":68,"line":241},[66,123277,123278],{"class":3793},"mv",[66,123280,123281],{"class":758},"        # 移动\u002F重命名文件或目录\n",[66,123283,123284,123286],{"class":68,"line":372},[66,123285,103057],{"class":3793},[66,123287,123288],{"class":758},"     # 创建空文件\n",[66,123290,123291,123293],{"class":68,"line":377},[66,123292,122536],{"class":3793},[66,123294,123295],{"class":758},"       # 查看文件内容\n",[66,123297,123298,123301],{"class":68,"line":392},[66,123299,123300],{"class":3793},"head\u002Ftail",[66,123302,123303],{"class":758}," # 查看文件头部\u002F尾部\n",[66,123305,123306],{"class":68,"line":405},[66,123307,109],{"emptyLinePlaceholder":108},[66,123309,123310],{"class":68,"line":418},[66,123311,123312],{"class":758},"# 权限管理\n",[66,123314,123315,123317],{"class":68,"line":430},[66,123316,26415],{"class":3793},[66,123318,123319],{"class":758},"     # 修改文件权限\n",[66,123321,123322,123325],{"class":68,"line":438},[66,123323,123324],{"class":3793},"chown",[66,123326,123327],{"class":758},"     # 修改文件所有者\n",[66,123329,123330,123332],{"class":68,"line":465},[66,123331,26380],{"class":3793},[66,123333,123334],{"class":758},"      # 以管理员身份执行\n",[66,123336,123337],{"class":68,"line":1805},[66,123338,109],{"emptyLinePlaceholder":108},[66,123340,123341],{"class":68,"line":1817},[66,123342,123343],{"class":758},"# 系统信息\n",[66,123345,123346,123348],{"class":68,"line":1822},[66,123347,71983],{"class":3793},[66,123349,123350],{"class":758},"     # 系统信息\n",[66,123352,123353,123356],{"class":68,"line":1829},[66,123354,123355],{"class":3793},"df",[66,123357,123358],{"class":758},"        # 磁盘使用情况\n",[66,123360,123361,123364],{"class":68,"line":3529},[66,123362,123363],{"class":3793},"free",[66,123365,123366],{"class":758},"      # 内存使用情况\n",[66,123368,123369,123372],{"class":68,"line":3557},[66,123370,123371],{"class":3793},"top\u002Fhtop",[66,123373,123374],{"class":758},"  # 进程监控\n",[66,123376,123377,123380],{"class":68,"line":3562},[66,123378,123379],{"class":3793},"ps",[66,123381,123382],{"class":758},"        # 查看进程\n",[66,123384,123385],{"class":68,"line":3579},[66,123386,109],{"emptyLinePlaceholder":108},[66,123388,123389],{"class":68,"line":3584},[66,123390,123391],{"class":758},"# 网络\n",[66,123393,123394,123397],{"class":68,"line":3589},[66,123395,123396],{"class":3793},"ping",[66,123398,123399],{"class":758},"      # 测试网络连通性\n",[66,123401,123402,123404],{"class":68,"line":3594},[66,123403,28650],{"class":3793},[66,123405,123406],{"class":758},"      # 发送 HTTP 请求\n",[66,123408,123409,123411],{"class":68,"line":3608},[66,123410,122060],{"class":3793},[66,123412,123413],{"class":758},"      # 下载文件\n",[66,123415,123416,123419],{"class":68,"line":3613},[66,123417,123418],{"class":3793},"ssh",[66,123420,123421],{"class":758},"       # 远程登录\n",[66,123423,123424,123427],{"class":68,"line":4401},[66,123425,123426],{"class":3793},"scp",[66,123428,123429],{"class":758},"       # 远程文件传输\n",[66,123431,123432],{"class":68,"line":4415},[66,123433,109],{"emptyLinePlaceholder":108},[66,123435,123436],{"class":68,"line":4423},[66,123437,123438],{"class":758},"# 包管理（Debian\u002FUbuntu）\n",[66,123440,123441,123443,123445],{"class":68,"line":4428},[66,123442,119139],{"class":3793},[66,123444,119118],{"class":356},[66,123446,123447],{"class":758},"   # 更新软件源\n",[66,123449,123450,123452,123454],{"class":68,"line":4434},[66,123451,119139],{"class":3793},[66,123453,25637],{"class":356},[66,123455,123456],{"class":758},"  # 安装软件包\n",[66,123458,123459,123461,123463],{"class":68,"line":4440},[66,123460,119139],{"class":3793},[66,123462,27880],{"class":356},[66,123464,123465],{"class":758},"   # 卸载软件包\n",[31,123467,123468],{"start":80},[34,123469,123470],{},"KDE Dolphin 以root打开",[19,123472,123473],{},"kde5",[57,123475,123477],{"className":119067,"code":123476,"language":119069,"meta":62,"style":62},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[23,123478,123479],{"__ignoreMap":62},[66,123480,123481,123484,123487,123490,123492,123494,123497,123500,123502,123505,123507],{"class":68,"line":69},[66,123482,123483],{"class":3793},"pkexec",[66,123485,123486],{"class":356}," env",[66,123488,123489],{"class":356}," DISPLAY=",[66,123491,29944],{"class":76},[66,123493,30002],{"class":356},[66,123495,123496],{"class":76},"$XAUTHORITY ",[66,123498,123499],{"class":356},"KDE_SESSION_VERSION=",[66,123501,752],{"class":102},[66,123503,123504],{"class":356}," KDE_FULL_SESSION=",[66,123506,3204],{"class":102},[66,123508,123509],{"class":356}," dolphin\n",[19,123511,123512],{},"kde6",[57,123514,123516],{"className":119067,"code":123515,"language":119069,"meta":62,"style":62},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[23,123517,123518],{"__ignoreMap":62},[66,123519,123520,123522,123524,123526,123528,123530,123532,123534,123536,123538,123540],{"class":68,"line":69},[66,123521,123483],{"class":3793},[66,123523,123486],{"class":356},[66,123525,123489],{"class":356},[66,123527,29944],{"class":76},[66,123529,30002],{"class":356},[66,123531,123496],{"class":76},[66,123533,123499],{"class":356},[66,123535,519],{"class":102},[66,123537,123504],{"class":356},[66,123539,3204],{"class":102},[66,123541,123509],{"class":356},[1903,123543,123544],{},"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":62,"searchDepth":80,"depth":80,"links":123546},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":123206,"description":1926},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":123553,"title":123554,"body":123555,"description":1926,"extension":1927,"meta":123569,"navigation":108,"path":123570,"seo":123571,"stem":123572,"__hash__":123573},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":123556,"toc":123567},[123557,123560],[10,123558,123554],{"id":123559},"_5-各种环境配置",[19,123561,123562],{},[2229,123563,123566],{"href":123564,"rel":123565},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[25668],"电控组环境搭建大全",{"title":62,"searchDepth":80,"depth":80,"links":123568},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":123554,"description":1926},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":123575,"title":123576,"body":123577,"description":1926,"extension":1927,"meta":123925,"navigation":108,"path":123926,"seo":123927,"stem":123928,"__hash__":123929},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":123578,"toc":123917},[123579,123582,123586,123590,123594,123599,123606,123610,123903,123907,123914],[10,123580,123576],{"id":123581},"_6-拓展功能",[14,123583,123585],{"id":123584},"_61-wine","6.1 Wine",[14,123587,123589],{"id":123588},"_62-android","6.2 Android",[484,123591,123593],{"id":123592},"_621-i卡a卡","6.2.1 I卡、A卡",[31,123595,123596],{},[34,123597,123598],{},"Wayland-Waydroid(体验超级好)",[19,123600,123601,123602],{},"Waydroid 官网与安装指南：",[2229,123603,123604],{"href":123604,"rel":123605},"https:\u002F\u002Fwaydro.id\u002F",[25668],[484,123607,123609],{"id":123608},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[31,123611,123612],{},[34,123613,123614,123615,123617,123618,123622,123624,123627,123632,123829],{},"QEMU-KVM虚拟机 + BlissOS-X86",[55498,123616],{},"BlissOS 官网下载：",[2229,123619,123620],{"href":123620,"rel":123621},"https:\u002F\u002Fblissos.org\u002F",[25668],[55498,123623],{},[3304,123625],{"alt":62,"src":123626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[31,123628,123629],{"start":112},[34,123630,123631],{},"比较推荐的配置",[57,123633,123635],{"className":119067,"code":123634,"language":119069,"meta":62,"style":62},"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",[23,123636,123637,123644,123654,123664,123674,123686,123696,123703,123713,123722,123731,123741,123751,123760,123770,123780,123792,123802,123811,123821],{"__ignoreMap":62},[66,123638,123639,123642],{"class":68,"line":69},[66,123640,123641],{"class":3793},"qemu-system-x86_64",[66,123643,26481],{"class":102},[66,123645,123646,123649,123652],{"class":68,"line":80},[66,123647,123648],{"class":102},"        -M",[66,123650,123651],{"class":356}," q35,vmport=off",[66,123653,26481],{"class":102},[66,123655,123656,123659,123662],{"class":68,"line":112},[66,123657,123658],{"class":102},"        -accel",[66,123660,123661],{"class":356}," kvm",[66,123663,26481],{"class":102},[66,123665,123666,123669,123672],{"class":68,"line":129},[66,123667,123668],{"class":102},"        -cpu",[66,123670,123671],{"class":356}," qemu64,+sse3,+sse4.2",[66,123673,26481],{"class":102},[66,123675,123676,123679,123682,123684],{"class":68,"line":138},[66,123677,123678],{"class":102},"        -smp",[66,123680,123681],{"class":356}," 8,cores=",[66,123683,1076],{"class":102},[66,123685,26481],{"class":102},[66,123687,123688,123691,123694],{"class":68,"line":227},[66,123689,123690],{"class":102},"        -m",[66,123692,123693],{"class":356}," 6G",[66,123695,26481],{"class":102},[66,123697,123698,123701],{"class":68,"line":236},[66,123699,123700],{"class":102},"        -usb",[66,123702,26481],{"class":102},[66,123704,123705,123708,123711],{"class":68,"line":241},[66,123706,123707],{"class":102},"        -device",[66,123709,123710],{"class":356}," virtio-tablet",[66,123712,26481],{"class":102},[66,123714,123715,123717,123720],{"class":68,"line":372},[66,123716,123707],{"class":102},[66,123718,123719],{"class":356}," virtio-keyboard",[66,123721,26481],{"class":102},[66,123723,123724,123726,123729],{"class":68,"line":377},[66,123725,123707],{"class":102},[66,123727,123728],{"class":356}," usb-tablet",[66,123730,26481],{"class":102},[66,123732,123733,123736,123739],{"class":68,"line":392},[66,123734,123735],{"class":102},"        -bios",[66,123737,123738],{"class":356}," OVMF-pure-efi64.fd",[66,123740,26481],{"class":102},[66,123742,123743,123746,123749],{"class":68,"line":405},[66,123744,123745],{"class":102},"        -net",[66,123747,123748],{"class":356}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[66,123750,26481],{"class":102},[66,123752,123753,123755,123758],{"class":68,"line":418},[66,123754,123745],{"class":102},[66,123756,123757],{"class":356}," nic,model=virtio",[66,123759,26481],{"class":102},[66,123761,123762,123765,123768],{"class":68,"line":430},[66,123763,123764],{"class":102},"        -audio",[66,123766,123767],{"class":356}," sdl,model=hda",[66,123769,26481],{"class":102},[66,123771,123772,123775,123778],{"class":68,"line":438},[66,123773,123774],{"class":102},"        -display",[66,123776,123777],{"class":356}," sdl,gl=on,show-cursor=on",[66,123779,26481],{"class":102},[66,123781,123782,123784,123787,123790],{"class":68,"line":465},[66,123783,123707],{"class":102},[66,123785,123786],{"class":356}," virtio-vga-gl,xres=1920,yres=",[66,123788,123789],{"class":102},"1080",[66,123791,26481],{"class":102},[66,123793,123794,123797,123800],{"class":68,"line":1805},[66,123795,123796],{"class":102},"        -drive",[66,123798,123799],{"class":356}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[66,123801,26481],{"class":102},[66,123803,123804,123806,123809],{"class":68,"line":1817},[66,123805,123796],{"class":102},[66,123807,123808],{"class":356}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[66,123810,26481],{"class":102},[66,123812,123813,123816,123819],{"class":68,"line":1822},[66,123814,123815],{"class":102},"        -monitor",[66,123817,123818],{"class":356}," stdio",[66,123820,26481],{"class":102},[66,123822,123823,123826],{"class":68,"line":1829},[66,123824,123825],{"class":102},"        -serial",[66,123827,123828],{"class":356}," none\n",[31,123830,123831],{"start":138},[34,123832,123833,123834],{},"常用操作：",[31,123835,123836,123839,123895],{},[34,123837,123838],{},"全屏：Ctrl+Alt+F",[34,123840,123841,123842,123847],{},"adb调试",[31,123843,123844],{},[34,123845,123846],{},"使Linux与Android用ADB连接。",[57,123848,123850],{"className":119067,"code":123849,"language":119069,"meta":62,"style":62},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[23,123851,123852,123857,123868,123873,123885,123890],{"__ignoreMap":62},[66,123853,123854],{"class":68,"line":69},[66,123855,123856],{"class":758},"# 连接安卓\n",[66,123858,123859,123862,123865],{"class":68,"line":80},[66,123860,123861],{"class":3793},"adb",[66,123863,123864],{"class":356}," connect",[66,123866,123867],{"class":102}," 127.0.0.1\n",[66,123869,123870],{"class":68,"line":112},[66,123871,123872],{"class":758},"# 打开shell\n",[66,123874,123875,123877,123879,123882],{"class":68,"line":129},[66,123876,123861],{"class":3793},[66,123878,28684],{"class":102},[66,123880,123881],{"class":356}," 127.0.0.1:5555",[66,123883,123884],{"class":356}," shell\n",[66,123886,123887],{"class":68,"line":138},[66,123888,123889],{"class":758},"# 使用root权限\n",[66,123891,123892],{"class":68,"line":227},[66,123893,123894],{"class":3793},"su\n",[34,123896,123897,123898],{},"中文输入法",[31,123899,123900],{},[34,123901,123902],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,123904,123906],{"id":123905},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,123908,123909,123910],{},"rEFInd 官网与文档：",[2229,123911,123912],{"href":123912,"rel":123913},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[25668],[1903,123915,123916],{},"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":62,"searchDepth":80,"depth":80,"links":123918},[123919,123920,123924],{"id":123584,"depth":80,"text":123585},{"id":123588,"depth":80,"text":123589,"children":123921},[123922,123923],{"id":123592,"depth":112,"text":123593},{"id":123608,"depth":112,"text":123609},{"id":123905,"depth":80,"text":123906},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":123576,"description":1926},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":123931,"title":123932,"body":123933,"description":1926,"extension":1927,"meta":127231,"navigation":108,"path":127232,"seo":127233,"stem":127234,"__hash__":127235},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":123934,"toc":127205},[123935,123938,123942,123945,123952,124202,124205,124277,124280,124284,124288,124293,124296,124299,124302,124307,124310,124313,124316,124321,124324,124329,124332,124335,124340,124343,124348,124351,124355,124359,124362,124367,124370,124384,124387,124390,124399,124402,124411,124414,124417,124426,124429,124438,124441,124444,124453,124456,124459,124474,124477,124480,124489,124494,124497,124500,124509,124512,124521,124524,124533,124536,124545,124550,124553,124561,124566,124569,124578,124581,124589,124594,124597,124606,124609,124612,124616,124619,124624,124627,124632,124646,124651,124656,124667,124672,124678,124683,124698,124703,124706,124711,124716,124721,124729,124734,124741,124746,124757,124762,124765,124769,124772,124775,124780,124783,124802,124807,124810,124819,124824,124827,124849,124852,124882,124885,124890,124893,124907,124912,124931,124934,124937,124942,124954,124959,124964,124967,124972,124975,124990,124993,124998,125003,125007,125012,125052,125055,125059,125064,125070,125075,125078,125085,125090,125097,125100,125103,125110,125124,125127,125187,125190,125204,125216,125219,125222,125225,125289,125292,125295,125298,125318,125321,125326,125333,125337,125340,125344,125349,125354,125358,125361,125364,125406,125411,125414,125436,125451,125453,125458,125470,125530,125532,125534,125588,125590,125592,125598,125603,125606,125611,125615,125618,125680,125685,125688,125690,125694,125706,125788,125790,125792,125846,125852,125854,125858,125863,125865,125870,125874,125894,125929,125933,125936,125939,125942,125949,125952,125964,125967,125982,125985,126004,126052,126055,126072,126075,126089,126094,126097,126106,126121,126133,126171,126176,126185,126190,126195,126221,126230,126234,126238,126243,126246,126250,126254,126259,126262,126267,126270,126275,126278,126283,126286,126290,126295,126298,126303,126306,126310,126315,126318,126323,126326,126331,126334,126338,126343,126346,126351,126354,126359,126362,126366,126371,126374,126379,126382,126387,126390,126395,126398,126403,126406,126411,126414,126418,126423,126426,126431,126438,126442,126447,126450,126455,126458,126462,126467,126470,126473,126476,126479,126482,126486,126489,126499,126504,126509,126531,126536,126541,126548,126552,126557,126560,126563,126568,126571,126574,126577,126580,126583,126586,126589,126592,126595,126598,126601,126604,126609,126614,126619,126624,126629,126634,126639,126642,126646,126649,126653,126658,126663,126668,126673,126677,126683,126691,126696,126699,126704,126719,126722,126727,126761,126776,126779,126834,126860,126872,126875,126884,126887,126902,126907,126910,126916,126921,126924,126929,126932,126937,126942,126949,126952,126967,126970,127005,127010,127018,127056,127059,127062,127067,127070,127075,127086,127120,127125,127128,127137,127142,127148,127151,127156,127165,127170,127173,127176,127181,127189,127192,127197,127202],[10,123936,123932],{"id":123937},"_7-其他操作",[14,123939,123941],{"id":123940},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,123943,123944],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,123946,123947,123948,123951],{},"进入工控机的硬盘目录，进入",[23,123949,123950],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[57,123953,123957],{"className":123954,"code":123955,"language":123956,"meta":62,"style":62},"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",[23,123958,123959,123967,123978,123985,123992,124004,124011,124023,124034,124045,124052,124059,124066,124078,124090,124097,124109,124121,124128,124140,124152,124164,124175,124182,124193],{"__ignoreMap":62},[66,123960,123961,123964],{"class":68,"line":69},[66,123962,123963],{"class":53084},"network",[66,123965,123966],{"class":76},": \n",[66,123968,123969,123972,123974,123976],{"class":68,"line":80},[66,123970,123971],{"class":53084},"  version",[66,123973,53221],{"class":76},[66,123975,795],{"class":102},[66,123977,4498],{"class":76},[66,123979,123980,123983],{"class":68,"line":112},[66,123981,123982],{"class":53084},"  wifis",[66,123984,123966],{"class":76},[66,123986,123987,123990],{"class":68,"line":129},[66,123988,123989],{"class":53084},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[66,123991,123966],{"class":76},[66,123993,123994,123997,123999,124002],{"class":68,"line":138},[66,123995,123996],{"class":53084},"      renderer",[66,123998,53221],{"class":76},[66,124000,124001],{"class":356},"NetworkManager",[66,124003,4498],{"class":76},[66,124005,124006,124009],{"class":68,"line":227},[66,124007,124008],{"class":53084},"      match",[66,124010,123966],{"class":76},[66,124012,124013,124016,124018,124021],{"class":68,"line":236},[66,124014,124015],{"class":53084},"        name",[66,124017,53221],{"class":76},[66,124019,124020],{"class":356},"\"wlan0\"",[66,124022,4498],{"class":76},[66,124024,124025,124028,124030,124032],{"class":68,"line":241},[66,124026,124027],{"class":53084},"      dhcp4",[66,124029,53221],{"class":76},[66,124031,3204],{"class":102},[66,124033,4498],{"class":76},[66,124035,124036,124039,124041,124043],{"class":68,"line":372},[66,124037,124038],{"class":53084},"      dhcp6",[66,124040,53221],{"class":76},[66,124042,3204],{"class":102},[66,124044,4498],{"class":76},[66,124046,124047,124050],{"class":68,"line":377},[66,124048,124049],{"class":53084},"      access-points",[66,124051,123966],{"class":76},[66,124053,124054,124057],{"class":68,"line":392},[66,124055,124056],{"class":356},"        \"EMIS_Vinci_Robocon_5G\"",[66,124058,123966],{"class":76},[66,124060,124061,124064],{"class":68,"line":405},[66,124062,124063],{"class":53084},"          auth",[66,124065,123966],{"class":76},[66,124067,124068,124071,124073,124076],{"class":68,"line":418},[66,124069,124070],{"class":53084},"            key-management",[66,124072,53221],{"class":76},[66,124074,124075],{"class":356},"\"psk\"",[66,124077,4498],{"class":76},[66,124079,124080,124083,124085,124088],{"class":68,"line":430},[66,124081,124082],{"class":53084},"            password",[66,124084,53221],{"class":76},[66,124086,124087],{"class":356},"\"vinci666\"",[66,124089,4498],{"class":76},[66,124091,124092,124095],{"class":68,"line":438},[66,124093,124094],{"class":53084},"          networkmanager",[66,124096,123966],{"class":76},[66,124098,124099,124102,124104,124107],{"class":68,"line":465},[66,124100,124101],{"class":53084},"            uuid",[66,124103,53221],{"class":76},[66,124105,124106],{"class":356},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[66,124108,4498],{"class":76},[66,124110,124111,124114,124116,124119],{"class":68,"line":1805},[66,124112,124113],{"class":53084},"            name",[66,124115,53221],{"class":76},[66,124117,124118],{"class":356},"\"EMIS_Vinci_Robocon_5G\"",[66,124120,4498],{"class":76},[66,124122,124123,124126],{"class":68,"line":1817},[66,124124,124125],{"class":53084},"            passthrough",[66,124127,123966],{"class":76},[66,124129,124130,124133,124135,124138],{"class":68,"line":1822},[66,124131,124132],{"class":53084},"              wifi-security.auth-alg",[66,124134,53221],{"class":76},[66,124136,124137],{"class":356},"\"open\"",[66,124139,4498],{"class":76},[66,124141,124142,124145,124147,124150],{"class":68,"line":1829},[66,124143,124144],{"class":53084},"              ipv6.addr-gen-mode",[66,124146,53221],{"class":76},[66,124148,124149],{"class":356},"\"default\"",[66,124151,4498],{"class":76},[66,124153,124154,124157,124159,124162],{"class":68,"line":3529},[66,124155,124156],{"class":53084},"              ipv6.ip6-privacy",[66,124158,53221],{"class":76},[66,124160,124161],{"class":356},"\"-1\"",[66,124163,4498],{"class":76},[66,124165,124166,124169,124171,124173],{"class":68,"line":3557},[66,124167,124168],{"class":53084},"              proxy._",[66,124170,53221],{"class":76},[66,124172,9463],{"class":356},[66,124174,4498],{"class":76},[66,124176,124177,124180],{"class":68,"line":3562},[66,124178,124179],{"class":53084},"      networkmanager",[66,124181,123966],{"class":76},[66,124183,124184,124187,124189,124191],{"class":68,"line":3579},[66,124185,124186],{"class":53084},"        uuid",[66,124188,53221],{"class":76},[66,124190,124106],{"class":356},[66,124192,4498],{"class":76},[66,124194,124195,124197,124199],{"class":68,"line":3584},[66,124196,124015],{"class":53084},[66,124198,53221],{"class":76},[66,124200,124201],{"class":356},"\"EMIS_Vinci_Robocon_5G\"\n",[19,124203,124204],{},"将其改为新wifi的名和密码：",[57,124206,124208],{"className":123954,"code":124207,"language":123956,"meta":62,"style":62},"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",[23,124209,124210,124216,124225,124231,124238,124247,124255,124261,124267],{"__ignoreMap":62},[66,124211,124212,124214],{"class":68,"line":69},[66,124213,123963],{"class":53084},[66,124215,126],{"class":76},[66,124217,124218,124220,124222],{"class":68,"line":80},[66,124219,123971],{"class":53084},[66,124221,53221],{"class":76},[66,124223,124224],{"class":102},"2\n",[66,124226,124227,124229],{"class":68,"line":112},[66,124228,123982],{"class":53084},[66,124230,126],{"class":76},[66,124232,124233,124236],{"class":68,"line":129},[66,124234,124235],{"class":53084},"    wlan0",[66,124237,126],{"class":76},[66,124239,124240,124242,124244],{"class":68,"line":138},[66,124241,124027],{"class":53084},[66,124243,53221],{"class":76},[66,124245,124246],{"class":102},"true\n",[66,124248,124249,124251,124253],{"class":68,"line":227},[66,124250,124038],{"class":53084},[66,124252,53221],{"class":76},[66,124254,124246],{"class":102},[66,124256,124257,124259],{"class":68,"line":236},[66,124258,124049],{"class":53084},[66,124260,126],{"class":76},[66,124262,124263,124265],{"class":68,"line":241},[66,124264,124056],{"class":356},[66,124266,126],{"class":76},[66,124268,124269,124272,124274],{"class":68,"line":372},[66,124270,124271],{"class":53084},"          password",[66,124273,53221],{"class":76},[66,124275,124276],{"class":356},"\"vinci666\"\n",[19,124278,124279],{},"工控机开机即可连上网。",[14,124281,124283],{"id":124282},"_72-ssh远程开发","7.2 SSH远程开发",[484,124285,124287],{"id":124286},"_721-环境准备","7.2.1 环境准备",[19,124289,124290],{},[2141,124291,124292],{},"1.硬件准备",[19,124294,124295],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,124297,124298],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,124300,124301],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,124303,124304],{},[2141,124305,124306],{},"2.设置固定IP",[19,124308,124309],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,124311,124312],{},"1.进入设置界面",[19,124314,124315],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,124317,124318],{},[3304,124319],{"alt":62,"src":124320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,124322,124323],{},"2.配置所连接的网络",[19,124325,124326],{},[3304,124327],{"alt":62,"src":124328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,124330,124331],{},"3.设置固定IP",[19,124333,124334],{},"查看当前IP地址。",[19,124336,124337],{},[3304,124338],{"alt":62,"src":124339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,124341,124342],{},"设置固定IP。",[19,124344,124345],{},[3304,124346],{"alt":62,"src":124347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,124349,124350],{},"至此，IP配置完毕。",[484,124352,124354],{"id":124353},"_722-环境搭建","7.2.2 环境搭建",[19,124356,124357],{},[2141,124358,27555],{},[19,124360,124361],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,124363,124364],{},[2141,124365,124366],{},"实现",[19,124368,124369],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[31,124371,124372,124375,124378,124381],{},[34,124373,124374],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[34,124376,124377],{},"远程主机启动SSH服务；",[34,124379,124380],{},"本地主机登陆远程主机；",[34,124382,124383],{},"实现数据传输。",[19,124385,124386],{},"1.安装SSH客户端与服务端",[19,124388,124389],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[57,124391,124393],{"className":122587,"code":124392,"language":122589,"meta":122590,"style":62}," sudo apt install openssh-server\n",[23,124394,124395],{"__ignoreMap":62},[66,124396,124397],{"class":68,"line":69},[66,124398,124392],{},[19,124400,124401],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[57,124403,124405],{"className":122587,"code":124404,"language":122589,"meta":122590,"style":62},"sudo apt install openssh-client\n",[23,124406,124407],{"__ignoreMap":62},[66,124408,124409],{"class":68,"line":69},[66,124410,124404],{},[19,124412,124413],{},"2.远程主机启动SSH服务",[19,124415,124416],{},"远程主机启动 ssh 服务命令如下：",[57,124418,124420],{"className":122587,"code":124419,"language":122589,"meta":122590,"style":62},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[23,124421,124422],{"__ignoreMap":62},[66,124423,124424],{"class":68,"line":69},[66,124425,124419],{},[19,124427,124428],{},"启动后可使用如下命令查看服务是否正常运行：",[57,124430,124432],{"className":122587,"code":124431,"language":122589,"meta":122590,"style":62},"ps -e | grep ssh\n",[23,124433,124434],{"__ignoreMap":62},[66,124435,124436],{"class":68,"line":69},[66,124437,124431],{},[19,124439,124440],{},"如果启动成功，会包含 sshd 程序。",[19,124442,124443],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[57,124445,124447],{"className":122587,"code":124446,"language":122589,"meta":122590,"style":62},"sudo systemctl enable ssh\n",[23,124448,124449],{"__ignoreMap":62},[66,124450,124451],{"class":68,"line":69},[66,124452,124446],{},[19,124454,124455],{},"3.本地远程登录",[19,124457,124458],{},"登录远程主机可以调用如下命令:",[57,124460,124462],{"className":119067,"code":124461,"language":119069,"meta":62,"style":62},"ssh -X 用户名@ip地址\n",[23,124463,124464],{"__ignoreMap":62},[66,124465,124466,124468,124471],{"class":68,"line":69},[66,124467,123418],{"class":3793},[66,124469,124470],{"class":102}," -X",[66,124472,124473],{"class":356}," 用户名@ip地址\n",[19,124475,124476],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,124478,124479],{},"如果退出，可以调用exit命令：",[57,124481,124483],{"className":122587,"code":124482,"language":122589,"meta":122590,"style":62},"exit\n",[23,124484,124485],{"__ignoreMap":62},[66,124486,124487],{"class":68,"line":69},[66,124488,124482],{},[19,124490,124491],{},[2141,124492,124493],{},"4.实现数据传输",[19,124495,124496],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,124498,124499],{},"上传文件指令格式如下：",[57,124501,124503],{"className":122587,"code":124502,"language":122589,"meta":122590,"style":62},"scp 本地文件路径 账号@ip:路径\n",[23,124504,124505],{"__ignoreMap":62},[66,124506,124507],{"class":68,"line":69},[66,124508,124502],{},[19,124510,124511],{},"上传文件夹指令格式如下：",[57,124513,124515],{"className":122587,"code":124514,"language":122589,"meta":122590,"style":62},"scp -r 本地文件夹路径 账号@ip:路径\n",[23,124516,124517],{"__ignoreMap":62},[66,124518,124519],{"class":68,"line":69},[66,124520,124514],{},[19,124522,124523],{},"下载文件指令格式如下：",[57,124525,124527],{"className":122587,"code":124526,"language":122589,"meta":122590,"style":62},"scp 账号@ip:路径 本地文件夹路径\n",[23,124528,124529],{"__ignoreMap":62},[66,124530,124531],{"class":68,"line":69},[66,124532,124526],{},[19,124534,124535],{},"下载文件夹指令格式如下：",[57,124537,124539],{"className":122587,"code":124538,"language":122589,"meta":122590,"style":62},"scp -r 账号@ip:路径 本地文件夹路径\n",[23,124540,124541],{"__ignoreMap":62},[66,124542,124543],{"class":68,"line":69},[66,124544,124538],{},[19,124546,124547],{},[2141,124548,124549],{},"优化",[19,124551,124552],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[31,124554,124555,124558],{},[34,124556,124557],{},"本地生成密钥对；",[34,124559,124560],{},"将公钥上传至远程主机。",[19,124562,124563],{},[2141,124564,124565],{},"1.生成密钥对",[19,124567,124568],{},"本地客户端生成公私钥：（一路回车默认即可）",[57,124570,124572],{"className":122587,"code":124571,"language":122589,"meta":122590,"style":62},"ssh-keygen\n",[23,124573,124574],{"__ignoreMap":62},[66,124575,124576],{"class":68,"line":69},[66,124577,124571],{},[19,124579,124580],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[31,124582,124583,124586],{},[34,124584,124585],{},"id_rsa （私钥）；",[34,124587,124588],{},"id_rsa.pub (公钥)。",[19,124590,124591],{},[2141,124592,124593],{},"2.公钥上传",[19,124595,124596],{},"上传指令如下：",[57,124598,124600],{"className":122587,"code":124599,"language":122589,"meta":122590,"style":62},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[23,124601,124602],{"__ignoreMap":62},[66,124603,124604],{"class":68,"line":69},[66,124605,124599],{},[19,124607,124608],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,124610,124611],{},"以后再远程登录就无需录入密码了。",[484,124613,124615],{"id":124614},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,124617,124618],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,124620,124621],{},[2141,124622,124623],{},"1.准备工作",[19,124625,124626],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,124628,124629],{},[2141,124630,124631],{},"2.为VScode安装远程开发插件",[19,124633,124634,124635,124638,124639,124642,124643,158],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[23,124636,124637],{},"扩展：商店","的搜索栏输入",[23,124640,124641],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[23,124644,124645],{},"安装",[19,124647,124648],{},[3304,124649],{"alt":62,"src":124650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,124652,124653],{},[2141,124654,124655],{},"3.配置远程连接",[19,124657,124658,124659,124662,124663,124666],{},"步骤1：使用快捷键",[23,124660,124661],{},"ctrl + shift + p","打开命令输入窗口，并输入",[23,124664,124665],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,124668,124669],{},[3304,124670],{"alt":62,"src":124671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,124673,124674,124675,158],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[23,124676,124677],{},"Add New SSH Host",[19,124679,124680],{},[3304,124681],{"alt":62,"src":124682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,124684,124685,124686,124689,124690,124693,124694,124697],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[23,124687,124688],{},"ssh +X ubuntu@192.168.43.164","，其中，",[23,124691,124692],{},"ubuntu","需要替换为你的登录用户名，",[23,124695,124696],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,124699,124700],{},[3304,124701],{"alt":62,"src":124702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,124704,124705],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,124707,124708],{},[3304,124709],{"alt":62,"src":124710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,124712,124713],{},[3304,124714],{"alt":62,"src":124715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,124717,124718],{},[2141,124719,124720],{},"4.使用",[19,124722,124723,124724,124662,124726,124728],{},"步骤1：继续使用快捷键",[23,124725,124661],{},[23,124727,124665],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,124730,124731],{},[3304,124732],{"alt":62,"src":124733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,124735,124736,124737,124740],{},"或者，也可以点击侧边栏的",[23,124738,124739],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,124742,124743],{},[3304,124744],{"alt":62,"src":124745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,124747,124748,124749,124752,124753,124756],{},"步骤2：选择菜单栏的",[23,124750,124751],{},"文件","下的",[23,124754,124755],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,124758,124759],{},[3304,124760],{"alt":62,"src":124761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,124763,124764],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,124766,124768],{"id":124767},"_73-远程桌面","7.3 远程桌面",[19,124770,124771],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,124773,124774],{},"我们选择使用VNC来看。",[31,124776,124777],{},[34,124778,124779],{},"安装VNC服务器：",[19,124781,124782],{},"这里以TigerVNC为例进行安装：",[57,124784,124786],{"className":119067,"code":124785,"language":119069,"meta":62,"style":62},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[23,124787,124788],{"__ignoreMap":62},[66,124789,124790,124792,124794,124796,124799],{"class":68,"line":69},[66,124791,26380],{"class":3793},[66,124793,119088],{"class":356},[66,124795,25637],{"class":356},[66,124797,124798],{"class":356}," tigervnc-standalone-server",[66,124800,124801],{"class":356}," tigervnc-common\n",[31,124803,124804],{"start":80},[34,124805,124806],{},"设置VNC密码：",[19,124808,124809],{},"为VNC用户设置密码，运行以下命令：",[57,124811,124813],{"className":119067,"code":124812,"language":119069,"meta":62,"style":62},"vncpasswd\n",[23,124814,124815],{"__ignoreMap":62},[66,124816,124817],{"class":68,"line":69},[66,124818,124812],{"class":3793},[31,124820,124821],{"start":112},[34,124822,124823],{},"配置VNC启动脚本:",[19,124825,124826],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[57,124828,124830],{"className":119067,"code":124829,"language":119069,"meta":62,"style":62},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[23,124831,124832,124841],{"__ignoreMap":62},[66,124833,124834,124836,124838],{"class":68,"line":69},[66,124835,103040],{"class":3793},[66,124837,31016],{"class":102},[66,124839,124840],{"class":356}," ~\u002F.vnc\n",[66,124842,124843,124846],{"class":68,"line":80},[66,124844,124845],{"class":3793},"nano",[66,124847,124848],{"class":356}," ~\u002F.vnc\u002Fxstartup\n",[19,124850,124851],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[57,124853,124855],{"className":119067,"code":124854,"language":119069,"meta":62,"style":62},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[23,124856,124857,124862,124870,124877],{"__ignoreMap":62},[66,124858,124859],{"class":68,"line":69},[66,124860,124861],{"class":758},"#!\u002Fbin\u002Fsh\n",[66,124863,124864,124867],{"class":68,"line":80},[66,124865,124866],{"class":102},"unset",[66,124868,124869],{"class":356}," SESSION_MANAGER\n",[66,124871,124872,124874],{"class":68,"line":112},[66,124873,124866],{"class":102},[66,124875,124876],{"class":356}," DBUS_SESSION_BUS_ADDRESS\n",[66,124878,124879],{"class":68,"line":129},[66,124880,124881],{"class":3793},"gnome-session\n",[19,124883,124884],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[31,124886,124887],{"start":129},[34,124888,124889],{},"给予执行权限：",[19,124891,124892],{},"为xstartup文件设置执行权限：",[57,124894,124896],{"className":119067,"code":124895,"language":119069,"meta":62,"style":62},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[23,124897,124898],{"__ignoreMap":62},[66,124899,124900,124902,124905],{"class":68,"line":69},[66,124901,26415],{"class":3793},[66,124903,124904],{"class":356}," +x",[66,124906,124848],{"class":356},[31,124908,124909],{"start":138},[34,124910,124911],{},"启动VNC服务器：",[57,124913,124915],{"className":119067,"code":124914,"language":119069,"meta":62,"style":62},"vncserver -geometry 1920x1080 -localhost=0\n",[23,124916,124917],{"__ignoreMap":62},[66,124918,124919,124922,124925,124928],{"class":68,"line":69},[66,124920,124921],{"class":3793},"vncserver",[66,124923,124924],{"class":102}," -geometry",[66,124926,124927],{"class":356}," 1920x1080",[66,124929,124930],{"class":102}," -localhost=0\n",[19,124932,124933],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,124935,124936],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[31,124938,124939],{"start":227},[34,124940,124941],{},"查看已开启的VNC服务器：",[57,124943,124945],{"className":119067,"code":124944,"language":119069,"meta":62,"style":62},"vncserver -list\n",[23,124946,124947],{"__ignoreMap":62},[66,124948,124949,124951],{"class":68,"line":69},[66,124950,124921],{"class":3793},[66,124952,124953],{"class":102}," -list\n",[19,124955,124956],{},[3304,124957],{"alt":62,"src":124958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[31,124960,124961],{"start":236},[34,124962,124963],{},"连接到VNC服务器：",[19,124965,124966],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[31,124968,124969],{"start":241},[34,124970,124971],{},"停止VNC服务器：",[19,124973,124974],{},"如果需要停止VNC服务器，可以使用以下命令：",[57,124976,124978],{"className":119067,"code":124977,"language":119069,"meta":62,"style":62},"vncserver -kill :1\n",[23,124979,124980],{"__ignoreMap":62},[66,124981,124982,124984,124987],{"class":68,"line":69},[66,124983,124921],{"class":3793},[66,124985,124986],{"class":102}," -kill",[66,124988,124989],{"class":356}," :1\n",[19,124991,124992],{},"将:1替换为你实际使用的显示编号。",[19,124994,124995],{},[3304,124996],{"alt":62,"src":124997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,124999,125000],{},[3304,125001],{"alt":62,"src":125002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,125004,125006],{"id":125005},"_74-usb端口设置","7.4 USB端口设置",[19,125008,125009],{},[2141,125010,125011],{},"首先先配置好权限",[57,125013,125015],{"className":119067,"code":125014,"language":119069,"meta":62,"style":62},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[23,125016,125017,125022,125035,125042,125047],{"__ignoreMap":62},[66,125018,125019],{"class":68,"line":69},[66,125020,125021],{"class":758},"# 将用户权限提高\n",[66,125023,125024,125026,125028,125030,125033],{"class":68,"line":80},[66,125025,26380],{"class":3793},[66,125027,28375],{"class":356},[66,125029,28378],{"class":102},[66,125031,125032],{"class":356}," dialout",[66,125034,28383],{"class":76},[66,125036,125037,125039],{"class":68,"line":112},[66,125038,28402],{"class":3793},[66,125040,125041],{"class":356}," dialout\n",[66,125043,125044],{"class":68,"line":129},[66,125045,125046],{"class":758},"# 查看下面命令是否输出dialout（若输出才正常）\n",[66,125048,125049],{"class":68,"line":138},[66,125050,125051],{"class":3793},"groups\n",[19,125053,125054],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[484,125056,125058],{"id":125057},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,125060,125061,125063],{},[2141,125062,1472],{}," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,125065,125066,125069],{},[2141,125067,125068],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,125071,125072],{},[2141,125073,125074],{},"流程如下：",[19,125076,125077],{},"（1）.查找设备idVendor和idProduct",[19,125079,125080,125081,125084],{},"接入两个USB设备，在终端调用指令",[23,125082,125083],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,125086,125087],{},[3304,125088],{"alt":62,"src":125089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,125091,125092,125093,125096],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[23,125094,125095],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,125098,125099],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,125101,125102],{},"（2）.编写映射规则",[19,125104,125105,125106,125109],{},"在",[23,125107,125108],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[57,125111,125113],{"className":119067,"code":125112,"language":119069,"meta":62,"style":62},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[23,125114,125115],{"__ignoreMap":62},[66,125116,125117,125119,125121],{"class":68,"line":69},[66,125118,26380],{"class":3793},[66,125120,120354],{"class":356},[66,125122,125123],{"class":356}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,125125,125126],{},"输入如下内容：",[57,125128,125130],{"className":119067,"code":125129,"language":119069,"meta":62,"style":62},"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",[23,125131,125132,125162],{"__ignoreMap":62},[66,125133,125134,125137,125139,125142,125145,125148,125151,125153,125156,125159],{"class":68,"line":69},[66,125135,125136],{"class":76},"KERNEL",[66,125138,99],{"class":72},[66,125140,125141],{"class":356},"=\"ttyUSB*\",",[66,125143,125144],{"class":3793}," ATTRS",[66,125146,125147],{"class":356},"{idVendor}==",[66,125149,125150],{"class":3793},"\"10c4\"",[66,125152,2362],{"class":3793},[66,125154,125155],{"class":356}," ATTRS{idProduct}==\"ea60\",",[66,125157,125158],{"class":356}," MODE:=\"0777\",",[66,125160,125161],{"class":356}," SYMLINK+=\"mylidar\"\n",[66,125163,125164,125166,125168,125170,125172,125174,125177,125179,125182,125184],{"class":68,"line":80},[66,125165,125136],{"class":76},[66,125167,99],{"class":72},[66,125169,125141],{"class":356},[66,125171,125144],{"class":3793},[66,125173,125147],{"class":356},[66,125175,125176],{"class":3793},"\"1a86\"",[66,125178,2362],{"class":3793},[66,125180,125181],{"class":356}," ATTRS{idProduct}==\"7523\",",[66,125183,125158],{"class":356},[66,125185,125186],{"class":356}," SYMLINK+=\"mycar\"\n",[19,125188,125189],{},"代码解释：",[2982,125191,125192,125195,125198,125201],{},[34,125193,125194],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[34,125196,125197],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[34,125199,125200],{},"SYMLINK是符号连接，即绑定的别名；",[34,125202,125203],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,125205,125206,125207,125210,125213],{},"***小提示：***",[25356,125208,125209],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[23,125211,125212],{},"\u002Fetc\u002Fudev\u002Frule.d",[25356,125214,125215],{},"目录即可。",[19,125217,125218],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,125220,125221],{},"（3）.使规则生效",[19,125223,125224],{},"在终端下输入如下指令：",[57,125226,125228],{"className":119067,"code":125227,"language":119069,"meta":62,"style":62},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[23,125229,125230,125235,125247,125258,125262,125267,125280],{"__ignoreMap":62},[66,125231,125232],{"class":68,"line":69},[66,125233,125234],{"class":758},"# Ubuntu用下方命令\n",[66,125236,125237,125239,125241,125244],{"class":68,"line":80},[66,125238,26380],{"class":3793},[66,125240,121819],{"class":356},[66,125242,125243],{"class":356}," udev",[66,125245,125246],{"class":356}," reload\n",[66,125248,125249,125251,125253,125255],{"class":68,"line":112},[66,125250,26380],{"class":3793},[66,125252,121819],{"class":356},[66,125254,125243],{"class":356},[66,125256,125257],{"class":356}," restart\n",[66,125259,125260],{"class":68,"line":129},[66,125261,109],{"emptyLinePlaceholder":108},[66,125263,125264],{"class":68,"line":138},[66,125265,125266],{"class":758},"#Fedora用下方命令\n",[66,125268,125269,125271,125274,125277],{"class":68,"line":227},[66,125270,26380],{"class":3793},[66,125272,125273],{"class":356}," udevadm",[66,125275,125276],{"class":356}," control",[66,125278,125279],{"class":102}," --reload\n",[66,125281,125282,125284,125286],{"class":68,"line":236},[66,125283,26380],{"class":3793},[66,125285,125273],{"class":356},[66,125287,125288],{"class":356}," trigger\n",[19,125290,125291],{},"再重新插拔设备即可。",[19,125293,125294],{},"（4）.测试",[19,125296,125297],{},"终端下输入如下指令",[57,125299,125301],{"className":119067,"code":125300,"language":119069,"meta":62,"style":62},"ll \u002Fdev | grep ttyUSB\n",[23,125302,125303],{"__ignoreMap":62},[66,125304,125305,125308,125311,125313,125315],{"class":68,"line":69},[66,125306,125307],{"class":3793},"ll",[66,125309,125310],{"class":356}," \u002Fdev",[66,125312,26912],{"class":72},[66,125314,32036],{"class":3793},[66,125316,125317],{"class":356}," ttyUSB\n",[19,125319,125320],{},"运行结果如下：",[19,125322,125323],{},[3304,125324],{"alt":62,"src":125325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,125327,125328,125329,125332],{},"也可以多次插拔USB设备，会发现设备端口",[23,125330,125331],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,125334,125335],{},[2141,125336,119735],{},[19,125338,125339],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[484,125341,125343],{"id":125342},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,125345,125346,125348],{},[2141,125347,1472],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,125350,125351,125353],{},[2141,125352,125068],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,125355,125356],{},[2141,125357,125074],{},[19,125359,125360],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,125362,125363],{},"调用如下指令查看第一台雷达的USB信息：",[57,125365,125367],{"className":119067,"code":125366,"language":119069,"meta":62,"style":62},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[23,125368,125369,125389],{"__ignoreMap":62},[66,125370,125371,125374,125376,125379,125382,125384,125386],{"class":68,"line":69},[66,125372,125373],{"class":3793},"udevadm",[66,125375,71600],{"class":356},[66,125377,125378],{"class":102}," --attribute-walk",[66,125380,125381],{"class":102}," --name=\u002Fdev\u002FttyUSB0",[66,125383,26912],{"class":72},[66,125385,32036],{"class":3793},[66,125387,125388],{"class":356}," KERNELS\n",[66,125390,125391,125393,125395,125397,125400,125402,125404],{"class":68,"line":80},[66,125392,125373],{"class":3793},[66,125394,71600],{"class":356},[66,125396,125378],{"class":102},[66,125398,125399],{"class":102}," --name=\u002Fdev\u002FttyACM0",[66,125401,26912],{"class":72},[66,125403,32036],{"class":3793},[66,125405,125388],{"class":356},[19,125407,125408],{},[3304,125409],{"alt":62,"src":125410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,125412,125413],{},"调用如下指令查看第二台雷达的USB信息：",[57,125415,125417],{"className":119067,"code":125416,"language":119069,"meta":62,"style":62},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[23,125418,125419],{"__ignoreMap":62},[66,125420,125421,125423,125425,125427,125430,125432,125434],{"class":68,"line":69},[66,125422,125373],{"class":3793},[66,125424,71600],{"class":356},[66,125426,125378],{"class":102},[66,125428,125429],{"class":102}," --name=\u002Fdev\u002FttyUSB1",[66,125431,26912],{"class":72},[66,125433,32036],{"class":3793},[66,125435,125388],{"class":356},[19,125437,125438,125439,125442,125443,125446,125447,125450],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[23,125440,125441],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[23,125444,125445],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[2141,125448,125449],{},"唯一性标识","”。",[19,125452,125102],{},[19,125454,125105,125455,125457],{},[23,125456,125108],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[57,125459,125460],{"className":119067,"code":125112,"language":119069,"meta":62,"style":62},[23,125461,125462],{"__ignoreMap":62},[66,125463,125464,125466,125468],{"class":68,"line":69},[66,125465,26380],{"class":3793},[66,125467,120354],{"class":356},[66,125469,125123],{"class":356},[57,125471,125473],{"className":119067,"code":125472,"language":119069,"meta":62,"style":62},"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",[23,125474,125475,125504],{"__ignoreMap":62},[66,125476,125477,125479,125481,125483,125486,125488,125491,125494,125496,125499,125501],{"class":68,"line":69},[66,125478,125136],{"class":76},[66,125480,99],{"class":72},[66,125482,125141],{"class":356},[66,125484,125485],{"class":76}," KERNELS",[66,125487,99],{"class":72},[66,125489,125490],{"class":356},"=\"1-1.3:1.0\",",[66,125492,125493],{"class":3793}," MODE:",[66,125495,99],{"class":356},[66,125497,125498],{"class":3793},"\"0777\"",[66,125500,2362],{"class":3793},[66,125502,125503],{"class":356}," SYMLINK+=\"rplidar_front\"\n",[66,125505,125506,125508,125510,125512,125514,125516,125519,125521,125523,125525,125527],{"class":68,"line":80},[66,125507,125136],{"class":76},[66,125509,99],{"class":72},[66,125511,125141],{"class":356},[66,125513,125485],{"class":76},[66,125515,99],{"class":72},[66,125517,125518],{"class":356},"=\"1-1.4:1.0\",",[66,125520,125493],{"class":3793},[66,125522,99],{"class":356},[66,125524,125498],{"class":3793},[66,125526,2362],{"class":3793},[66,125528,125529],{"class":356}," SYMLINK+=\"rplidar_back\"\n",[19,125531,125221],{},[19,125533,125224],{},[57,125535,125536],{"className":119067,"code":125227,"language":119069,"meta":62,"style":62},[23,125537,125538,125542,125552,125562,125566,125570,125580],{"__ignoreMap":62},[66,125539,125540],{"class":68,"line":69},[66,125541,125234],{"class":758},[66,125543,125544,125546,125548,125550],{"class":68,"line":80},[66,125545,26380],{"class":3793},[66,125547,121819],{"class":356},[66,125549,125243],{"class":356},[66,125551,125246],{"class":356},[66,125553,125554,125556,125558,125560],{"class":68,"line":112},[66,125555,26380],{"class":3793},[66,125557,121819],{"class":356},[66,125559,125243],{"class":356},[66,125561,125257],{"class":356},[66,125563,125564],{"class":68,"line":129},[66,125565,109],{"emptyLinePlaceholder":108},[66,125567,125568],{"class":68,"line":138},[66,125569,125266],{"class":758},[66,125571,125572,125574,125576,125578],{"class":68,"line":227},[66,125573,26380],{"class":3793},[66,125575,125273],{"class":356},[66,125577,125276],{"class":356},[66,125579,125279],{"class":102},[66,125581,125582,125584,125586],{"class":68,"line":236},[66,125583,26380],{"class":3793},[66,125585,125273],{"class":356},[66,125587,125288],{"class":356},[19,125589,125291],{},[19,125591,125294],{},[19,125593,125297,125594,125597],{},[23,125595,125596],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,125599,125600],{},[3304,125601],{"alt":62,"src":125602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,125604,125605],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,125607,125608,125610],{},[2141,125609,119735],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[484,125612,125614],{"id":125613},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,125616,125617],{},"（1）.查看所连接的主机USB接口的信息",[57,125619,125621],{"className":119067,"code":125620,"language":119069,"meta":62,"style":62},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[23,125622,125623,125653],{"__ignoreMap":62},[66,125624,125625,125627,125629,125632,125634,125636,125638,125640,125643,125646,125648,125651],{"class":68,"line":69},[66,125626,125373],{"class":3793},[66,125628,71600],{"class":356},[66,125630,125631],{"class":102}," -a",[66,125633,31016],{"class":102},[66,125635,30222],{"class":76},[66,125637,125373],{"class":3793},[66,125639,71600],{"class":356},[66,125641,125642],{"class":102}," -q",[66,125644,125645],{"class":356}," path",[66,125647,26918],{"class":102},[66,125649,125650],{"class":356}," \u002Fdev\u002FttyACM0",[66,125652,313],{"class":76},[66,125654,125655,125657,125659,125661,125663,125665,125667,125669,125671,125673,125675,125678],{"class":68,"line":80},[66,125656,125373],{"class":3793},[66,125658,71600],{"class":356},[66,125660,125631],{"class":102},[66,125662,31016],{"class":102},[66,125664,30222],{"class":76},[66,125666,125373],{"class":3793},[66,125668,71600],{"class":356},[66,125670,125642],{"class":102},[66,125672,125645],{"class":356},[66,125674,26918],{"class":102},[66,125676,125677],{"class":356}," \u002Fdev\u002FttyUSB0",[66,125679,313],{"class":76},[19,125681,125682],{},[3304,125683],{"alt":62,"src":125684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,125686,125687],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,125689,125102],{},[19,125691,125105,125692,125457],{},[23,125693,125108],{},[57,125695,125696],{"className":119067,"code":125112,"language":119069,"meta":62,"style":62},[23,125697,125698],{"__ignoreMap":62},[66,125699,125700,125702,125704],{"class":68,"line":69},[66,125701,26380],{"class":3793},[66,125703,120354],{"class":356},[66,125705,125123],{"class":356},[57,125707,125709],{"className":119067,"code":125708,"language":119069,"meta":62,"style":62},"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",[23,125710,125711,125739,125765],{"__ignoreMap":62},[66,125712,125713,125715,125717,125720,125722,125724,125726,125728,125731,125734,125736],{"class":68,"line":69},[66,125714,125136],{"class":76},[66,125716,99],{"class":72},[66,125718,125719],{"class":356},"=\"ttyACM*\",",[66,125721,125144],{"class":3793},[66,125723,125147],{"class":356},[66,125725,125176],{"class":3793},[66,125727,2362],{"class":3793},[66,125729,125730],{"class":356}," ATTRS{idProduct}==\"55d4\",",[66,125732,125733],{"class":356}," ATTRS{serial}==\"0001\",",[66,125735,125158],{"class":356},[66,125737,125738],{"class":356}," SYMLINK+=\"ttyACM_MCU\"\n",[66,125740,125741,125743,125745,125747,125749,125751,125753,125755,125757,125760,125762],{"class":68,"line":80},[66,125742,125136],{"class":76},[66,125744,99],{"class":72},[66,125746,125719],{"class":356},[66,125748,125144],{"class":3793},[66,125750,125147],{"class":356},[66,125752,125176],{"class":3793},[66,125754,2362],{"class":3793},[66,125756,125730],{"class":356},[66,125758,125759],{"class":356}," ATTRS{serial}==\"0002\",",[66,125761,125158],{"class":356},[66,125763,125764],{"class":356}," SYMLINK+=\"ttyACM_Lidar\"\n",[66,125766,125767,125769,125771,125773,125775,125777,125779,125781,125783,125785],{"class":68,"line":112},[66,125768,125136],{"class":76},[66,125770,99],{"class":72},[66,125772,125141],{"class":356},[66,125774,125144],{"class":3793},[66,125776,125147],{"class":356},[66,125778,125176],{"class":3793},[66,125780,2362],{"class":3793},[66,125782,125181],{"class":356},[66,125784,125158],{"class":356},[66,125786,125787],{"class":356}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,125789,125221],{},[19,125791,125224],{},[57,125793,125794],{"className":119067,"code":125227,"language":119069,"meta":62,"style":62},[23,125795,125796,125800,125810,125820,125824,125828,125838],{"__ignoreMap":62},[66,125797,125798],{"class":68,"line":69},[66,125799,125234],{"class":758},[66,125801,125802,125804,125806,125808],{"class":68,"line":80},[66,125803,26380],{"class":3793},[66,125805,121819],{"class":356},[66,125807,125243],{"class":356},[66,125809,125246],{"class":356},[66,125811,125812,125814,125816,125818],{"class":68,"line":112},[66,125813,26380],{"class":3793},[66,125815,121819],{"class":356},[66,125817,125243],{"class":356},[66,125819,125257],{"class":356},[66,125821,125822],{"class":68,"line":129},[66,125823,109],{"emptyLinePlaceholder":108},[66,125825,125826],{"class":68,"line":138},[66,125827,125266],{"class":758},[66,125829,125830,125832,125834,125836],{"class":68,"line":227},[66,125831,26380],{"class":3793},[66,125833,125273],{"class":356},[66,125835,125276],{"class":356},[66,125837,125279],{"class":102},[66,125839,125840,125842,125844],{"class":68,"line":236},[66,125841,26380],{"class":3793},[66,125843,125273],{"class":356},[66,125845,125288],{"class":356},[19,125847,125848,125849],{},"再重新插拔设备即可，或者 ",[2141,125850,125851],{},"直接重启系统。",[19,125853,125294],{},[19,125855,125297,125856,125597],{},[23,125857,125596],{},[19,125859,125860],{},[3304,125861],{"alt":62,"src":125862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,125864,125605],{},[19,125866,125867,125869],{},[2141,125868,119735],{}," 一些设备可能没有串口号等。",[484,125871,125873],{"id":125872},"_744-其他注意事项","7.4.4 其他注意事项",[19,125875,125876,125877,125879,125880,125883,125884,20213,125887,125890,125891,125893],{},"并非所有的USB设备端口号都是",[23,125878,125331],{},"的格式，比如Arduino的端口号可能是",[23,125881,125882],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[23,125885,125886],{},"videon",[23,125888,125889],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[23,125892,125886],{},"端口，绑定时需要关联的也是该接口。",[19,125895,125896,125897,125900,125901,125904,125905,125907,125908,125911,125912,125915,125916,125919,125920,125919,125923,125919,125926,158],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[23,125898,125899],{},"KERNEL==\"ttyUSB*\"","修改为",[23,125902,125903],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[23,125906,125899],{},"修改为类似于",[23,125909,125910],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[23,125913,125914],{},"video[0,2,4,6]","表示可以绑定的端口为",[23,125917,125918],{},"video0","或",[23,125921,125922],{},"video2",[23,125924,125925],{},"video4",[23,125927,125928],{},"video6",[14,125930,125932],{"id":125931},"_75-挂载内网网页","7.5 挂载内网网页",[19,125934,125935],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,125937,125938],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,125940,125941],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,125943,125944,125945],{},"Termux 下载地址（F-Droid）：",[2229,125946,125947],{"href":125947,"rel":125948},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[25668],[19,125950,125951],{},"首先打开app后，先更新软件缓存：",[57,125953,125955],{"className":119067,"code":125954,"language":119069,"meta":62,"style":62},"pkg update\n",[23,125956,125957],{"__ignoreMap":62},[66,125958,125959,125962],{"class":68,"line":69},[66,125960,125961],{"class":3793},"pkg",[66,125963,28043],{"class":356},[19,125965,125966],{},"然后换源",[57,125968,125970],{"className":119067,"code":125969,"language":119069,"meta":62,"style":62},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[23,125971,125972],{"__ignoreMap":62},[66,125973,125974,125976,125979],{"class":68,"line":69},[66,125975,124845],{"class":3793},[66,125977,125978],{"class":76}," $PREFIX",[66,125980,125981],{"class":356},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,125983,125984],{},"将该文件内容替换为下面：",[57,125986,125988],{"className":119067,"code":125987,"language":119069,"meta":62,"style":62},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[23,125989,125990],{"__ignoreMap":62},[66,125991,125992,125995,125998,126001],{"class":68,"line":69},[66,125993,125994],{"class":3793},"deb",[66,125996,125997],{"class":356}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[66,125999,126000],{"class":356}," stable",[66,126002,126003],{"class":356}," main\n",[2982,126005,126006,126033],{},[34,126007,126008,126009,126011,126012],{},"如果你使用的是",[23,126010,124845],{},"编辑器：",[2982,126013,126014,126021,126027],{},[34,126015,126016,126017,126020],{},"按 ",[23,126018,126019],{},"Ctrl+O"," 保存文件。",[34,126022,126016,126023,126026],{},[23,126024,126025],{},"Enter"," 确认文件名。",[34,126028,126016,126029,126032],{},[23,126030,126031],{},"Ctrl+X"," 退出编辑器。",[34,126034,126008,126035,126011,126038],{},[23,126036,126037],{},"vim",[2982,126039,126040,126046],{},[34,126041,126016,126042,126045],{},[23,126043,126044],{},"Esc"," 退出编辑模式。",[34,126047,126048,126049,126051],{},"输入 ",[23,126050,120992],{}," 保存并退出。",[19,126053,126054],{},"接下来重新更新软件源：",[57,126056,126058],{"className":119067,"code":126057,"language":119069,"meta":62,"style":62},"pkg update && pkg upgrade\n",[23,126059,126060],{"__ignoreMap":62},[66,126061,126062,126064,126066,126068,126070],{"class":68,"line":69},[66,126063,125961],{"class":3793},[66,126065,119118],{"class":356},[66,126067,27991],{"class":76},[66,126069,125961],{"class":3793},[66,126071,119104],{"class":356},[19,126073,126074],{},"安装python：",[57,126076,126078],{"className":119067,"code":126077,"language":119069,"meta":62,"style":62},"pkg install python\n",[23,126079,126080],{"__ignoreMap":62},[66,126081,126082,126084,126086],{"class":68,"line":69},[66,126083,125961],{"class":3793},[66,126085,25637],{"class":356},[66,126087,126088],{"class":356}," python\n",[19,126090,126091,28274],{},[2141,126092,126093],{},"通过Termux访问设备存储",[19,126095,126096],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[57,126098,126100],{"className":119067,"code":126099,"language":119069,"meta":62,"style":62},"termux-setup-storage\n",[23,126101,126102],{"__ignoreMap":62},[66,126103,126104],{"class":68,"line":69},[66,126105,126099],{"class":3793},[31,126107,126108],{},[34,126109,126110,28274,126113],{},[2141,126111,126112],{},"进入HTML文件所在的目录",[31,126114,126115],{},[34,126116,126117,126118,126120],{},"使用",[23,126119,103050],{},"命令进入HTML文件所在的目录：",[57,126122,126124],{"className":119067,"code":126123,"language":119069,"meta":62,"style":62},"cd ~\u002Fyour_html_folder\n",[23,126125,126126],{"__ignoreMap":62},[66,126127,126128,126130],{"class":68,"line":69},[66,126129,103050],{"class":102},[66,126131,126132],{"class":356}," ~\u002Fyour_html_folder\n",[31,126134,126135],{"start":80},[34,126136,126137,28274,126140,126145,126162],{},[2141,126138,126139],{},"启动Python HTTP服务器",[31,126141,126142],{},[34,126143,126144],{},"运行以下命令启动一个简单的HTTP服务器：",[57,126146,126148],{"className":119067,"code":126147,"language":119069,"meta":62,"style":62},"python -m http.server 8000\n",[23,126149,126150],{"__ignoreMap":62},[66,126151,126152,126154,126156,126159],{"class":68,"line":69},[66,126153,61],{"class":3793},[66,126155,102656],{"class":102},[66,126157,126158],{"class":356}," http.server",[66,126160,126161],{"class":102}," 8000\n",[31,126163,126164],{"start":112},[34,126165,126166,126167,126170],{},"这会在端口",[23,126168,126169],{},"8000","上启动一个Web服务器。",[2982,126172,126173],{},[34,126174,126175],{},"启动服务器后，Termux会显示日志信息，例如：",[57,126177,126179],{"className":122587,"code":126178,"language":122589,"meta":122590,"style":62},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[23,126180,126181],{"__ignoreMap":62},[66,126182,126183],{"class":68,"line":69},[66,126184,126178],{},[2982,126186,126187],{},[34,126188,126189],{},"这表示服务器已成功启动。",[19,126191,126192],{},[2141,126193,126194],{},"在浏览器中访问HTML文件",[31,126196,126197],{},[34,126198,126199,28274,126202,126207],{},[2141,126200,126201],{},"在同一设备上访问",[31,126203,126204],{},[34,126205,126206],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[57,126208,126211],{"className":126209,"code":126210,"language":73443,"meta":62,"style":62},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[23,126212,126213],{"__ignoreMap":62},[66,126214,126215,126218],{"class":68,"line":69},[66,126216,126217],{"class":76},"http:",[66,126219,126220],{"class":758},"\u002F\u002Flocalhost:8000\n",[2982,126222,126223],{},[34,126224,126225,126226,126229],{},"如果HTML文件中有",[23,126227,126228],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,126231,126233],{"id":126232},"_76-linux重点知识","7.6 Linux重点知识",[484,126235,126237],{"id":126236},"_761-关于点的说明","7.6.1 关于点的说明",[19,126239,126240],{},[3304,126241],{"alt":62,"src":126242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,126244,126245],{},"一点本目录，两点上目录",[484,126247,126249],{"id":126248},"_762-目录","7.6.2 目录",[23801,126251,126253],{"id":126252},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,126255,126256],{},[2141,126257,126258],{},"\u002Fboot:",[19,126260,126261],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,126263,126264],{},[2141,126265,126266],{},"\u002Fetc:",[19,126268,126269],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,126271,126272],{},[2141,126273,126274],{},"\u002Flib：",[19,126276,126277],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,126279,126280],{},[2141,126281,126282],{},"\u002Fsys:",[19,126284,126285],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[23801,126287,126289],{"id":126288},"_7622-指令集合","7.6.2.2 指令集合",[19,126291,126292],{},[2141,126293,126294],{},"\u002Fbin:",[19,126296,126297],{},"为二进制文件的缩写，存放最经常使用的命令",[19,126299,126300],{},[2141,126301,126302],{},"\u002Fsbin:",[19,126304,126305],{},"只有系统管理员才能使用的程序和指令",[23801,126307,126309],{"id":126308},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,126311,126312],{},[2141,126313,126314],{},"\u002Fdev:",[19,126316,126317],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,126319,126320],{},[2141,126321,126322],{},"\u002Fmedia:",[19,126324,126325],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,126327,126328],{},[2141,126329,126330],{},"\u002Fmnt:",[19,126332,126333],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[23801,126335,126337],{"id":126336},"_7624-临时文件","7.6.2.4 临时文件",[19,126339,126340],{},[2141,126341,126342],{},"\u002Frun:",[19,126344,126345],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,126347,126348],{},[2141,126349,126350],{},"\u002Flost+found:",[19,126352,126353],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,126355,126356],{},[2141,126357,126358],{},"\u002Ftmp:",[19,126360,126361],{},"这个目录是用来存放一些临时文件的",[23801,126363,126365],{"id":126364},"_7625-账户","7.6.2.5 账户",[19,126367,126368],{},[2141,126369,126370],{},"\u002Froot：",[19,126372,126373],{},"系统管理员的用户主目录",[19,126375,126376,28274],{},[2141,126377,126378],{},"\u002Fhome",[19,126380,126381],{},"用户的主目录，以用户的账号命名的",[19,126383,126384,28274],{},[2141,126385,126386],{},"\u002Fusr",[19,126388,126389],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,126391,126392],{},[2141,126393,126394],{},"\u002Fusr\u002Fbin：",[19,126396,126397],{},"系统用户使用的应用程序与指令",[19,126399,126400],{},[2141,126401,126402],{},"\u002Fusr\u002Fsbin：",[19,126404,126405],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,126407,126408],{},[2141,126409,126410],{},"\u002Fusr\u002Fsrc：",[19,126412,126413],{},"内核源代码默认的放置目录",[23801,126415,126417],{"id":126416},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,126419,126420],{},[2141,126421,126422],{},"\u002Fvar：",[19,126424,126425],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,126427,126428],{},[2141,126429,126430],{},"\u002Fproc:",[19,126432,126433,126434,126437],{},"管理 ",[2141,126435,126436],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[23801,126439,126441],{"id":126440},"_7627-扩展用的","7.6.2.7 扩展用的",[19,126443,126444],{},[2141,126445,126446],{},"\u002Fopt:",[19,126448,126449],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,126451,126452],{},[2141,126453,126454],{},"\u002Fsrv:",[19,126456,126457],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[484,126459,126461],{"id":126460},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,126463,126464],{},[3304,126465],{"alt":62,"src":126466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,126468,126469],{},"windows-->linux:",[19,126471,126472],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,126474,126475],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,126477,126478],{},"linux传输文件到windows",[19,126480,126481],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[484,126483,126485],{"id":126484},"_764-易忘知识","7.6.4 易忘知识",[19,126487,126488],{},"操作系统内核查看",[57,126490,126491],{"className":119067,"code":123061,"language":119069,"meta":62,"style":62},[23,126492,126493],{"__ignoreMap":62},[66,126494,126495,126497],{"class":68,"line":69},[66,126496,71983],{"class":3793},[66,126498,123070],{"class":102},[19,126500,126501],{},[3304,126502],{"alt":62,"src":126503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,126505,126506],{},[3304,126507],{"alt":62,"src":126508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[57,126510,126512],{"className":119067,"code":126511,"language":119069,"meta":62,"style":62},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[23,126513,126514,126526],{"__ignoreMap":62},[66,126515,126516,126518,126521,126524],{"class":68,"line":69},[66,126517,123278],{"class":3793},[66,126519,126520],{"class":356}," mvtest",[66,126522,126523],{"class":356}," mvtest2",[66,126525,4498],{"class":76},[66,126527,126528],{"class":68,"line":80},[66,126529,126530],{"class":3793},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,126532,126533],{},[3304,126534],{"alt":62,"src":126535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,126537,126538],{},[3304,126539],{"alt":62,"src":126540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,126542,126543,126544,126547],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[23,126545,126546],{},"du -a"," 可以快速查看磁盘使用细节。",[484,126549,126551],{"id":126550},"_765-vim","7.6.5 Vim",[19,126553,126554],{},[3304,126555],{"alt":62,"src":126556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,126558,126559],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,126561,126562],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,126564,126565],{},[2141,126566,126567],{},"1.命令模式：",[19,126569,126570],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,126572,126573],{},"x 删除当前光标所在处的字符",[19,126575,126576],{},"：切换到底线命令模式，以在最底一行输入命令",[19,126578,126579],{},"a 进行插入模式，在光标下一个位置输入文本",[19,126581,126582],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,126584,126585],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,126587,126588],{},"dd 剪切当前行",[19,126590,126591],{},"yy 复制当前行",[19,126593,126594],{},"p 粘贴剪贴板内容到光标下方",[19,126596,126597],{},"P 粘贴剪贴板内容到光标上方",[19,126599,126600],{},"u 撤销上一次操作",[19,126602,126603],{},"ctrl+r 重做上一次操作",[19,126605,126606,126608],{},[2774,126607],{}," 保存文件",[19,126610,126611,126613],{},[2624,126612],{}," 退出Vim编辑器",[19,126615,126616,126618],{},[2624,126617],{},"! 强制退出Vim编辑器，不保存修改",[19,126620,126621],{},[2141,126622,126623],{},"2.输入模式：",[19,126625,126626],{},[3304,126627],{"alt":62,"src":126628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,126630,126631],{},[2141,126632,126633],{},"3.底线命令模式：",[19,126635,126636],{},[3304,126637],{"alt":62,"src":126638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,126640,126641],{},"按下esc可以退出底线命令模式",[484,126643,126645],{"id":126644},"_766-apt","7.6.6 apt",[19,126647,126648],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[484,126650,126652],{"id":126651},"_767-home与root的区别","7.6.7 home与root的区别",[19,126654,126655],{},[3304,126656],{"alt":62,"src":126657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,126659,126660],{},[3304,126661],{"alt":62,"src":126662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,126664,126665],{},[3304,126666],{"alt":62,"src":126667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,126669,126670],{},[3304,126671],{"alt":62,"src":126672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[484,126674,126676],{"id":126675},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,126678,126679],{},[2229,126680,126681],{"href":126681,"rel":126682},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[25668],[31,126684,126685,126688],{},[34,126686,126687],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[34,126689,126690],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,126692,126693],{},[3304,126694],{"alt":62,"src":126695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,126697,126698],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,126700,126701],{},[3304,126702],{"alt":62,"src":126703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[57,126705,126707],{"className":122587,"code":126706,"language":122589,"meta":122590,"style":62},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[23,126708,126709,126714],{"__ignoreMap":62},[66,126710,126711],{"class":68,"line":69},[66,126712,126713],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[66,126715,126716],{"class":68,"line":80},[66,126717,126718],{},".\u002Fpycharm.sh\n",[19,126720,126721],{},"3️⃣创建.desktop文件",[19,126723,126724],{},[2141,126725,126726],{},"原理：",[2982,126728,126729,126739],{},[34,126730,126731,126732,126738],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[2141,126733,126734,126737],{},[23,126735,126736],{},".desktop"," 文件"," 来识别应用。",[34,126740,126741,126743,126744],{},[23,126742,126736],{}," 文件相当于一个“应用注册表”，告诉系统：",[2982,126745,126746,126749,126752,126755,126758],{},[34,126747,126748],{},"应用名字（Name）",[34,126750,126751],{},"图标（Icon）",[34,126753,126754],{},"执行命令（Exec）",[34,126756,126757],{},"分类（Categories）",[34,126759,126760],{},"是否需要终端（Terminal）",[57,126762,126764],{"className":122587,"code":126763,"language":122589,"meta":122590,"style":62},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[23,126765,126766,126771],{"__ignoreMap":62},[66,126767,126768],{"class":68,"line":69},[66,126769,126770],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[66,126772,126773],{"class":68,"line":80},[66,126774,126775],{},"nano pycharm.desktop\n",[19,126777,126778],{},"nano是一个命令行下的编辑器，也可以使用vim",[57,126780,126782],{"className":122587,"code":126781,"language":122589,"meta":122590,"style":62},"[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",[23,126783,126784,126789,126794,126799,126804,126809,126814,126819,126824,126829],{"__ignoreMap":62},[66,126785,126786],{"class":68,"line":69},[66,126787,126788],{},"[Desktop Entry]\n",[66,126790,126791],{"class":68,"line":80},[66,126792,126793],{},"Version=1.0\n",[66,126795,126796],{"class":68,"line":112},[66,126797,126798],{},"Type=Application\n",[66,126800,126801],{"class":68,"line":129},[66,126802,126803],{},"Name=PyCharm\n",[66,126805,126806],{"class":68,"line":138},[66,126807,126808],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[66,126810,126811],{"class":68,"line":227},[66,126812,126813],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[66,126815,126816],{"class":68,"line":236},[66,126817,126818],{},"Comment=JetBrains PyCharm IDE\n",[66,126820,126821],{"class":68,"line":241},[66,126822,126823],{},"Categories=Development;IDE;\n",[66,126825,126826],{"class":68,"line":372},[66,126827,126828],{},"Terminal=false\n",[66,126830,126831],{"class":68,"line":377},[66,126832,126833],{},"StartupWMClass=jetbrains-pycharm\n",[2982,126835,126836,126842,126848,126854],{},[34,126837,126838,126841],{},[23,126839,126840],{},"Exec"," → 点击图标时执行的命令",[34,126843,126844,126847],{},[23,126845,126846],{},"Icon"," → 显示在菜单和桌面上的图标",[34,126849,126850,126853],{},[23,126851,126852],{},"Terminal=false"," → 不打开终端",[34,126855,126856,126859],{},[23,126857,126858],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[126861,126862,126863],"blockquote",{},[19,126864,126865,126866,126868,126869],{},"可以理解成 ",[23,126867,126736],{}," 文件是 Linux 的 ",[2141,126870,126871],{},"快捷方式配置文件",[19,126873,126874],{},"4️⃣设置可执行权限",[57,126876,126878],{"className":122587,"code":126877,"language":122589,"meta":122590,"style":62},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[23,126879,126880],{"__ignoreMap":62},[66,126881,126882],{"class":68,"line":69},[66,126883,126877],{},[19,126885,126886],{},"5️⃣桌面图标启动的话如下：",[57,126888,126890],{"className":122587,"code":126889,"language":122589,"meta":122590,"style":62},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[23,126891,126892,126897],{"__ignoreMap":62},[66,126893,126894],{"class":68,"line":69},[66,126895,126896],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[66,126898,126899],{"class":68,"line":80},[66,126900,126901],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[31,126903,126904],{"start":112},[34,126905,126906],{},"下载Appimage文件实现软件的安装",[19,126908,126909],{},"1️⃣先下载appimage",[19,126911,126912],{},[2229,126913,126914],{"href":126914,"rel":126915},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[25668],[19,126917,126918],{},[3304,126919],{"alt":62,"src":126920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,126922,126923],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,126925,126926],{},[3304,126927],{"alt":62,"src":126928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,126930,126931],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,126933,126934],{},[3304,126935],{"alt":62,"src":126936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,126938,126939],{},[3304,126940],{"alt":62,"src":126941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,126943,126944,126945,126948],{},"3️⃣给他们放在",[23,126946,126947],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,126950,126951],{},"4️⃣给软件执行权限",[57,126953,126955],{"className":122587,"code":126954,"language":122589,"meta":122590,"style":62},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[23,126956,126957,126962],{"__ignoreMap":62},[66,126958,126959],{"class":68,"line":69},[66,126960,126961],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[66,126963,126964],{"class":68,"line":80},[66,126965,126966],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,126968,126969],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[57,126971,126973],{"className":119067,"code":126972,"language":119069,"meta":62,"style":62},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[23,126974,126975,126982,126989,126995],{"__ignoreMap":62},[66,126976,126977,126979],{"class":68,"line":69},[66,126978,103050],{"class":102},[66,126980,126981],{"class":356}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[66,126983,126984,126986],{"class":68,"line":80},[66,126985,103057],{"class":3793},[66,126987,126988],{"class":356}," .\u002Fqqmusic.desktop\n",[66,126990,126991,126993],{"class":68,"line":112},[66,126992,126037],{"class":3793},[66,126994,126988],{"class":356},[66,126996,126997,126999,127001,127003],{"class":68,"line":129},[66,126998,26380],{"class":3793},[66,127000,26383],{"class":356},[66,127002,124904],{"class":356},[66,127004,126988],{"class":356},[19,127006,127007,127009],{},[23,127008,103057],{},"：一个 Linux 命令，主要功能是：",[2982,127011,127012,127015],{},[34,127013,127014],{},"如果文件不存在，就创建一个新的空文件",[34,127016,127017],{},"如果文件已存在，就更新该文件的最后修改时间",[57,127019,127021],{"className":122587,"code":127020,"language":122589,"meta":122590,"style":62},"[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",[23,127022,127023,127027,127032,127037,127042,127046,127051],{"__ignoreMap":62},[66,127024,127025],{"class":68,"line":69},[66,127026,126788],{},[66,127028,127029],{"class":68,"line":80},[66,127030,127031],{},"Name=QQ音乐\n",[66,127033,127034],{"class":68,"line":112},[66,127035,127036],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[66,127038,127039],{"class":68,"line":129},[66,127040,127041],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[66,127043,127044],{"class":68,"line":138},[66,127045,126798],{},[66,127047,127048],{"class":68,"line":227},[66,127049,127050],{},"Categories=Audio;Music;Player;\n",[66,127052,127053],{"class":68,"line":236},[66,127054,127055],{},"Comment=QQ Music Client for Linux\n",[19,127057,127058],{},"将文件复制进去",[19,127060,127061],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,127063,127064],{},[3304,127065],{"alt":62,"src":127066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,127068,127069],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,127071,127072],{},[3304,127073],{"alt":62,"src":127074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,127076,127077,127078,127081,127082,127085],{},"如果你用的不是KDE，那么也可以直接修改",[23,127079,127080],{},"qqmuic.desktop","：在exec的末尾加上",[23,127083,127084],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[57,127087,127089],{"className":122587,"code":127088,"language":122589,"meta":122590,"style":62},"[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",[23,127090,127091,127095,127099,127104,127108,127112,127116],{"__ignoreMap":62},[66,127092,127093],{"class":68,"line":69},[66,127094,126788],{},[66,127096,127097],{"class":68,"line":80},[66,127098,127031],{},[66,127100,127101],{"class":68,"line":112},[66,127102,127103],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[66,127105,127106],{"class":68,"line":129},[66,127107,127041],{},[66,127109,127110],{"class":68,"line":138},[66,127111,126798],{},[66,127113,127114],{"class":68,"line":227},[66,127115,127050],{},[66,127117,127118],{"class":68,"line":236},[66,127119,127055],{},[19,127121,127122],{},[3304,127123],{"alt":62,"src":127124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,127126,127127],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[57,127129,127131],{"className":122587,"code":127130,"language":122589,"meta":122590,"style":62},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[23,127132,127133],{"__ignoreMap":62},[66,127134,127135],{"class":68,"line":69},[66,127136,127130],{},[31,127138,127139],{"start":129},[34,127140,127141],{},"去Flathub上安装软件",[19,127143,127144],{},[2229,127145,127146],{"href":127146,"rel":127147},"https:\u002F\u002Fflathub.org\u002F",[25668],[19,127149,127150],{},"1️⃣去上面的官网搜索软件+下载软件",[19,127152,127153],{},[3304,127154],{"alt":62,"src":127155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[57,127157,127159],{"className":122587,"code":127158,"language":122589,"meta":122590,"style":62},"flatpak install flathub com.obsproject.Studio\n",[23,127160,127161],{"__ignoreMap":62},[66,127162,127163],{"class":68,"line":69},[66,127164,127158],{},[19,127166,127167],{},[3304,127168],{"alt":62,"src":127169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,127171,127172],{},"2️⃣运行软件",[19,127174,127175],{},"a.官方方式：",[19,127177,127178],{},[3304,127179],{"alt":62,"src":127180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[57,127182,127183],{"className":122587,"code":127158,"language":122589,"meta":122590,"style":62},[23,127184,127185],{"__ignoreMap":62},[66,127186,127187],{"class":68,"line":69},[66,127188,127158],{},[19,127190,127191],{},"b.当普通软件运行：",[19,127193,127194],{},[3304,127195],{"alt":62,"src":127196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,127198,127199],{},[3304,127200],{"alt":62,"src":127201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[1903,127203,127204],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":62,"searchDepth":80,"depth":80,"links":127206},[127207,127208,127213,127214,127220,127221],{"id":123940,"depth":80,"text":123941},{"id":124282,"depth":80,"text":124283,"children":127209},[127210,127211,127212],{"id":124286,"depth":112,"text":124287},{"id":124353,"depth":112,"text":124354},{"id":124614,"depth":112,"text":124615},{"id":124767,"depth":80,"text":124768},{"id":125005,"depth":80,"text":125006,"children":127215},[127216,127217,127218,127219],{"id":125057,"depth":112,"text":125058},{"id":125342,"depth":112,"text":125343},{"id":125613,"depth":112,"text":125614},{"id":125872,"depth":112,"text":125873},{"id":125931,"depth":80,"text":125932},{"id":126232,"depth":80,"text":126233,"children":127222},[127223,127224,127225,127226,127227,127228,127229,127230],{"id":126236,"depth":112,"text":126237},{"id":126248,"depth":112,"text":126249},{"id":126460,"depth":112,"text":126461},{"id":126484,"depth":112,"text":126485},{"id":126550,"depth":112,"text":126551},{"id":126644,"depth":112,"text":126645},{"id":126651,"depth":112,"text":126652},{"id":126675,"depth":112,"text":126676},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":123932,"description":1926},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":127237,"title":127238,"body":127239,"description":1926,"extension":1927,"meta":127243,"navigation":108,"path":127244,"seo":127245,"stem":127246,"__hash__":127247},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":127240,"toc":127241},[],{"title":62,"searchDepth":80,"depth":80,"links":127242},[],{"category":32063},"\u002Fwiki\u002F2025-01-27-linux",{"title":127238,"description":1926},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":127249,"title":127250,"body":127251,"description":127255,"extension":1927,"meta":127646,"navigation":108,"path":127647,"seo":127648,"stem":127649,"__hash__":127650},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":127252,"toc":127644},[127253,127256,127260,127277,127280,127333,127337,127339,127379,127388,127392,127395,127636,127641],[19,127254,127255],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,127257,127259],{"id":127258},"_1ubuntu环境配置","1.Ubuntu环境配置",[31,127261,127262,127265,127268,127271,127274],{},[34,127263,127264],{},"ubuntu环境换源",[34,127266,127267],{},"安装cuda",[34,127269,127270],{},"安装miniconda",[34,127272,127273],{},"安装pytorch",[34,127275,127276],{},"安装genesis",[19,127278,127279],{},"参考链接：",[57,127281,127283],{"className":25625,"code":127282,"language":25627,"meta":62,"style":62},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[23,127284,127285],{"__ignoreMap":62},[66,127286,127287,127290,127293,127296,127298,127301,127304,127306,127309,127312,127314,127317,127320,127322,127325,127328,127330],{"class":68,"line":69},[66,127288,127289],{"class":3793},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[66,127291,127292],{"class":356},"=blogdetail",[66,127294,127295],{"class":76},"&sharetype",[66,127297,99],{"class":72},[66,127299,127300],{"class":356},"blogdetail",[66,127302,127303],{"class":76},"&sharerId",[66,127305,99],{"class":72},[66,127307,127308],{"class":356},"144728092",[66,127310,127311],{"class":76},"&sharerefer",[66,127313,99],{"class":72},[66,127315,127316],{"class":356},"PC",[66,127318,127319],{"class":76},"&sharesource",[66,127321,99],{"class":72},[66,127323,127324],{"class":356},"qq_69379513",[66,127326,127327],{"class":76},"&sharefrom",[66,127329,99],{"class":72},[66,127331,127332],{"class":356},"from_link\n",[10,127334,127336],{"id":127335},"_2genesis-报错issue","2.Genesis 报错issue",[19,127338,127279],{},[57,127340,127341],{"className":25625,"code":127282,"language":25627,"meta":62,"style":62},[23,127342,127343],{"__ignoreMap":62},[66,127344,127345,127347,127349,127351,127353,127355,127357,127359,127361,127363,127365,127367,127369,127371,127373,127375,127377],{"class":68,"line":69},[66,127346,127289],{"class":3793},[66,127348,127292],{"class":356},[66,127350,127295],{"class":76},[66,127352,99],{"class":72},[66,127354,127300],{"class":356},[66,127356,127303],{"class":76},[66,127358,99],{"class":72},[66,127360,127308],{"class":356},[66,127362,127311],{"class":76},[66,127364,99],{"class":72},[66,127366,127316],{"class":356},[66,127368,127319],{"class":76},[66,127370,99],{"class":72},[66,127372,127324],{"class":356},[66,127374,127327],{"class":76},[66,127376,99],{"class":72},[66,127378,127332],{"class":356},[57,127380,127382],{"className":25625,"code":127381,"language":25627,"meta":62,"style":62},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[23,127383,127384],{"__ignoreMap":62},[66,127385,127386],{"class":68,"line":69},[66,127387,127381],{"class":3793},[10,127389,127391],{"id":127390},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,127393,127394],{},"hello_robot.py",[57,127396,127398],{"className":59,"code":127397,"language":61,"meta":62,"style":62},"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",[23,127399,127400,127406,127421,127425,127437,127449,127453,127466,127470,127489,127499,127509,127523,127527,127531,127536,127540,127550,127557,127571,127578,127588,127593,127597,127615,127620,127624,127631],{"__ignoreMap":62},[66,127401,127402,127404],{"class":68,"line":69},[66,127403,284],{"class":72},[66,127405,47092],{"class":76},[66,127407,127408,127411,127414,127416,127418],{"class":68,"line":80},[66,127409,127410],{"class":76},"os.environ[",[66,127412,127413],{"class":356},"'PYOPENGL_PLATFORM'",[66,127415,6259],{"class":76},[66,127417,99],{"class":72},[66,127419,127420],{"class":356}," 'glx'\n",[66,127422,127423],{"class":68,"line":112},[66,127424,109],{"emptyLinePlaceholder":108},[66,127426,127427,127429,127432,127434],{"class":68,"line":129},[66,127428,284],{"class":72},[66,127430,127431],{"class":76}," genesis ",[66,127433,33176],{"class":72},[66,127435,127436],{"class":76}," gs\n",[66,127438,127439,127441,127444,127446],{"class":68,"line":138},[66,127440,32532],{"class":72},[66,127442,127443],{"class":76}," pynput ",[66,127445,284],{"class":72},[66,127447,127448],{"class":76}," keyboard\n",[66,127450,127451],{"class":68,"line":227},[66,127452,109],{"emptyLinePlaceholder":108},[66,127454,127455,127458,127461,127463],{"class":68,"line":236},[66,127456,127457],{"class":76},"gs.init(",[66,127459,127460],{"class":1234},"backend",[66,127462,99],{"class":72},[66,127464,127465],{"class":76},"gs.gpu)\n",[66,127467,127468],{"class":68,"line":241},[66,127469,109],{"emptyLinePlaceholder":108},[66,127471,127472,127475,127477,127480,127483,127485,127487],{"class":68,"line":372},[66,127473,127474],{"class":76},"scene ",[66,127476,99],{"class":72},[66,127478,127479],{"class":76}," gs.Scene(",[66,127481,127482],{"class":1234},"show_viewer",[66,127484,99],{"class":72},[66,127486,33269],{"class":102},[66,127488,313],{"class":76},[66,127490,127491,127494,127496],{"class":68,"line":377},[66,127492,127493],{"class":76},"plane ",[66,127495,99],{"class":72},[66,127497,127498],{"class":76}," scene.add_entity(gs.morphs.Plane())\n",[66,127500,127501,127504,127506],{"class":68,"line":392},[66,127502,127503],{"class":76},"franka ",[66,127505,99],{"class":72},[66,127507,127508],{"class":76}," scene.add_entity(\n",[66,127510,127511,127514,127516,127518,127521],{"class":68,"line":405},[66,127512,127513],{"class":76},"    gs.morphs.MJCF(",[66,127515,47140],{"class":1234},[66,127517,99],{"class":72},[66,127519,127520],{"class":356},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[66,127522,39835],{"class":76},[66,127524,127525],{"class":68,"line":418},[66,127526,313],{"class":76},[66,127528,127529],{"class":68,"line":430},[66,127530,109],{"emptyLinePlaceholder":108},[66,127532,127533],{"class":68,"line":438},[66,127534,127535],{"class":76},"scene.build()\n",[66,127537,127538],{"class":68,"line":465},[66,127539,109],{"emptyLinePlaceholder":108},[66,127541,127542,127544,127547],{"class":68,"line":1805},[66,127543,33739],{"class":72},[66,127545,127546],{"class":3793}," on_press",[66,127548,127549],{"class":76},"(key):\n",[66,127551,127552,127555],{"class":68,"line":1817},[66,127553,127554],{"class":72},"    try",[66,127556,126],{"class":76},[66,127558,127559,127561,127564,127566,127569],{"class":68,"line":1822},[66,127560,4321],{"class":72},[66,127562,127563],{"class":76}," key.char ",[66,127565,531],{"class":72},[66,127567,127568],{"class":356}," 'q'",[66,127570,126],{"class":76},[66,127572,127573,127575],{"class":68,"line":1829},[66,127574,17535],{"class":72},[66,127576,127577],{"class":102}," False\n",[66,127579,127580,127583,127586],{"class":68,"line":3529},[66,127581,127582],{"class":72},"    except",[66,127584,127585],{"class":102}," AttributeError",[66,127587,126],{"class":76},[66,127589,127590],{"class":68,"line":3557},[66,127591,127592],{"class":72},"        pass\n",[66,127594,127595],{"class":68,"line":3562},[66,127596,109],{"emptyLinePlaceholder":108},[66,127598,127599,127602,127604,127607,127610,127612],{"class":68,"line":3579},[66,127600,127601],{"class":76},"listener ",[66,127603,99],{"class":72},[66,127605,127606],{"class":76}," keyboard.Listener(",[66,127608,127609],{"class":1234},"on_press",[66,127611,99],{"class":72},[66,127613,127614],{"class":76},"on_press)\n",[66,127616,127617],{"class":68,"line":3584},[66,127618,127619],{"class":76},"listener.start()\n",[66,127621,127622],{"class":68,"line":3589},[66,127623,109],{"emptyLinePlaceholder":108},[66,127625,127626,127628],{"class":68,"line":3594},[66,127627,73],{"class":72},[66,127629,127630],{"class":76}," listener.running:\n",[66,127632,127633],{"class":68,"line":3608},[66,127634,127635],{"class":76},"    scene.step()\n",[19,127637,127638],{},[3304,127639],{"alt":62,"src":127640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[1903,127642,127643],{},"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":62,"searchDepth":80,"depth":80,"links":127645},[],{"category":25181},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":127250,"description":127255},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":127652,"title":127653,"body":127654,"description":1926,"extension":1927,"meta":127669,"navigation":108,"path":127670,"seo":127671,"stem":127672,"__hash__":127673},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":127655,"toc":127666},[127656,127659,127663],[10,127657,127653],{"id":127658},"_1-基础知识",[14,127660,127662],{"id":127661},"_11-js的组成","1.1 js的组成",[19,127664,127665],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":62,"searchDepth":80,"depth":80,"links":127667},[127668],{"id":127661,"depth":80,"text":127662},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":127653,"description":1926},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":127675,"title":127676,"body":127677,"description":1926,"extension":1927,"meta":127816,"navigation":108,"path":127817,"seo":127818,"stem":127819,"__hash__":127820},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":127678,"toc":127804},[127679,127682,127686,127689,127693,127703,127707,127710,127713,127716,127720,127727,127733,127737,127743,127754,127758,127761,127765,127768,127772,127775,127779,127782,127786,127789,127792,127795,127798,127801],[10,127680,127676],{"id":127681},"_2-vscode必备内容",[14,127683,127685],{"id":127684},"_21-标签分类","2.1 标签分类",[19,127687,127688],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,127690,127692],{"id":127691},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,127694,127695,127696,127698,127699,127702],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[23,127697,2217],{}," 然后按 ",[23,127700,127701],{},"Tab","，快速自动生成基本结构。",[14,127704,127706],{"id":127705},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,127708,127709],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,127711,127712],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,127714,127715],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,127717,127719],{"id":127718},"_24-视图缩放","2.4 视图缩放",[19,127721,127722,127723,127726],{},"缩放视图 ",[23,127724,127725],{},"ctrl+"," 可实现代码增大。",[19,127728,127729,127732],{},[23,127730,127731],{},"ctrl-"," 可实现代码减小。",[14,127734,127736],{"id":127735},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,127738,127739,127740,158],{},"VSCode 新建文件快捷键为 ",[23,127741,127742],{},"ctrl+N",[19,127744,127745,127746,127749,127750,127753],{},"保存快捷键为 ",[23,127747,127748],{},"ctrl+S","，将文本保存为 ",[23,127751,127752],{},".html"," 文件。",[14,127755,127757],{"id":127756},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,127759,127760],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,127762,127764],{"id":127763},"_27-vscode-icons","2.7 vscode-icons",[19,127766,127767],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,127769,127771],{"id":127770},"_28-easy-less","2.8 Easy LESS",[19,127773,127774],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,127776,127778],{"id":127777},"_29-会了吧插件","2.9 会了吧插件",[19,127780,127781],{},"会了吧插件可以展示代码中英语单词的意思。",[14,127783,127785],{"id":127784},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,127787,127788],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,127790,127791],{},"②选定多个相同的单词:ctrl+D",[19,127793,127794],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,127796,127797],{},"④全局替换某些单词:ctrl+h",[19,127799,127800],{},"⑤快速定位到某一行:ctrl+g",[19,127802,127803],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":62,"searchDepth":80,"depth":80,"links":127805},[127806,127807,127808,127809,127810,127811,127812,127813,127814,127815],{"id":127684,"depth":80,"text":127685},{"id":127691,"depth":80,"text":127692},{"id":127705,"depth":80,"text":127706},{"id":127718,"depth":80,"text":127719},{"id":127735,"depth":80,"text":127736},{"id":127756,"depth":80,"text":127757},{"id":127763,"depth":80,"text":127764},{"id":127770,"depth":80,"text":127771},{"id":127777,"depth":80,"text":127778},{"id":127784,"depth":80,"text":127785},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":127676,"description":1926},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":127822,"title":127823,"body":127824,"description":1926,"extension":1927,"meta":127983,"navigation":108,"path":127984,"seo":127985,"stem":127986,"__hash__":127987},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":127825,"toc":127975},[127826,127829,127833,127843,127849,127855,127859,127868,127872,127877,127880,127883,127887,127890,127900,127909,127918,127927,127937,127944,127949,127954,127967],[10,127827,127823],{"id":127828},"_3-html文本与容器标签",[14,127830,127832],{"id":127831},"_31-标题标签","3.1 标题标签",[19,127834,127835,127838,127839,127842],{},[23,127836,127837],{},"\u003Ch1>","我是一级标签",[23,127840,127841],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,127844,127845,127838,127847],{},[23,127846,127837],{},[23,127848,127841],{},[19,127850,125105,127851,127854],{},[23,127852,127853],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,127856,127858],{"id":127857},"_32-段落标签","3.2 段落标签",[19,127860,127861,127864,127865],{},[23,127862,127863],{},"\u003Cp>","....",[23,127866,127867],{},"\u003C\u002Fp>",[14,127869,127871],{"id":127870},"_33-换行标签","3.3 换行标签",[19,127873,127874],{},[23,127875,127876],{},"\u003Cbr \u002F>",[19,127878,127879],{},"具有强制换行的作用",[19,127881,127882],{},"单标签",[14,127884,127886],{"id":127885},"_34-文本格式化标签","3.4 文本格式化标签",[19,127888,127889],{},"提供粗体、斜体和下划线等效果",[19,127891,127892,127893,84316,127896,127899],{},"加粗：",[23,127894,127895],{},"\u003Cstrong>...\u003C\u002Fstrong>",[23,127897,127898],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,127901,127902,127903,84316,127906,127899],{},"斜体：",[23,127904,127905],{},"\u003Cem>...\u003C\u002Fem>",[23,127907,127908],{},"\u003Ci>...\u003C\u002Fi>",[19,127910,127911,127912,84316,127915,127899],{},"删除线：",[23,127913,127914],{},"\u003Cdel>...\u003C\u002Fdel>",[23,127916,127917],{},"\u003Cs>...\u003C\u002Fs>",[19,127919,127920,127921,84316,127924,127899],{},"下划线：",[23,127922,127923],{},"\u003Cins>...\u003C\u002Fins>",[23,127925,127926],{},"\u003Cu>...\u003C\u002Fu>",[14,127928,127930,127931,20213,127934,104466],{"id":127929},"_35-div和span标签","3.5 ",[23,127932,127933],{},"\u003Cdiv>",[23,127935,127936],{},"\u003Cspan>",[19,127938,127939,102792,127941,127943],{},[23,127940,127933],{},[23,127942,127936],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,127945,127946],{},[23,127947,127948],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,127950,127951],{},[23,127952,127953],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,127955,127956,127957,127959,127960,127962,127963,127966],{},"两者特点：①",[23,127958,127933],{}," 标签用来布局，但一行通常只放一个 ",[23,127961,127933],{},"。可以理解为一个大盒子，独占一行，在 ",[23,127964,127965],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,127968,79028,127969,127971,127972,127974],{},[23,127970,127936],{}," 标签也可用于布局，一行可以放多个 ",[23,127973,127936],{},"，可理解为小盒子。",{"title":62,"searchDepth":80,"depth":80,"links":127976},[127977,127978,127979,127980,127981],{"id":127831,"depth":80,"text":127832},{"id":127857,"depth":80,"text":127858},{"id":127870,"depth":80,"text":127871},{"id":127885,"depth":80,"text":127886},{"id":127929,"depth":80,"text":127982},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":127823,"description":1926},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":127989,"title":127990,"body":127991,"description":1926,"extension":1927,"meta":128188,"navigation":108,"path":128189,"seo":128190,"stem":128191,"__hash__":128192},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":127992,"toc":128180},[127993,127996,128000,128003,128009,128016,128022,128028,128031,128034,128037,128040,128043,128046,128049,128053,128056,128059,128062,128068,128074,128080,128087,128091,128097,128103,128106,128109,128115,128121,128127,128130,128133,128137,128140,128150,128156,128160,128169,128173,128176],[10,127994,127990],{"id":127995},"_4-html图像与链接",[14,127997,127999],{"id":127998},"_41-图像标签","4.1 图像标签",[19,128001,128002],{},"（1）标签",[19,128004,128005,128008],{},[23,128006,128007],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,128010,128011,128012,128015],{},"src是",[23,128013,128014],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,128017,128018,128019],{},"alt:文本，替换文本。图像不能显示的文字 ",[23,128020,128021],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,128023,128024,128025],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[23,128026,128027],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,128029,128030],{},"width:像素，设置图像的宽度",[19,128032,128033],{},"height:像素，设置图像的高度",[19,128035,128036],{},"border：像素，设置图像的边框粗细",[19,128038,128039],{},"（2）图像标签属性的注意点：",[19,128041,128042],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,128044,128045],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,128047,128048],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,128050,128052],{"id":128051},"_42-路径注意要点","4.2 路径注意要点：",[19,128054,128055],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,128057,128058],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,128060,128061],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,128063,128064,128065],{},"①同一级路径：图像文件位于HTML文件同一级，如",[23,128066,128067],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,128069,128070,128071],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[23,128072,128073],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,128075,128076,128077],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[23,128078,128079],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,128081,128082,128083,1130],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[2229,128084,128085],{"href":128085,"rel":128086},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[25668],[14,128088,128090],{"id":128089},"_43-超链接标签","4.3 超链接标签",[19,128092,128093,128096],{},[23,128094,128095],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,128098,128099,128100],{},"①语法格式：",[23,128101,128102],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,128104,128105],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,128107,128108],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,128110,128111,128112],{},"③链接分类：外部链接：",[23,128113,128114],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,128116,128117,128118],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[23,128119,128120],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,128122,128123,128124],{},"空链接：如果当时没有确定链接目标时，",[23,128125,128126],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,128128,128129],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,128131,128132],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,128134,128136],{"id":128135},"_44-锚点链接","4.4 锚点链接",[19,128138,128139],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,128141,128142,128143,128146,128147],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[23,128144,128145],{},"\u003Ca href=\"#two\">","第二级",[23,128148,128149],{},"\u003C\u002Fa>",[19,128151,128152,128153],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[23,128154,128155],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,128157,128159],{"id":128158},"_45-注释标签","4.5 注释标签",[19,128161,128162,128165,128166],{},[23,128163,128164],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[23,128167,128168],{},"ctrl+\u002F",[14,128170,128172],{"id":128171},"_46-特殊字符","4.6 特殊字符",[19,128174,128175],{},"可以实现添加多个空格",[3304,128177],{"style":128178,"src":128179},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":62,"searchDepth":80,"depth":80,"links":128181},[128182,128183,128184,128185,128186,128187],{"id":127998,"depth":80,"text":127999},{"id":128051,"depth":80,"text":128052},{"id":128089,"depth":80,"text":128090},{"id":128135,"depth":80,"text":128136},{"id":128158,"depth":80,"text":128159},{"id":128171,"depth":80,"text":128172},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":127990,"description":1926},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":128194,"title":128195,"body":128196,"description":1926,"extension":1927,"meta":128489,"navigation":108,"path":128490,"seo":128491,"stem":128492,"__hash__":128493},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":128197,"toc":128480},[128198,128201,128205,128208,128211,128214,128217,128220,128223,128226,128229,128232,128252,128258,128262,128265,128268,128271,128274,128277,128280,128284,128287,128290,128293,128296,128309,128314,128317,128320,128335,128338,128341,128344,128347,128350,128354,128357,128364,128367,128370,128373,128376,128379,128385,128388,128391,128397,128400,128403,128406,128412,128415,128418,128432,128439,128442,128445,128452,128461,128464,128467,128470,128474,128477],[10,128199,128195],{"id":128200},"_5-html表格列表与表单",[14,128202,128204],{"id":128203},"_51-表格标签","5.1 表格标签",[19,128206,128207],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,128209,128210],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,128212,128213],{},"②表格基本语法：",[3304,128215],{"style":128178,"src":128216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,128218,128219],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[3304,128221],{"style":128178,"src":128222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,128224,128225],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[3304,128227],{"style":128178,"src":128228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,128230,128231],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,128233,128234,128237,128238,128240,128241,128244,128245,128247,128248,128251],{},[23,128235,128236],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[23,128239,128236],{},"内部必须拥有",[23,128242,128243],{},"\u003Ctr>","标签，一般位于第一行，",[23,128246,128236],{},"比",[23,128249,128250],{},"\u003Cth>","范围广",[19,128253,128254,128257],{},[23,128255,128256],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,128259,128261],{"id":128260},"_52-合并单元格","5.2 合并单元格",[19,128263,128264],{},"（1）合并单元格方式：",[19,128266,128267],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,128269,128270],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,128272,128273],{},"（2）目标单元格：",[19,128275,128276],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,128278,128279],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,128281,128283],{"id":128282},"_53-列表标签","5.3 列表标签",[19,128285,128286],{},"（1）分类：无序列表、有序列表、自定义列表",[19,128288,128289],{},"①无序列表：",[3304,128291],{"style":128178,"src":128292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,128294,128295],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,128297,128298,128301,128302,128305,128306,128308],{},[23,128299,128300],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[23,128303,128304],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[23,128307,128300],{},"中输入其他标签或文字是不对的",[19,128310,128311,128313],{},[23,128312,128304],{},"之间相当于一个容器，可以容纳所有元素",[19,128315,128316],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,128318,128319],{},"在css中去除前边的小圆点采用如下代码:",[57,128321,128325],{"className":128322,"code":128323,"language":128324,"meta":62,"style":62},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[23,128326,128327],{"__ignoreMap":62},[66,128328,128329,128332],{"class":68,"line":69},[66,128330,128331],{"class":53084},"list-style",[66,128333,128334],{"class":76},": none;\n",[19,128336,128337],{},"②有序列表：",[3304,128339],{"style":128178,"src":128340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,128342,128343],{},"③自定义列表：",[3304,128345],{"style":128178,"src":128346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[3304,128348],{"style":128178,"src":128349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,128351,128353],{"id":128352},"_54-表单标签","5.4 表单标签",[19,128355,128356],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,128358,128359,128360,128363],{},"（1）表单域：包含单元素的区域，",[23,128361,128362],{},"\u003Cform>","标签可以实现信息的收集和传递。",[3304,128365],{"style":128178,"src":128366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,128368,128369],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,128371,128372],{},"表单元素提交必须有name属性",[19,128374,128375],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,128377,128378],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,128380,79005,128381,128384],{},[23,128382,128383],{},"\u003Cinput>","输入表单元素",[3304,128386],{"style":128178,"src":128387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[3304,128389],{"style":128178,"src":128390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,128392,128393,128394],{},"单选按钮：",[23,128395,128396],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[3304,128398],{"style":128178,"src":128399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,128401,128402],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[3304,128404],{"style":128178,"src":128405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,128407,128408,128411],{},[2141,128409,128410],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,128413,128414],{},"②select下拉表单元素：可以节约页面控件",[3304,128416],{"style":128178,"src":128417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,128419,128420,15600,128422,128425,128426,128428,128429,128431],{},[2141,128421,2028],{},[23,128423,128424],{},"\u003Cselect>","中至少包含一对",[23,128427,104487],{},"；在",[23,128430,104487],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,128433,128434,128435,128438],{},"③",[23,128436,128437],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[3304,128440],{"style":128178,"src":128441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,128443,128444],{},"3行20列",[14,128446,128448,128449,104466],{"id":128447},"_55-lable标签","5.5 ",[23,128450,128451],{},"\u003Clable>",[19,128453,128454,128455,128457,128458,128460],{},"它不是表单标签，但常常与表单标签搭配使用，",[23,128456,128451],{},"标签用于绑定一个表单标签，当点击",[23,128459,128451],{},"标签内的文本",[19,128462,128463],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[3304,128465],{"style":128178,"src":128466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[3304,128468],{"style":128178,"src":128469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,128471,128473],{"id":128472},"_56-实例","5.6 实例",[3304,128475],{"style":128178,"src":128476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[1903,128478,128479],{},"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":62,"searchDepth":80,"depth":80,"links":128481},[128482,128483,128484,128485,128486,128488],{"id":128203,"depth":80,"text":128204},{"id":128260,"depth":80,"text":128261},{"id":128282,"depth":80,"text":128283},{"id":128352,"depth":80,"text":128353},{"id":128447,"depth":80,"text":128487},"5.5 \u003Clable>标签",{"id":128472,"depth":80,"text":128473},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":128195,"description":1926},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":128495,"title":128496,"body":128497,"description":1926,"extension":1927,"meta":129046,"navigation":108,"path":129047,"seo":129048,"stem":129049,"__hash__":129050},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":128498,"toc":129021},[128499,128502,128506,128509,128512,128516,128519,128522,128525,128528,128531,128534,128537,128541,128544,128548,128551,128554,128557,128561,128564,128567,128570,128576,128579,128582,128585,128588,128591,128594,128597,128630,128634,128637,128640,128643,128647,128650,128653,128656,128659,128662,128666,128669,128672,128675,128679,128682,128686,128689,128693,128696,128701,128705,128708,128712,128715,128718,128721,128724,128751,128754,128758,128761,128764,128769,128772,128775,128779,128782,128787,128790,128793,128796,128800,128803,128806,128809,128813,128816,128819,128822,128826,128830,128833,128873,128876,128880,128887,128890,128894,128897,128943,128947,128950,128953,128956,128984,128988,128991,129018],[10,128500,128496],{"id":128501},"_6-css语法与文本样式",[14,128503,128505],{"id":128504},"_61-css语法规范","6.1 css语法规范",[19,128507,128508],{},"由两部分组成，选择器及一条或多条声明",[3304,128510],{"style":128178,"src":128511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,128513,128514],{},[2141,128515,2028],{},[19,128517,128518],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,128520,128521],{},"②属性与属性值以“键值对”的形式出现",[19,128523,128524],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,128526,128527],{},"④属性和属性值之间用英文“;”分开",[3304,128529],{"style":128178,"src":128530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[3304,128532],{"style":128178,"src":128533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[3304,128535],{"style":128178,"src":128536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,128538,128540],{"id":128539},"_62-css选择器","6.2 css选择器",[19,128542,128543],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[484,128545,128547],{"id":128546},"_621-标签选择器","6.2.1 标签选择器",[19,128549,128550],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,128552,128553],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[3304,128555],{"style":128178,"src":128556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[484,128558,128560],{"id":128559},"_622-类选择器","6.2.2 类选择器",[19,128562,128563],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,128565,128566],{},"②样例",[3304,128568],{"style":128178,"src":128569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,128571,128572,128573,128575],{},"③ ",[2141,128574,128410],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,128577,128578],{},"可以理解为给这个标签起了个名字，来表示；",[19,128580,128581],{},"长名称或词组可以使用横线来为选择器命名；",[19,128583,128584],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,128586,128587],{},"命名要有意义；",[3304,128589],{"style":128178,"src":128590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,128592,128593],{},"类选择器也可以指定特殊的元素p.center{}",[19,128595,128596],{},"p.center和.center都对",[57,128598,128600],{"className":128322,"code":128599,"language":128324,"meta":62,"style":62},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[23,128601,128602,128607,128616,128626],{"__ignoreMap":62},[66,128603,128604],{"class":68,"line":69},[66,128605,128606],{"class":758},"\u002F* 类选择器指定特殊元素 *\u002F\n",[66,128608,128609,128611,128614],{"class":68,"line":80},[66,128610,19],{"class":53084},[66,128612,128613],{"class":3793},".center",[66,128615,17375],{"class":76},[66,128617,128618,128620,128622,128624],{"class":68,"line":112},[66,128619,72305],{"class":102},[66,128621,53221],{"class":76},[66,128623,53376],{"class":102},[66,128625,3135],{"class":76},[66,128627,128628],{"class":68,"line":129},[66,128629,3407],{"class":76},[484,128631,128633],{"id":128632},"_623-多类名使用","6.2.3 多类名使用",[19,128635,128636],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[3304,128638],{"style":128178,"src":128639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,128641,128642],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[484,128644,128646],{"id":128645},"_624-id选择器","6.2.4 id选择器",[19,128648,128649],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,128651,128652],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[3304,128654],{"style":128178,"src":128655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,128657,128658],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,128660,128661],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[484,128663,128665],{"id":128664},"_625-通配符选择器","6.2.5 通配符选择器",[19,128667,128668],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,128670,128671],{},"* {",[19,128673,128674],{},"color=\"red\"}",[484,128676,128678],{"id":128677},"_626-总结","6.2.6 总结",[3304,128680],{"style":128178,"src":128681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,128683,128685],{"id":128684},"_63-css字体属性","6.3 css字体属性",[19,128687,128688],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[484,128690,128692],{"id":128691},"_631-字体系列","6.3.1 字体系列",[19,128694,128695],{},"font-family: '宋体';",[19,128697,128698,128700],{},[2141,128699,2028],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[484,128702,128704],{"id":128703},"_632-字体大小","6.3.2 字体大小",[19,128706,128707],{},"font-size: 20px",[19,128709,128710,28274],{},[2141,128711,128410],{},[19,128713,128714],{},"①px（像素）大小是网页的最常用单位",[19,128716,128717],{},"②谷歌浏览器默认为16px",[19,128719,128720],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,128722,128723],{},"④可以给body指定整个页面的大小：会自动引用",[57,128725,128727],{"className":128322,"code":128726,"language":128324,"meta":62,"style":62},"body {\n  font-size: 16px;\n}\n",[23,128728,128729,128735,128747],{"__ignoreMap":62},[66,128730,128731,128733],{"class":68,"line":69},[66,128732,53584],{"class":53084},[66,128734,17375],{"class":76},[66,128736,128737,128739,128741,128743,128745],{"class":68,"line":80},[66,128738,72405],{"class":102},[66,128740,53221],{"class":76},[66,128742,2580],{"class":102},[66,128744,53276],{"class":72},[66,128746,3135],{"class":76},[66,128748,128749],{"class":68,"line":112},[66,128750,3407],{"class":76},[19,128752,128753],{},"⑤标题标签比较特殊，需要单独指定大小",[484,128755,128757],{"id":128756},"_633-字体粗细","6.3.3 字体粗细",[19,128759,128760],{},"font-weight: bold;",[19,128762,128763],{},"font-weight: 100；",[19,128765,128766,128768],{},[2141,128767,2028],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,128770,128771],{},"font-weight= 400;",[19,128773,128774],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[484,128776,128778],{"id":128777},"_634-文字样式","6.3.4 文字样式",[19,128780,128781],{},"font-style: normal；",[19,128783,128784,28274],{},[2141,128785,128786],{},"属性值",[19,128788,128789],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,128791,128792],{},"②italic：浏览器会显示斜体的字体样式",[3304,128794],{"style":128178,"src":128795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[484,128797,128799],{"id":128798},"_635-字体符合属性","6.3.5 字体符合属性",[3304,128801],{"style":128178,"src":128802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[3304,128804],{"style":128178,"src":128805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,128807,128808],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,128810,128811,28274],{},[2141,128812,128410],{},[19,128814,128815],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,128817,128818],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,128820,128821],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,128823,128825],{"id":128824},"_64-css-test文本属性","6.4 css test文本属性",[484,128827,128829],{"id":128828},"_641-文本颜色","6.4.1 文本颜色",[19,128831,128832],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[57,128834,128836],{"className":128322,"code":128835,"language":128324,"meta":62,"style":62},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[23,128837,128838,128843,128849,128859,128864,128869],{"__ignoreMap":62},[66,128839,128840],{"class":68,"line":69},[66,128841,128842],{"class":758},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[66,128844,128845,128847],{"class":68,"line":80},[66,128846,19],{"class":53084},[66,128848,17375],{"class":76},[66,128850,128851,128853,128855,128857],{"class":68,"line":112},[66,128852,72684],{"class":102},[66,128854,53221],{"class":76},[66,128856,59201],{"class":102},[66,128858,3135],{"class":76},[66,128860,128861],{"class":68,"line":129},[66,128862,128863],{"class":758},"  \u002F* color: #ff0000; *\u002F\n",[66,128865,128866],{"class":68,"line":138},[66,128867,128868],{"class":758},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[66,128870,128871],{"class":68,"line":227},[66,128872,3407],{"class":76},[3304,128874],{"style":128178,"src":128875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[484,128877,128879],{"id":128878},"_642-对齐文本","6.4.2 对齐文本",[19,128881,128882,128883,128886],{},"text-align属于用于设置元素内文本内容的 ",[2141,128884,128885],{},"水平对齐"," 方式",[19,128888,128889],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[484,128891,128893],{"id":128892},"_643-装饰文本","6.4.3 装饰文本",[19,128895,128896],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[57,128898,128900],{"className":128322,"code":128899,"language":128324,"meta":62,"style":62},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[23,128901,128902,128908,128918,128922,128928,128939],{"__ignoreMap":62},[66,128903,128904,128906],{"class":68,"line":69},[66,128905,2229],{"class":53084},[66,128907,17375],{"class":76},[66,128909,128910,128912,128914,128916],{"class":68,"line":80},[66,128911,72281],{"class":102},[66,128913,53221],{"class":76},[66,128915,56518],{"class":102},[66,128917,3135],{"class":76},[66,128919,128920],{"class":68,"line":112},[66,128921,3407],{"class":76},[66,128923,128924,128926],{"class":68,"line":129},[66,128925,19],{"class":53084},[66,128927,17375],{"class":76},[66,128929,128930,128932,128934,128937],{"class":68,"line":138},[66,128931,72281],{"class":102},[66,128933,53221],{"class":76},[66,128935,128936],{"class":102},"underline",[66,128938,3135],{"class":76},[66,128940,128941],{"class":68,"line":227},[66,128942,3407],{"class":76},[484,128944,128946],{"id":128945},"_644-文本缩进","6.4.4 文本缩进",[19,128948,128949],{},"实现文本的第一行首行缩进自己指定的距离",[19,128951,128952],{},"20px往右边走；-20px往左边走",[19,128954,128955],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[57,128957,128959],{"className":128322,"code":128958,"language":128324,"meta":62,"style":62},"p {\n  text-indent: 2em;\n}\n",[23,128960,128961,128967,128980],{"__ignoreMap":62},[66,128962,128963,128965],{"class":68,"line":69},[66,128964,19],{"class":53084},[66,128966,17375],{"class":76},[66,128968,128969,128972,128974,128976,128978],{"class":68,"line":80},[66,128970,128971],{"class":102},"  text-indent",[66,128973,53221],{"class":76},[66,128975,795],{"class":102},[66,128977,25356],{"class":72},[66,128979,3135],{"class":76},[66,128981,128982],{"class":68,"line":112},[66,128983,3407],{"class":76},[484,128985,128987],{"id":128986},"_645-行间距","6.4.5 行间距",[19,128989,128990],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[57,128992,128994],{"className":128322,"code":128993,"language":128324,"meta":62,"style":62},"p {\n  line-height: 1.6;\n}\n",[23,128995,128996,129002,129014],{"__ignoreMap":62},[66,128997,128998,129000],{"class":68,"line":69},[66,128999,19],{"class":53084},[66,129001,17375],{"class":76},[66,129003,129004,129007,129009,129012],{"class":68,"line":80},[66,129005,129006],{"class":102},"  line-height",[66,129008,53221],{"class":76},[66,129010,129011],{"class":102},"1.6",[66,129013,3135],{"class":76},[66,129015,129016],{"class":68,"line":112},[66,129017,3407],{"class":76},[1903,129019,129020],{},"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":62,"searchDepth":80,"depth":80,"links":129022},[129023,129024,129032,129039],{"id":128504,"depth":80,"text":128505},{"id":128539,"depth":80,"text":128540,"children":129025},[129026,129027,129028,129029,129030,129031],{"id":128546,"depth":112,"text":128547},{"id":128559,"depth":112,"text":128560},{"id":128632,"depth":112,"text":128633},{"id":128645,"depth":112,"text":128646},{"id":128664,"depth":112,"text":128665},{"id":128677,"depth":112,"text":128678},{"id":128684,"depth":80,"text":128685,"children":129033},[129034,129035,129036,129037,129038],{"id":128691,"depth":112,"text":128692},{"id":128703,"depth":112,"text":128704},{"id":128756,"depth":112,"text":128757},{"id":128777,"depth":112,"text":128778},{"id":128798,"depth":112,"text":128799},{"id":128824,"depth":80,"text":128825,"children":129040},[129041,129042,129043,129044,129045],{"id":128828,"depth":112,"text":128829},{"id":128878,"depth":112,"text":128879},{"id":128892,"depth":112,"text":128893},{"id":128945,"depth":112,"text":128946},{"id":128986,"depth":112,"text":128987},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":128496,"description":1926},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":129052,"title":129053,"body":129054,"description":1926,"extension":1927,"meta":129703,"navigation":108,"path":129704,"seo":129705,"stem":129706,"__hash__":129707},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":129055,"toc":129684},[129056,129059,129063,129067,129127,129131,129141,129144,129147,129151,129176,129180,129183,129186,129189,129192,129195,129199,129202,129205,129247,129250,129276,129282,129285,129289,129293,129299,129302,129305,129308,129311,129314,129317,129362,129366,129369,129372,129376,129380,129409,129412,129417,129420,129423,129426,129429,129433,129437,129440,129442,129445,129449,129452,129456,129459,129462,129465,129469,129473,129479,129489,129492,129495,129498,129501,129504,129627,129635,129643,129681],[10,129057,129053],{"id":129058},"_7-css引入方式与选择器进阶",[14,129060,129062],{"id":129061},"_71-css引入方式","7.1 css引入方式",[484,129064,129066],{"id":129065},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[57,129068,129072],{"className":129069,"code":129070,"language":129071,"meta":62,"style":62},"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",[23,129073,129074,129082,129089,129101,129114,129119],{"__ignoreMap":62},[66,129075,129076,129078,129080],{"class":68,"line":69},[66,129077,413],{"class":76},[66,129079,1903],{"class":53084},[66,129081,53091],{"class":76},[66,129083,129084,129087],{"class":68,"line":80},[66,129085,129086],{"class":53084},"  h1",[66,129088,17375],{"class":76},[66,129090,129091,129094,129096,129099],{"class":68,"line":112},[66,129092,129093],{"class":102},"    color",[66,129095,53221],{"class":76},[66,129097,129098],{"class":102},"blue",[66,129100,3135],{"class":76},[66,129102,129103,129106,129108,129110,129112],{"class":68,"line":129},[66,129104,129105],{"class":102},"    font-size",[66,129107,53221],{"class":76},[66,129109,2779],{"class":102},[66,129111,53276],{"class":72},[66,129113,3135],{"class":76},[66,129115,129116],{"class":68,"line":138},[66,129117,129118],{"class":76},"  }\n",[66,129120,129121,129123,129125],{"class":68,"line":227},[66,129122,53569],{"class":76},[66,129124,1903],{"class":53084},[66,129126,53091],{"class":76},[19,129128,129129,28274],{},[2141,129130,128410],{},[19,129132,79005,129133,129136,129137,129140],{},[23,129134,129135],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[23,129138,129139],{},"\u003Chead>","标签中",[19,129142,129143],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,129145,129146],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[484,129148,129150],{"id":129149},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[57,129152,129154],{"className":129069,"code":129153,"language":129071,"meta":62,"style":62},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[23,129155,129156],{"__ignoreMap":62},[66,129157,129158,129160,129162,129164,129166,129169,129172,129174],{"class":68,"line":69},[66,129159,413],{"class":76},[66,129161,19],{"class":53084},[66,129163,64405],{"class":3793},[66,129165,99],{"class":76},[66,129167,129168],{"class":356},"\"color: red; font-size: 16px;\"",[66,129170,129171],{"class":76},">这是一个段落\u003C\u002F",[66,129173,19],{"class":53084},[66,129175,53091],{"class":76},[19,129177,129178,28274],{},[2141,129179,128410],{},[19,129181,129182],{},"①style其实就是标签的属性",[19,129184,129185],{},"②在双引号中间，写法要符合css规范",[19,129187,129188],{},"③可以控制当前的标签设置样式",[19,129190,129191],{},"④书写繁琐，简单时才用",[19,129193,129194],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[484,129196,129198],{"id":129197},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,129200,129201],{},"使用最多，单独建一个css文件，然后html引用",[19,129203,129204],{},"①css文件部分： style.css",[57,129206,129208],{"className":128322,"code":129207,"language":128324,"meta":62,"style":62},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[23,129209,129210,129215,129221,129231,129243],{"__ignoreMap":62},[66,129211,129212],{"class":68,"line":69},[66,129213,129214],{"class":758},"\u002F* style.css *\u002F\n",[66,129216,129217,129219],{"class":68,"line":80},[66,129218,10],{"class":53084},[66,129220,17375],{"class":76},[66,129222,129223,129225,129227,129229],{"class":68,"line":112},[66,129224,72684],{"class":102},[66,129226,53221],{"class":76},[66,129228,129098],{"class":102},[66,129230,3135],{"class":76},[66,129232,129233,129235,129237,129239,129241],{"class":68,"line":129},[66,129234,72405],{"class":102},[66,129236,53221],{"class":76},[66,129238,2779],{"class":102},[66,129240,53276],{"class":72},[66,129242,3135],{"class":76},[66,129244,129245],{"class":68,"line":138},[66,129246,3407],{"class":76},[19,129248,129249],{},"②html部分",[57,129251,129253],{"className":129069,"code":129252,"language":129071,"meta":62,"style":62},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[23,129254,129255],{"__ignoreMap":62},[66,129256,129257,129259,129261,129263,129265,129267,129269,129271,129274],{"class":68,"line":69},[66,129258,413],{"class":76},[66,129260,70784],{"class":53084},[66,129262,70787],{"class":3793},[66,129264,99],{"class":76},[66,129266,70792],{"class":356},[66,129268,62836],{"class":3793},[66,129270,99],{"class":76},[66,129272,129273],{"class":356},"\"style.css\"",[66,129275,53091],{"class":76},[19,129277,129278,129281],{},[23,129279,129280],{},"\u003Chr>","水平线标签（但是不常用！）",[19,129283,129284],{},"ctrl+0回到页面原来大小",[14,129286,129288],{"id":129287},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[484,129290,129292],{"id":129291},"_721-快速生成html","7.2.1 快速生成html",[19,129294,129295,129296],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[23,129297,129298],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,129300,129301],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,129303,129304],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,129306,129307],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,129309,129310],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,129312,129313],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,129315,129316],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[57,129318,129320],{"className":129069,"code":129319,"language":129071,"meta":62,"style":62},"\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",[23,129321,129322,129327,129332,129337,129342,129347,129352,129357],{"__ignoreMap":62},[66,129323,129324],{"class":68,"line":69},[66,129325,129326],{"class":758},"\u003C!-- Emmet 语法示例 -->\n",[66,129328,129329],{"class":68,"line":80},[66,129330,129331],{"class":758},"\u003C!-- div*3        → 生成3个div -->\n",[66,129333,129334],{"class":68,"line":112},[66,129335,129336],{"class":758},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[66,129338,129339],{"class":68,"line":129},[66,129340,129341],{"class":758},"\u003C!-- div+p        → 兄弟div和p -->\n",[66,129343,129344],{"class":68,"line":138},[66,129345,129346],{"class":758},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[66,129348,129349],{"class":68,"line":227},[66,129350,129351],{"class":758},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[66,129353,129354],{"class":68,"line":236},[66,129355,129356],{"class":758},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[66,129358,129359],{"class":68,"line":241},[66,129360,129361],{"class":758},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[484,129363,129365],{"id":129364},"_722-快速生成css","7.2.2 快速生成css",[19,129367,129368],{},"简写开头",[19,129370,129371],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,129373,129375],{"id":129374},"_73-css复合选择器","7.3 css复合选择器",[484,129377,129379],{"id":129378},"_731-后代选择器","7.3.1 后代选择器",[57,129381,129383],{"className":128322,"code":129382,"language":128324,"meta":62,"style":62},".parent .child {\n  color: blue;\n}\n",[23,129384,129385,129395,129405],{"__ignoreMap":62},[66,129386,129387,129390,129393],{"class":68,"line":69},[66,129388,129389],{"class":3793},".parent",[66,129391,129392],{"class":3793}," .child",[66,129394,17375],{"class":76},[66,129396,129397,129399,129401,129403],{"class":68,"line":80},[66,129398,72684],{"class":102},[66,129400,53221],{"class":76},[66,129402,129098],{"class":102},[66,129404,3135],{"class":76},[66,129406,129407],{"class":68,"line":112},[66,129408,3407],{"class":76},[19,129410,129411],{},"元素1 元素2 {样式声明}",[19,129413,129414],{},[2141,129415,129416],{},"注意点:",[19,129418,129419],{},"①元素1和元素2中间用空格隔开",[19,129421,129422],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,129424,129425],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,129427,129428],{},"④元素1和元素2可以是任意基础选择器",[484,129430,129432],{"id":129431},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,129434,129435],{},[2141,129436,129416],{},[19,129438,129439],{},"①元素1和元素2中间用大于号隔开",[19,129441,129422],{},[19,129443,129444],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[484,129446,129448],{"id":129447},"_733-并集选择器","7.3.3 并集选择器",[19,129450,129451],{},"元素1，元素2 {样式声明}",[19,129453,129454],{},[2141,129455,129416],{},[19,129457,129458],{},"①元素1和元素2中间用逗号隔开",[19,129460,129461],{},"②逗号可以理解为和的意思",[19,129463,129464],{},"③并集选择器通常用于集体声明",[484,129466,129468],{"id":129467},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,129470,129471],{},[2141,129472,129416],{},[19,129474,129475,129476,129478],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[70784,129477],{},"－:visited－:hover－:active。",[19,129480,129481,129482,129485,129486,27542],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[129483,129484],"hover",{}," 、 ",[129487,129488],"first-child",{},[19,129490,129491],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,129493,129494],{},"link对没访问的进行设置",[19,129496,129497],{},"vistied对已访问的进行改变",[19,129499,129500],{},"hover鼠标经过就会变",[19,129502,129503],{},"active常按(点)就会变",[57,129505,129507],{"className":128322,"code":129506,"language":128324,"meta":62,"style":62},"\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",[23,129508,129509,129514,129523,129533,129543,129547,129556,129567,129571,129579,129589,129599,129603,129612,129623],{"__ignoreMap":62},[66,129510,129511],{"class":68,"line":69},[66,129512,129513],{"class":758},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[66,129515,129516,129518,129521],{"class":68,"line":80},[66,129517,2229],{"class":53084},[66,129519,129520],{"class":3793},":link",[66,129522,17375],{"class":76},[66,129524,129525,129527,129529,129531],{"class":68,"line":112},[66,129526,72684],{"class":102},[66,129528,53221],{"class":76},[66,129530,64148],{"class":102},[66,129532,3135],{"class":76},[66,129534,129535,129537,129539,129541],{"class":68,"line":129},[66,129536,72281],{"class":102},[66,129538,53221],{"class":76},[66,129540,56518],{"class":102},[66,129542,3135],{"class":76},[66,129544,129545],{"class":68,"line":138},[66,129546,3407],{"class":76},[66,129548,129549,129551,129554],{"class":68,"line":227},[66,129550,2229],{"class":53084},[66,129552,129553],{"class":3793},":visited",[66,129555,17375],{"class":76},[66,129557,129558,129560,129562,129565],{"class":68,"line":236},[66,129559,72684],{"class":102},[66,129561,53221],{"class":76},[66,129563,129564],{"class":102},"purple",[66,129566,3135],{"class":76},[66,129568,129569],{"class":68,"line":241},[66,129570,3407],{"class":76},[66,129572,129573,129575,129577],{"class":68,"line":372},[66,129574,2229],{"class":53084},[66,129576,62719],{"class":3793},[66,129578,17375],{"class":76},[66,129580,129581,129583,129585,129587],{"class":68,"line":377},[66,129582,72684],{"class":102},[66,129584,53221],{"class":76},[66,129586,56670],{"class":102},[66,129588,3135],{"class":76},[66,129590,129591,129593,129595,129597],{"class":68,"line":392},[66,129592,72281],{"class":102},[66,129594,53221],{"class":76},[66,129596,128936],{"class":102},[66,129598,3135],{"class":76},[66,129600,129601],{"class":68,"line":405},[66,129602,3407],{"class":76},[66,129604,129605,129607,129610],{"class":68,"line":418},[66,129606,2229],{"class":53084},[66,129608,129609],{"class":3793},":active",[66,129611,17375],{"class":76},[66,129613,129614,129616,129618,129621],{"class":68,"line":430},[66,129615,72684],{"class":102},[66,129617,53221],{"class":76},[66,129619,129620],{"class":102},"green",[66,129622,3135],{"class":76},[66,129624,129625],{"class":68,"line":438},[66,129626,3407],{"class":76},[484,129628,129630,129631,129634],{"id":129629},"_735-伪类选择器","7.3.5 ",[129632,129633],"focus",{},"伪类选择器",[19,129636,129637,129639,129640,129642],{},[129632,129638],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[23,129641,128383],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[57,129644,129646],{"className":128322,"code":129645,"language":128324,"meta":62,"style":62},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[23,129647,129648,129656,129667,129677],{"__ignoreMap":62},[66,129649,129650,129652,129654],{"class":68,"line":69},[66,129651,351],{"class":53084},[66,129653,63679],{"class":3793},[66,129655,17375],{"class":76},[66,129657,129658,129661,129663,129665],{"class":68,"line":80},[66,129659,129660],{"class":102},"  border-color",[66,129662,53221],{"class":76},[66,129664,56670],{"class":102},[66,129666,3135],{"class":76},[66,129668,129669,129671,129673,129675],{"class":68,"line":112},[66,129670,72577],{"class":102},[66,129672,53221],{"class":76},[66,129674,56518],{"class":102},[66,129676,3135],{"class":76},[66,129678,129679],{"class":68,"line":129},[66,129680,3407],{"class":76},[1903,129682,129683],{},"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":62,"searchDepth":80,"depth":80,"links":129685},[129686,129691,129695],{"id":129061,"depth":80,"text":129062,"children":129687},[129688,129689,129690],{"id":129065,"depth":112,"text":129066},{"id":129149,"depth":112,"text":129150},{"id":129197,"depth":112,"text":129198},{"id":129287,"depth":80,"text":129288,"children":129692},[129693,129694],{"id":129291,"depth":112,"text":129292},{"id":129364,"depth":112,"text":129365},{"id":129374,"depth":80,"text":129375,"children":129696},[129697,129698,129699,129700,129701],{"id":129378,"depth":112,"text":129379},{"id":129431,"depth":112,"text":129432},{"id":129447,"depth":112,"text":129448},{"id":129467,"depth":112,"text":129468},{"id":129629,"depth":112,"text":129702},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":129053,"description":1926},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":129709,"title":129710,"body":129711,"description":1926,"extension":1927,"meta":131634,"navigation":108,"path":131635,"seo":131636,"stem":131637,"__hash__":131638},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":129712,"toc":131608},[129713,129716,129720,129729,129733,129759,129764,129767,129770,129773,129776,129780,129783,129793,129801,129805,129840,129845,129848,129851,129854,129857,129861,129864,129873,129877,129890,129895,129898,129901,129904,129908,129911,129915,129918,129973,129976,130007,130010,130064,130068,130071,130237,130360,130363,130366,130369,130372,130376,130379,130383,130386,130389,130393,130396,130427,130454,130482,130485,130489,130515,130558,130562,130656,130659,130686,130689,130692,130695,130698,130701,130704,130707,130710,130713,130717,130774,130801,130805,130853,130857,130898,130900,130903,130906,130909,130912,130916,131008,131011,131014,131017,131021,131144,131345,131349,131353,131356,131359,131362,131366,131369,131372,131397,131400,131403,131406,131409,131412,131416,131424,131486,131489,131547,131550,131553,131556,131559,131562,131565,131568,131605],[10,129714,129710],{"id":129715},"_8-css显示模式与背景特性",[14,129717,129719],{"id":129718},"_81-css元素显示模式","8.1 css元素显示模式",[19,129721,129722,129723,129725,129726,129728],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[23,129724,127933],{},"自己占一行，比如一行可以放多个",[23,129727,127936],{},"，HTML 元素一般分为块元素和行内元素两种类型",[484,129730,129732],{"id":129731},"_811-块元素","8.1.1 块元素",[19,129734,129735,129736,129738,129739,2204,129742,2204,129744,2204,129746,2204,129749,2204,129752,129755,129756,129758],{},"常见的块元素有",[23,129737,127837],{},"~",[23,129740,129741],{},"\u003Ch6>",[23,129743,127863],{},[23,129745,127933],{},[23,129747,129748],{},"\u003Cul>",[23,129750,129751],{},"\u003Col>",[23,129753,129754],{},"\u003Cli>","等，其中 ",[23,129757,127933],{}," 标签是最典型的块元素",[19,129760,129761],{},[2141,129762,129763],{},"块级元素的特点：",[19,129765,129766],{},"① 比较霸道，自己独占一行。",[19,129768,129769],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,129771,129772],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,129774,129775],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,129777,129778],{},[2141,129779,2028],{},[19,129781,129782],{},"①文字类的元素内不能使用块级元素",[19,129784,79028,129785,129787,129788,129790,129791],{},[23,129786,127863],{}," 标签主要用于存放文字，因此 ",[23,129789,127863],{}," 里面不能放块级元素，特别是不能放",[23,129792,127933],{},[19,129794,129795,129796,129738,129798,129800],{},"⑥同理， ",[23,129797,127837],{},[23,129799,129741],{},"等都是文字类块级标签，里面也不能放其他块级元素",[484,129802,129804],{"id":129803},"_812-行内元素","8.1.2 行内元素",[19,129806,129807,129808,2204,129810,2204,129813,2204,129816,2204,129819,2204,129822,2204,129825,2204,129828,2204,129831,2204,129834,129836,129837,129839],{},"常见的行内元素有 ",[23,129809,128095],{},[23,129811,129812],{},"\u003Cstrong>",[23,129814,129815],{},"\u003Cb>",[23,129817,129818],{},"\u003Cem>",[23,129820,129821],{},"\u003Ci>",[23,129823,129824],{},"\u003Cdel>",[23,129826,129827],{},"\u003Cs>",[23,129829,129830],{},"\u003Cins>",[23,129832,129833],{},"\u003Cu>",[23,129835,127936],{}," 等，其中 ",[23,129838,127936],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,129841,129842],{},[2141,129843,129844],{},"特点：",[19,129846,129847],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,129849,129850],{},"② 高、宽直接设置是无效的。",[19,129852,129853],{},"③ 默认宽度就是它本身内容的宽度。",[19,129855,129856],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,129858,129859],{},[2141,129860,2028],{},[19,129862,129863],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,129865,129866,129867,129869,129870,129872],{},"②特殊情况链接 ",[23,129868,128095],{}," 里面可以放块级元素，但是给 ",[23,129871,128095],{}," 转换一下块级模式最安全",[484,129874,129876],{"id":129875},"_813-行内块元素","8.1.3 行内块元素",[19,129878,129879,129880,2204,129883,2204,129886,129889],{},"在行内元素中有几个特殊的标签 —— ",[23,129881,129882],{},"\u003Cimg \u002F>",[23,129884,129885],{},"\u003Cinput \u002F>",[23,129887,129888],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,129891,129892],{},[2141,129893,129894],{},"行内块元素的特点：",[19,129896,129897],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,129899,129900],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,129902,129903],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[484,129905,129907],{"id":129906},"_814-总结","8.1.4 总结",[3304,129909],{"style":128178,"src":129910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[484,129912,129914],{"id":129913},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,129916,129917],{},"①转换为块元素：display:block;",[57,129919,129921],{"className":128322,"code":129920,"language":128324,"meta":62,"style":62},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[23,129922,129923,129928,129934,129945,129957,129969],{"__ignoreMap":62},[66,129924,129925],{"class":68,"line":69},[66,129926,129927],{"class":758},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[66,129929,129930,129932],{"class":68,"line":80},[66,129931,2229],{"class":53084},[66,129933,17375],{"class":76},[66,129935,129936,129939,129941,129943],{"class":68,"line":112},[66,129937,129938],{"class":102},"  display",[66,129940,53221],{"class":76},[66,129942,62648],{"class":102},[66,129944,3135],{"class":76},[66,129946,129947,129949,129951,129953,129955],{"class":68,"line":129},[66,129948,72347],{"class":102},[66,129950,53221],{"class":76},[66,129952,310],{"class":102},[66,129954,53276],{"class":72},[66,129956,3135],{"class":76},[66,129958,129959,129961,129963,129965,129967],{"class":68,"line":138},[66,129960,72567],{"class":102},[66,129962,53221],{"class":76},[66,129964,2385],{"class":102},[66,129966,53276],{"class":72},[66,129968,3135],{"class":76},[66,129970,129971],{"class":68,"line":227},[66,129972,3407],{"class":76},[19,129974,129975],{},"②转换为行内元素：display:inline;",[57,129977,129979],{"className":128322,"code":129978,"language":128324,"meta":62,"style":62},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[23,129980,129981,129986,129992,130003],{"__ignoreMap":62},[66,129982,129983],{"class":68,"line":69},[66,129984,129985],{"class":758},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[66,129987,129988,129990],{"class":68,"line":80},[66,129989,53395],{"class":53084},[66,129991,17375],{"class":76},[66,129993,129994,129996,129998,130001],{"class":68,"line":112},[66,129995,129938],{"class":102},[66,129997,53221],{"class":76},[66,129999,130000],{"class":102},"inline",[66,130002,3135],{"class":76},[66,130004,130005],{"class":68,"line":129},[66,130006,3407],{"class":76},[19,130008,130009],{},"③转换为行内块：display:inline-block;",[57,130011,130013],{"className":128322,"code":130012,"language":128324,"meta":62,"style":62},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[23,130014,130015,130020,130026,130036,130048,130060],{"__ignoreMap":62},[66,130016,130017],{"class":68,"line":69},[66,130018,130019],{"class":758},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[66,130021,130022,130024],{"class":68,"line":80},[66,130023,66],{"class":53084},[66,130025,17375],{"class":76},[66,130027,130028,130030,130032,130034],{"class":68,"line":112},[66,130029,129938],{"class":102},[66,130031,53221],{"class":76},[66,130033,74162],{"class":102},[66,130035,3135],{"class":76},[66,130037,130038,130040,130042,130044,130046],{"class":68,"line":129},[66,130039,72347],{"class":102},[66,130041,53221],{"class":76},[66,130043,2591],{"class":102},[66,130045,53276],{"class":72},[66,130047,3135],{"class":76},[66,130049,130050,130052,130054,130056,130058],{"class":68,"line":138},[66,130051,72567],{"class":102},[66,130053,53221],{"class":76},[66,130055,2927],{"class":102},[66,130057,53276],{"class":72},[66,130059,3135],{"class":76},[66,130061,130062],{"class":68,"line":227},[66,130063,3407],{"class":76},[484,130065,130067],{"id":130066},"_816-小米侧边栏","8.1.6 小米侧边栏",[3304,130069],{"style":128178,"src":130070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[57,130072,130074],{"className":129069,"code":130073,"language":129071,"meta":62,"style":62},"\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",[23,130075,130076,130081,130096,130115,130134,130153,130172,130191,130210,130229],{"__ignoreMap":62},[66,130077,130078],{"class":68,"line":69},[66,130079,130080],{"class":758},"\u003C!-- 小米侧边栏案例 -->\n",[66,130082,130083,130085,130087,130089,130091,130094],{"class":68,"line":80},[66,130084,413],{"class":76},[66,130086,53395],{"class":53084},[66,130088,55268],{"class":3793},[66,130090,99],{"class":76},[66,130092,130093],{"class":356},"\"sidebar\"",[66,130095,53091],{"class":76},[66,130097,130098,130100,130102,130104,130106,130108,130111,130113],{"class":68,"line":112},[66,130099,53928],{"class":76},[66,130101,2229],{"class":53084},[66,130103,62836],{"class":3793},[66,130105,99],{"class":76},[66,130107,62841],{"class":356},[66,130109,130110],{"class":76},">手机 电话卡\u003C\u002F",[66,130112,2229],{"class":53084},[66,130114,53091],{"class":76},[66,130116,130117,130119,130121,130123,130125,130127,130130,130132],{"class":68,"line":129},[66,130118,53928],{"class":76},[66,130120,2229],{"class":53084},[66,130122,62836],{"class":3793},[66,130124,99],{"class":76},[66,130126,62841],{"class":356},[66,130128,130129],{"class":76},">电视 盒子\u003C\u002F",[66,130131,2229],{"class":53084},[66,130133,53091],{"class":76},[66,130135,130136,130138,130140,130142,130144,130146,130149,130151],{"class":68,"line":138},[66,130137,53928],{"class":76},[66,130139,2229],{"class":53084},[66,130141,62836],{"class":3793},[66,130143,99],{"class":76},[66,130145,62841],{"class":356},[66,130147,130148],{"class":76},">笔记本 平板\u003C\u002F",[66,130150,2229],{"class":53084},[66,130152,53091],{"class":76},[66,130154,130155,130157,130159,130161,130163,130165,130168,130170],{"class":68,"line":227},[66,130156,53928],{"class":76},[66,130158,2229],{"class":53084},[66,130160,62836],{"class":3793},[66,130162,99],{"class":76},[66,130164,62841],{"class":356},[66,130166,130167],{"class":76},">出行 穿戴\u003C\u002F",[66,130169,2229],{"class":53084},[66,130171,53091],{"class":76},[66,130173,130174,130176,130178,130180,130182,130184,130187,130189],{"class":68,"line":236},[66,130175,53928],{"class":76},[66,130177,2229],{"class":53084},[66,130179,62836],{"class":3793},[66,130181,99],{"class":76},[66,130183,62841],{"class":356},[66,130185,130186],{"class":76},">智能 路由器\u003C\u002F",[66,130188,2229],{"class":53084},[66,130190,53091],{"class":76},[66,130192,130193,130195,130197,130199,130201,130203,130206,130208],{"class":68,"line":241},[66,130194,53928],{"class":76},[66,130196,2229],{"class":53084},[66,130198,62836],{"class":3793},[66,130200,99],{"class":76},[66,130202,62841],{"class":356},[66,130204,130205],{"class":76},">健康 儿童\u003C\u002F",[66,130207,2229],{"class":53084},[66,130209,53091],{"class":76},[66,130211,130212,130214,130216,130218,130220,130222,130225,130227],{"class":68,"line":372},[66,130213,53928],{"class":76},[66,130215,2229],{"class":53084},[66,130217,62836],{"class":3793},[66,130219,99],{"class":76},[66,130221,62841],{"class":356},[66,130223,130224],{"class":76},">耳机 音响\u003C\u002F",[66,130226,2229],{"class":53084},[66,130228,53091],{"class":76},[66,130230,130231,130233,130235],{"class":68,"line":377},[66,130232,53569],{"class":76},[66,130234,53395],{"class":53084},[66,130236,53091],{"class":76},[57,130238,130240],{"className":128322,"code":130239,"language":128324,"meta":62,"style":62},".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",[23,130241,130242,130251,130261,130274,130286,130298,130310,130320,130331,130335,130345,130356],{"__ignoreMap":62},[66,130243,130244,130247,130249],{"class":68,"line":69},[66,130245,130246],{"class":3793},".sidebar",[66,130248,3240],{"class":53084},[66,130250,17375],{"class":76},[66,130252,130253,130255,130257,130259],{"class":68,"line":80},[66,130254,129938],{"class":102},[66,130256,53221],{"class":76},[66,130258,62648],{"class":102},[66,130260,3135],{"class":76},[66,130262,130263,130265,130267,130270,130272],{"class":68,"line":112},[66,130264,72347],{"class":102},[66,130266,53221],{"class":76},[66,130268,130269],{"class":102},"234",[66,130271,53276],{"class":72},[66,130273,3135],{"class":76},[66,130275,130276,130278,130280,130282,130284],{"class":68,"line":129},[66,130277,72567],{"class":102},[66,130279,53221],{"class":76},[66,130281,2434],{"class":102},[66,130283,53276],{"class":72},[66,130285,3135],{"class":76},[66,130287,130288,130290,130292,130294,130296],{"class":68,"line":138},[66,130289,129006],{"class":102},[66,130291,53221],{"class":76},[66,130293,2434],{"class":102},[66,130295,53276],{"class":72},[66,130297,3135],{"class":76},[66,130299,130300,130302,130304,130306,130308],{"class":68,"line":227},[66,130301,72602],{"class":102},[66,130303,53221],{"class":76},[66,130305,2927],{"class":102},[66,130307,53276],{"class":72},[66,130309,3135],{"class":76},[66,130311,130312,130314,130316,130318],{"class":68,"line":236},[66,130313,72684],{"class":102},[66,130315,53221],{"class":76},[66,130317,62621],{"class":102},[66,130319,3135],{"class":76},[66,130321,130322,130324,130326,130329],{"class":68,"line":241},[66,130323,72657],{"class":102},[66,130325,53221],{"class":76},[66,130327,130328],{"class":102},"#55585a",[66,130330,3135],{"class":76},[66,130332,130333],{"class":68,"line":372},[66,130334,3407],{"class":76},[66,130336,130337,130339,130341,130343],{"class":68,"line":377},[66,130338,130246],{"class":3793},[66,130340,3240],{"class":53084},[66,130342,62719],{"class":3793},[66,130344,17375],{"class":76},[66,130346,130347,130349,130351,130354],{"class":68,"line":392},[66,130348,72657],{"class":102},[66,130350,53221],{"class":76},[66,130352,130353],{"class":102},"#ff6700",[66,130355,3135],{"class":76},[66,130357,130358],{"class":68,"line":405},[66,130359,3407],{"class":76},[3304,130361],{"style":128178,"src":130362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,130364,130365],{},"行高=盒子高度：实现文字的垂直居中",[19,130367,130368],{},"原理讲解：",[3304,130370],{"style":128178,"src":130371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,130373,130375],{"id":130374},"_82-css背景","8.2 css背景",[19,130377,130378],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[484,130380,130382],{"id":130381},"_821-背景颜色","8.2.1 背景颜色",[19,130384,130385],{},"background-color:颜色值;",[19,130387,130388],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[484,130390,130392],{"id":130391},"_822-背景图片","8.2.2 背景图片",[19,130394,130395],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[57,130397,130399],{"className":128322,"code":130398,"language":128324,"meta":62,"style":62},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[23,130400,130401,130407,130423],{"__ignoreMap":62},[66,130402,130403,130405],{"class":68,"line":69},[66,130404,53395],{"class":53084},[66,130406,17375],{"class":76},[66,130408,130409,130412,130414,130416,130418,130421],{"class":68,"line":80},[66,130410,130411],{"class":102},"  background-image",[66,130413,53221],{"class":76},[66,130415,63505],{"class":102},[66,130417,348],{"class":76},[66,130419,130420],{"class":1234},"images\u002Fbg.png",[66,130422,4543],{"class":76},[66,130424,130425],{"class":68,"line":112},[66,130426,3407],{"class":76},[2129,130428,130429,130438],{},[2132,130430,130431],{},[2135,130432,130433,130436],{},[2138,130434,130435],{"align":25539},"参数值",[2138,130437,104469],{"align":25539},[2176,130439,130440,130447],{},[2135,130441,130442,130444],{},[2181,130443,56518],{"align":25539},[2181,130445,130446],{"align":25539},"无背景图（默认的）",[2135,130448,130449,130451],{},[2181,130450,63505],{"align":25539},[2181,130452,130453],{"align":25539},"使用绝对或相对地址指定背景图像",[57,130455,130456],{"className":128322,"code":130398,"language":128324,"meta":62,"style":62},[23,130457,130458,130464,130478],{"__ignoreMap":62},[66,130459,130460,130462],{"class":68,"line":69},[66,130461,53395],{"class":53084},[66,130463,17375],{"class":76},[66,130465,130466,130468,130470,130472,130474,130476],{"class":68,"line":80},[66,130467,130411],{"class":102},[66,130469,53221],{"class":76},[66,130471,63505],{"class":102},[66,130473,348],{"class":76},[66,130475,130420],{"class":1234},[66,130477,4543],{"class":76},[66,130479,130480],{"class":68,"line":112},[66,130481,3407],{"class":76},[19,130483,130484],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[484,130486,130488],{"id":130487},"_823-背景平铺","8.2.3 背景平铺",[57,130490,130492],{"className":128322,"code":130491,"language":128324,"meta":62,"style":62},"div {\n  background-repeat: no-repeat;\n}\n",[23,130493,130494,130500,130511],{"__ignoreMap":62},[66,130495,130496,130498],{"class":68,"line":69},[66,130497,53395],{"class":53084},[66,130499,17375],{"class":76},[66,130501,130502,130505,130507,130509],{"class":68,"line":80},[66,130503,130504],{"class":102},"  background-repeat",[66,130506,53221],{"class":76},[66,130508,63515],{"class":102},[66,130510,3135],{"class":76},[66,130512,130513],{"class":68,"line":112},[66,130514,3407],{"class":76},[2129,130516,130517,130525],{},[2132,130518,130519],{},[2135,130520,130521,130523],{},[2138,130522,130435],{"align":25539},[2138,130524,104469],{"align":25539},[2176,130526,130527,130535,130542,130550],{},[2135,130528,130529,130532],{},[2181,130530,130531],{"align":25539},"repeat",[2181,130533,130534],{"align":25539},"背景图像在纵向和横向上平铺（默认的）",[2135,130536,130537,130539],{},[2181,130538,63515],{"align":25539},[2181,130540,130541],{"align":25539},"背景图像不平铺",[2135,130543,130544,130547],{},[2181,130545,130546],{"align":25539},"repeat-x",[2181,130548,130549],{"align":25539},"背景图像在横向上平铺",[2135,130551,130552,130555],{},[2181,130553,130554],{"align":25539},"repeat-y",[2181,130556,130557],{"align":25539},"背景图像在纵向平铺",[484,130559,130561],{"id":130560},"_824-背景图片位置","8.2.4 背景图片位置",[57,130563,130565],{"className":128322,"code":130564,"language":128324,"meta":62,"style":62},"\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",[23,130566,130567,130572,130578,130592,130596,130601,130607,130623,130627,130632,130638,130652],{"__ignoreMap":62},[66,130568,130569],{"class":68,"line":69},[66,130570,130571],{"class":758},"\u002F* 方位名词 *\u002F\n",[66,130573,130574,130576],{"class":68,"line":80},[66,130575,53395],{"class":53084},[66,130577,17375],{"class":76},[66,130579,130580,130583,130585,130587,130590],{"class":68,"line":112},[66,130581,130582],{"class":102},"  background-position",[66,130584,53221],{"class":76},[66,130586,53376],{"class":102},[66,130588,130589],{"class":102}," top",[66,130591,3135],{"class":76},[66,130593,130594],{"class":68,"line":129},[66,130595,3407],{"class":76},[66,130597,130598],{"class":68,"line":138},[66,130599,130600],{"class":758},"\u002F* 精确单位 *\u002F\n",[66,130602,130603,130605],{"class":68,"line":227},[66,130604,53395],{"class":53084},[66,130606,17375],{"class":76},[66,130608,130609,130611,130613,130615,130617,130619,130621],{"class":68,"line":236},[66,130610,130582],{"class":102},[66,130612,53221],{"class":76},[66,130614,2679],{"class":102},[66,130616,53276],{"class":72},[66,130618,59284],{"class":102},[66,130620,53276],{"class":72},[66,130622,3135],{"class":76},[66,130624,130625],{"class":68,"line":241},[66,130626,3407],{"class":76},[66,130628,130629],{"class":68,"line":372},[66,130630,130631],{"class":758},"\u002F* 混合单位 *\u002F\n",[66,130633,130634,130636],{"class":68,"line":377},[66,130635,53395],{"class":53084},[66,130637,17375],{"class":76},[66,130639,130640,130642,130644,130646,130648,130650],{"class":68,"line":392},[66,130641,130582],{"class":102},[66,130643,53221],{"class":76},[66,130645,2679],{"class":102},[66,130647,53276],{"class":72},[66,130649,18947],{"class":102},[66,130651,3135],{"class":76},[66,130653,130654],{"class":68,"line":405},[66,130655,3407],{"class":76},[19,130657,130658],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[2129,130660,130661,130669],{},[2132,130662,130663],{},[2135,130664,130665,130667],{},[2138,130666,130435],{"align":25539},[2138,130668,27671],{"align":25539},[2176,130670,130671,130678],{},[2135,130672,130673,130675],{},[2181,130674,53752],{"align":25539},[2181,130676,130677],{"align":25539},"百分数|由浮点数和单位标识符组成的长度值",[2135,130679,130680,130683],{},[2181,130681,130682],{"align":25539},"position",[2181,130684,130685],{"align":25539},"top|center|bottom|left|center|right 方位名词",[19,130687,130688],{},"其他说明：",[19,130690,130691],{},"①参数是方位名词",[19,130693,130694],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,130696,130697],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,130699,130700],{},"②参数是精确单位",[19,130702,130703],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,130705,130706],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,130708,130709],{},"③参数是混合单位",[19,130711,130712],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[484,130714,130716],{"id":130715},"_825-背景图片固定","8.2.5 背景图片固定",[57,130718,130720],{"className":128322,"code":130719,"language":128324,"meta":62,"style":62},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[23,130721,130722,130727,130733,130745,130749,130754,130760,130770],{"__ignoreMap":62},[66,130723,130724],{"class":68,"line":69},[66,130725,130726],{"class":758},"\u002F* 背景滚动（默认） *\u002F\n",[66,130728,130729,130731],{"class":68,"line":80},[66,130730,53395],{"class":53084},[66,130732,17375],{"class":76},[66,130734,130735,130738,130740,130743],{"class":68,"line":112},[66,130736,130737],{"class":102},"  background-attachment",[66,130739,53221],{"class":76},[66,130741,130742],{"class":102},"scroll",[66,130744,3135],{"class":76},[66,130746,130747],{"class":68,"line":129},[66,130748,3407],{"class":76},[66,130750,130751],{"class":68,"line":138},[66,130752,130753],{"class":758},"\u002F* 背景固定 *\u002F\n",[66,130755,130756,130758],{"class":68,"line":227},[66,130757,53395],{"class":53084},[66,130759,17375],{"class":76},[66,130761,130762,130764,130766,130768],{"class":68,"line":236},[66,130763,130737],{"class":102},[66,130765,53221],{"class":76},[66,130767,88009],{"class":102},[66,130769,3135],{"class":76},[66,130771,130772],{"class":68,"line":241},[66,130773,3407],{"class":76},[2129,130775,130776,130785],{},[2132,130777,130778],{},[2135,130779,130780,130783],{},[2138,130781,130782],{"align":25539},"参数",[2138,130784,104469],{"align":25539},[2176,130786,130787,130794],{},[2135,130788,130789,130791],{},[2181,130790,130742],{"align":25539},[2181,130792,130793],{"align":25539},"背景图像是随对象内容滚动",[2135,130795,130796,130798],{},[2181,130797,88009],{"align":25539},[2181,130799,130800],{"align":25539},"背景图像固定",[484,130802,130804],{"id":130803},"_826-背景样式合写","8.2.6 背景样式合写",[57,130806,130808],{"className":128322,"code":130807,"language":128324,"meta":62,"style":62},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[23,130809,130810,130815,130821,130849],{"__ignoreMap":62},[66,130811,130812],{"class":68,"line":69},[66,130813,130814],{"class":758},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[66,130816,130817,130819],{"class":68,"line":80},[66,130818,53395],{"class":53084},[66,130820,17375],{"class":76},[66,130822,130823,130825,130827,130829,130832,130834,130836,130838,130840,130843,130845,130847],{"class":68,"line":112},[66,130824,72390],{"class":102},[66,130826,53221],{"class":76},[66,130828,62621],{"class":102},[66,130830,130831],{"class":102}," url",[66,130833,348],{"class":76},[66,130835,130420],{"class":1234},[66,130837,15519],{"class":76},[66,130839,63515],{"class":102},[66,130841,130842],{"class":102}," fixed",[66,130844,18947],{"class":102},[66,130846,130589],{"class":102},[66,130848,3135],{"class":76},[66,130850,130851],{"class":68,"line":129},[66,130852,3407],{"class":76},[484,130854,130856],{"id":130855},"_827-背景色半透明","8.2.7 背景色半透明",[57,130858,130860],{"className":128322,"code":130859,"language":128324,"meta":62,"style":62},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[23,130861,130862,130868,130894],{"__ignoreMap":62},[66,130863,130864,130866],{"class":68,"line":69},[66,130865,53395],{"class":53084},[66,130867,17375],{"class":76},[66,130869,130870,130872,130874,130876,130878,130880,130882,130884,130886,130888,130890,130892],{"class":68,"line":80},[66,130871,72390],{"class":102},[66,130873,53221],{"class":76},[66,130875,56891],{"class":102},[66,130877,348],{"class":76},[66,130879,2183],{"class":102},[66,130881,307],{"class":76},[66,130883,2183],{"class":102},[66,130885,307],{"class":76},[66,130887,2183],{"class":102},[66,130889,307],{"class":76},[66,130891,102295],{"class":102},[66,130893,4543],{"class":76},[66,130895,130896],{"class":68,"line":112},[66,130897,3407],{"class":76},[19,130899,101171],{},[19,130901,130902],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,130904,130905],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,130907,130908],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,130910,130911],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[484,130913,130915],{"id":130914},"_828-总结","8.2.8 总结",[2129,130917,130918,130929],{},[2132,130919,130920],{},[2135,130921,130922,130925,130927],{},[2138,130923,130924],{"align":25539},"属性",[2138,130926,104469],{"align":25539},[2138,130928,2144],{"align":25539},[2176,130930,130931,130942,130953,130964,130975,130986,130997],{},[2135,130932,130933,130936,130939],{},[2181,130934,130935],{"align":25539},"background-color",[2181,130937,130938],{"align":25539},"背景颜色",[2181,130940,130941],{"align":25539},"预定义的颜色值\u002F十六进制\u002FRGB代码",[2135,130943,130944,130947,130950],{},[2181,130945,130946],{"align":25539},"background-image",[2181,130948,130949],{"align":25539},"背景图片",[2181,130951,130952],{"align":25539},"url(图片路径)",[2135,130954,130955,130958,130961],{},[2181,130956,130957],{"align":25539},"background-repeat",[2181,130959,130960],{"align":25539},"是否平铺",[2181,130962,130963],{"align":25539},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[2135,130965,130966,130969,130972],{},[2181,130967,130968],{"align":25539},"background-position",[2181,130970,130971],{"align":25539},"背景位置",[2181,130973,130974],{"align":25539},"length\u002Fposition 分别是x和y坐标",[2135,130976,130977,130980,130983],{},[2181,130978,130979],{"align":25539},"background-attachment",[2181,130981,130982],{"align":25539},"背景附着",[2181,130984,130985],{"align":25539},"scroll(背景滚动) \u002Ffixed (背景固定)",[2135,130987,130988,130991,130994],{},[2181,130989,130990],{"align":25539},"背景简写",[2181,130992,130993],{"align":25539},"书写更简单",[2181,130995,130996],{"align":25539},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[2135,130998,130999,131002,131005],{},[2181,131000,131001],{"align":25539},"背景半透明",[2181,131003,131004],{"align":25539},"背景颜色半透明",[2181,131006,131007],{"align":25539},"background: rgba(0,0,0.3); 后面必须是4个值",[19,131009,131010],{},"颜色渐变：",[3304,131012],{"style":128178,"src":131013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[3304,131015],{"style":128178,"src":131016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[484,131018,131020],{"id":131019},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[57,131022,131024],{"className":129069,"code":131023,"language":129071,"meta":62,"style":62},"\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",[23,131025,131026,131041,131060,131079,131098,131117,131136],{"__ignoreMap":62},[66,131027,131028,131030,131032,131034,131036,131039],{"class":68,"line":69},[66,131029,413],{"class":76},[66,131031,53395],{"class":53084},[66,131033,55268],{"class":3793},[66,131035,99],{"class":76},[66,131037,131038],{"class":356},"\"nav\"",[66,131040,53091],{"class":76},[66,131042,131043,131045,131047,131049,131051,131053,131056,131058],{"class":68,"line":80},[66,131044,53928],{"class":76},[66,131046,2229],{"class":53084},[66,131048,62836],{"class":3793},[66,131050,99],{"class":76},[66,131052,62841],{"class":356},[66,131054,131055],{"class":76},">五彩导航1\u003C\u002F",[66,131057,2229],{"class":53084},[66,131059,53091],{"class":76},[66,131061,131062,131064,131066,131068,131070,131072,131075,131077],{"class":68,"line":112},[66,131063,53928],{"class":76},[66,131065,2229],{"class":53084},[66,131067,62836],{"class":3793},[66,131069,99],{"class":76},[66,131071,62841],{"class":356},[66,131073,131074],{"class":76},">五彩导航2\u003C\u002F",[66,131076,2229],{"class":53084},[66,131078,53091],{"class":76},[66,131080,131081,131083,131085,131087,131089,131091,131094,131096],{"class":68,"line":129},[66,131082,53928],{"class":76},[66,131084,2229],{"class":53084},[66,131086,62836],{"class":3793},[66,131088,99],{"class":76},[66,131090,62841],{"class":356},[66,131092,131093],{"class":76},">五彩导航3\u003C\u002F",[66,131095,2229],{"class":53084},[66,131097,53091],{"class":76},[66,131099,131100,131102,131104,131106,131108,131110,131113,131115],{"class":68,"line":138},[66,131101,53928],{"class":76},[66,131103,2229],{"class":53084},[66,131105,62836],{"class":3793},[66,131107,99],{"class":76},[66,131109,62841],{"class":356},[66,131111,131112],{"class":76},">五彩导航4\u003C\u002F",[66,131114,2229],{"class":53084},[66,131116,53091],{"class":76},[66,131118,131119,131121,131123,131125,131127,131129,131132,131134],{"class":68,"line":227},[66,131120,53928],{"class":76},[66,131122,2229],{"class":53084},[66,131124,62836],{"class":3793},[66,131126,99],{"class":76},[66,131128,62841],{"class":356},[66,131130,131131],{"class":76},">五彩导航5\u003C\u002F",[66,131133,2229],{"class":53084},[66,131135,53091],{"class":76},[66,131137,131138,131140,131142],{"class":68,"line":236},[66,131139,53569],{"class":76},[66,131141,53395],{"class":53084},[66,131143,53091],{"class":76},[57,131145,131147],{"className":128322,"code":131146,"language":128324,"meta":62,"style":62},".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",[23,131148,131149,131158,131168,131180,131192,131202,131214,131224,131228,131253,131276,131299,131322],{"__ignoreMap":62},[66,131150,131151,131154,131156],{"class":68,"line":69},[66,131152,131153],{"class":3793},".nav",[66,131155,3240],{"class":53084},[66,131157,17375],{"class":76},[66,131159,131160,131162,131164,131166],{"class":68,"line":80},[66,131161,129938],{"class":102},[66,131163,53221],{"class":76},[66,131165,74162],{"class":102},[66,131167,3135],{"class":76},[66,131169,131170,131172,131174,131176,131178],{"class":68,"line":112},[66,131171,72347],{"class":102},[66,131173,53221],{"class":76},[66,131175,2796],{"class":102},[66,131177,53276],{"class":72},[66,131179,3135],{"class":76},[66,131181,131182,131184,131186,131188,131190],{"class":68,"line":129},[66,131183,72567],{"class":102},[66,131185,53221],{"class":76},[66,131187,2835],{"class":102},[66,131189,53276],{"class":72},[66,131191,3135],{"class":76},[66,131193,131194,131196,131198,131200],{"class":68,"line":138},[66,131195,72305],{"class":102},[66,131197,53221],{"class":76},[66,131199,53376],{"class":102},[66,131201,3135],{"class":76},[66,131203,131204,131206,131208,131210,131212],{"class":68,"line":227},[66,131205,129006],{"class":102},[66,131207,53221],{"class":76},[66,131209,2835],{"class":102},[66,131211,53276],{"class":72},[66,131213,3135],{"class":76},[66,131215,131216,131218,131220,131222],{"class":68,"line":236},[66,131217,72684],{"class":102},[66,131219,53221],{"class":76},[66,131221,62621],{"class":102},[66,131223,3135],{"class":76},[66,131225,131226],{"class":68,"line":241},[66,131227,3407],{"class":76},[66,131229,131230,131232,131234,131237,131239,131241,131244,131246,131248,131250],{"class":68,"line":372},[66,131231,131153],{"class":3793},[66,131233,3240],{"class":53084},[66,131235,131236],{"class":3793},":nth-child",[66,131238,348],{"class":76},[66,131240,304],{"class":102},[66,131242,131243],{"class":76},") { ",[66,131245,130935],{"class":102},[66,131247,53221],{"class":76},[66,131249,130353],{"class":102},[66,131251,131252],{"class":76},"; }\n",[66,131254,131255,131257,131259,131261,131263,131265,131267,131269,131271,131274],{"class":68,"line":377},[66,131256,131153],{"class":3793},[66,131258,3240],{"class":53084},[66,131260,131236],{"class":3793},[66,131262,348],{"class":76},[66,131264,795],{"class":102},[66,131266,131243],{"class":76},[66,131268,130935],{"class":102},[66,131270,53221],{"class":76},[66,131272,131273],{"class":102},"#ff0000",[66,131275,131252],{"class":76},[66,131277,131278,131280,131282,131284,131286,131288,131290,131292,131294,131297],{"class":68,"line":392},[66,131279,131153],{"class":3793},[66,131281,3240],{"class":53084},[66,131283,131236],{"class":3793},[66,131285,348],{"class":76},[66,131287,1520],{"class":102},[66,131289,131243],{"class":76},[66,131291,130935],{"class":102},[66,131293,53221],{"class":76},[66,131295,131296],{"class":102},"#00a4ff",[66,131298,131252],{"class":76},[66,131300,131301,131303,131305,131307,131309,131311,131313,131315,131317,131320],{"class":68,"line":405},[66,131302,131153],{"class":3793},[66,131304,3240],{"class":53084},[66,131306,131236],{"class":3793},[66,131308,348],{"class":76},[66,131310,1076],{"class":102},[66,131312,131243],{"class":76},[66,131314,130935],{"class":102},[66,131316,53221],{"class":76},[66,131318,131319],{"class":102},"#ff00ff",[66,131321,131252],{"class":76},[66,131323,131324,131326,131328,131330,131332,131334,131336,131338,131340,131343],{"class":68,"line":418},[66,131325,131153],{"class":3793},[66,131327,3240],{"class":53084},[66,131329,131236],{"class":3793},[66,131331,348],{"class":76},[66,131333,752],{"class":102},[66,131335,131243],{"class":76},[66,131337,130935],{"class":102},[66,131339,53221],{"class":76},[66,131341,131342],{"class":102},"#00ff00",[66,131344,131252],{"class":76},[14,131346,131348],{"id":131347},"_83-css三大特性","8.3 css三大特性",[484,131350,131352],{"id":131351},"_831-层叠性","8.3.1 层叠性",[19,131354,131355],{},"为了解决样式冲突问题",[19,131357,131358],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,131360,131361],{},"   ②样式不冲突，不会层叠",[484,131363,131365],{"id":131364},"_832-继承性","8.3.2 继承性",[19,131367,131368],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,131370,131371],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[57,131373,131375],{"className":128322,"code":131374,"language":128324,"meta":62,"style":62},"p {\n  color: #333;\n}\n",[23,131376,131377,131383,131393],{"__ignoreMap":62},[66,131378,131379,131381],{"class":68,"line":69},[66,131380,19],{"class":53084},[66,131382,17375],{"class":76},[66,131384,131385,131387,131389,131391],{"class":68,"line":80},[66,131386,72684],{"class":102},[66,131388,53221],{"class":76},[66,131390,64148],{"class":102},[66,131392,3135],{"class":76},[66,131394,131395],{"class":68,"line":112},[66,131396,3407],{"class":76},[3304,131398],{"style":128178,"src":131399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,131401,131402],{},"解释：①行高可以跟单位也可以不跟单位",[19,131404,131405],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,131407,131408],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,131410,131411],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[484,131413,131415],{"id":131414},"_833-优先级","8.3.3 优先级",[31,131417,131418,131421],{},[34,131419,131420],{},"选择器相同，则执行层叠性",[34,131422,131423],{},"选择器不同，则根据选择器权重执行",[2129,131425,131426,131436],{},[2132,131427,131428],{},[2135,131429,131430,131433],{},[2138,131431,131432],{"align":25539},"选择器",[2138,131434,131435],{"align":25539},"选择器权重",[2176,131437,131438,131446,131454,131462,131470,131478],{},[2135,131439,131440,131443],{},[2181,131441,131442],{"align":25539},"继承 或者*",[2181,131444,131445],{"align":25539},"0，0，0，0",[2135,131447,131448,131451],{},[2181,131449,131450],{"align":25539},"标签选择器",[2181,131452,131453],{"align":25539},"0，0，0，1",[2135,131455,131456,131459],{},[2181,131457,131458],{"align":25539},"类选择器，伪类选择器",[2181,131460,131461],{"align":25539},"0，0，1，0",[2135,131463,131464,131467],{},[2181,131465,131466],{"align":25539},"ID选择器",[2181,131468,131469],{"align":25539},"0，1，0，0",[2135,131471,131472,131475],{},[2181,131473,131474],{"align":25539},"行内样式",[2181,131476,131477],{"align":25539},"1，0，0，0",[2135,131479,131480,131483],{},[2181,131481,131482],{"align":25539},"！important",[2181,131484,131485],{"align":25539},"无穷大",[19,131487,131488],{},"! important用法：",[57,131490,131492],{"className":128322,"code":131491,"language":128324,"meta":62,"style":62},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[23,131493,131494,131499,131505,131518,131522,131527,131533,131543],{"__ignoreMap":62},[66,131495,131496],{"class":68,"line":69},[66,131497,131498],{"class":758},"\u002F* !important 拥有最高优先级 *\u002F\n",[66,131500,131501,131503],{"class":68,"line":80},[66,131502,53395],{"class":53084},[66,131504,17375],{"class":76},[66,131506,131507,131509,131511,131513,131516],{"class":68,"line":112},[66,131508,72684],{"class":102},[66,131510,53221],{"class":76},[66,131512,53429],{"class":102},[66,131514,131515],{"class":72}," !important",[66,131517,3135],{"class":76},[66,131519,131520],{"class":68,"line":129},[66,131521,3407],{"class":76},[66,131523,131524],{"class":68,"line":138},[66,131525,131526],{"class":758},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[66,131528,131529,131531],{"class":68,"line":227},[66,131530,53395],{"class":53084},[66,131532,17375],{"class":76},[66,131534,131535,131537,131539,131541],{"class":68,"line":236},[66,131536,72684],{"class":102},[66,131538,53221],{"class":76},[66,131540,59201],{"class":102},[66,131542,3135],{"class":76},[66,131544,131545],{"class":68,"line":241},[66,131546,3407],{"class":76},[19,131548,131549],{},"优先级注意点：",[19,131551,131552],{},"①权重是有4组数字组成,但是不会有进位",[19,131554,131555],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,131557,131558],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,131560,131561],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,131563,131564],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,131566,131567],{},"⑥复合选择器",[2129,131569,131570,131580],{},[2132,131571,131572],{},[2135,131573,131574,131577],{},[2138,131575,131576],{"align":25539},"div ul li",[2138,131578,131579],{"align":25539},"0,0,0,3",[2176,131581,131582,131590,131598],{},[2135,131583,131584,131587],{},[2181,131585,131586],{"align":25539},".nav ul li",[2181,131588,131589],{"align":25539},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[2135,131591,131592,131595],{},[2181,131593,131594],{"align":25539},"a:hover",[2181,131596,131597],{"align":25539},"0,0,1,1",[2135,131599,131600,131603],{},[2181,131601,131602],{"align":25539},".nav a",[2181,131604,131597],{"align":25539},[1903,131606,131607],{},"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":62,"searchDepth":80,"depth":80,"links":131609},[131610,131618,131629],{"id":129718,"depth":80,"text":129719,"children":131611},[131612,131613,131614,131615,131616,131617],{"id":129731,"depth":112,"text":129732},{"id":129803,"depth":112,"text":129804},{"id":129875,"depth":112,"text":129876},{"id":129906,"depth":112,"text":129907},{"id":129913,"depth":112,"text":129914},{"id":130066,"depth":112,"text":130067},{"id":130374,"depth":80,"text":130375,"children":131619},[131620,131621,131622,131623,131624,131625,131626,131627,131628],{"id":130381,"depth":112,"text":130382},{"id":130391,"depth":112,"text":130392},{"id":130487,"depth":112,"text":130488},{"id":130560,"depth":112,"text":130561},{"id":130715,"depth":112,"text":130716},{"id":130803,"depth":112,"text":130804},{"id":130855,"depth":112,"text":130856},{"id":130914,"depth":112,"text":130915},{"id":131019,"depth":112,"text":131020},{"id":131347,"depth":80,"text":131348,"children":131630},[131631,131632,131633],{"id":131351,"depth":112,"text":131352},{"id":131364,"depth":112,"text":131365},{"id":131414,"depth":112,"text":131415},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":129710,"description":1926},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":131640,"title":131641,"body":131642,"description":1926,"extension":1927,"meta":133232,"navigation":108,"path":133233,"seo":133234,"stem":133235,"__hash__":133236},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":131643,"toc":133211},[131644,131647,131651,131654,131657,131660,131663,131666,131669,131672,131676,131684,131721,131757,131760,131774,131779,131813,131816,131909,131914,131917,131947,131950,131955,131963,131967,131974,132020,132064,132069,132072,132075,132078,132081,132084,132087,132089,132092,132096,132101,132145,132150,132153,132156,132193,132198,132201,132204,132207,132210,132242,132245,132248,132251,132283,132286,132289,132292,132296,132299,132331,132334,132338,132358,132361,132369,132372,132376,132381,132384,132416,132421,132424,132462,132466,132471,132474,132477,132508,132511,132528,132533,132585,132645,132650,132704,132742,132746,132750,132753,132757,132765,132768,132770,132781,132786,132834,132868,132871,132874,132877,132880,132924,132927,132930,132933,132936,132939,132942,132986,132989,132992,132995,132998,133001,133004,133010,133013,133057,133060,133063,133066,133069,133072,133116,133119,133121,133124,133128,133132,133170,133174,133177,133180,133184,133192,133196,133199,133202,133205,133208],[10,131645,131641],{"id":131646},"_9-css盒模型浮动与切图",[14,131648,131650],{"id":131649},"_91-盒子模型","9.1 盒子模型",[19,131652,131653],{},"利用盒子来设计网页",[19,131655,131656],{},"盒子包含：边框、外边距、内边距、实际内容",[19,131658,131659],{},"网页布局设置：",[19,131661,131662],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,131664,131665],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,131667,131668],{},"③往盒子里装内容",[3304,131670],{"style":128178,"src":131671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[484,131673,131675],{"id":131674},"_911-边框border","9.1.1 边框（border）",[31,131677,131678,131681],{},[34,131679,131680],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[34,131682,131683],{},"语法",[57,131685,131687],{"className":128322,"code":131686,"language":128324,"meta":62,"style":62},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[23,131688,131689,131694,131700,131717],{"__ignoreMap":62},[66,131690,131691],{"class":68,"line":69},[66,131692,131693],{"class":758},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[66,131695,131696,131698],{"class":68,"line":80},[66,131697,53395],{"class":53084},[66,131699,17375],{"class":76},[66,131701,131702,131704,131706,131708,131710,131712,131715],{"class":68,"line":112},[66,131703,72675],{"class":102},[66,131705,53221],{"class":76},[66,131707,304],{"class":102},[66,131709,53276],{"class":72},[66,131711,53305],{"class":102},[66,131713,131714],{"class":102}," #ccc",[66,131716,3135],{"class":76},[66,131718,131719],{"class":68,"line":129},[66,131720,3407],{"class":76},[2129,131722,131723,131731],{},[2132,131724,131725],{},[2135,131726,131727,131729],{},[2138,131728,130924],{"align":25539},[2138,131730,104469],{"align":25539},[2176,131732,131733,131741,131749],{},[2135,131734,131735,131738],{},[2181,131736,131737],{"align":25539},"border-width",[2181,131739,131740],{"align":25539},"定义边框粗细，单位是px",[2135,131742,131743,131746],{},[2181,131744,131745],{"align":25539},"border-style",[2181,131747,131748],{"align":25539},"边框的样式",[2135,131750,131751,131754],{},[2181,131752,131753],{"align":25539},"border-color",[2181,131755,131756],{"align":25539},"边框的颜色",[19,131758,131759],{},"边框样式 border-style 可以设置如下值：",[2982,131761,131762,131765,131768,131771],{},[34,131763,131764],{},"none：没有边框即忽略所有边框的宽度（默认值）",[34,131766,131767],{},"solid：边框为单实线(最为常用的)",[34,131769,131770],{},"dashed：边框为虚线",[34,131772,131773],{},"dotted：边框为点线",[31,131775,131776],{"start":112},[34,131777,131778],{},"边框的合写分写",[57,131780,131781],{"className":128322,"code":131686,"language":128324,"meta":62,"style":62},[23,131782,131783,131787,131793,131809],{"__ignoreMap":62},[66,131784,131785],{"class":68,"line":69},[66,131786,131693],{"class":758},[66,131788,131789,131791],{"class":68,"line":80},[66,131790,53395],{"class":53084},[66,131792,17375],{"class":76},[66,131794,131795,131797,131799,131801,131803,131805,131807],{"class":68,"line":112},[66,131796,72675],{"class":102},[66,131798,53221],{"class":76},[66,131800,304],{"class":102},[66,131802,53276],{"class":72},[66,131804,53305],{"class":102},[66,131806,131714],{"class":102},[66,131808,3135],{"class":76},[66,131810,131811],{"class":68,"line":129},[66,131812,3407],{"class":76},[19,131814,131815],{},"边框分开写法：",[57,131817,131819],{"className":128322,"code":131818,"language":128324,"meta":62,"style":62},"\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",[23,131820,131821,131826,131832,131850,131868,131887,131905],{"__ignoreMap":62},[66,131822,131823],{"class":68,"line":69},[66,131824,131825],{"class":758},"\u002F* 边框分开写法 *\u002F\n",[66,131827,131828,131830],{"class":68,"line":80},[66,131829,53395],{"class":53084},[66,131831,17375],{"class":76},[66,131833,131834,131837,131839,131841,131843,131845,131848],{"class":68,"line":112},[66,131835,131836],{"class":102},"  border-top",[66,131838,53221],{"class":76},[66,131840,304],{"class":102},[66,131842,53276],{"class":72},[66,131844,53305],{"class":102},[66,131846,131847],{"class":102}," #000",[66,131849,3135],{"class":76},[66,131851,131852,131855,131857,131859,131861,131863,131866],{"class":68,"line":129},[66,131853,131854],{"class":102},"  border-right",[66,131856,53221],{"class":76},[66,131858,795],{"class":102},[66,131860,53276],{"class":72},[66,131862,64020],{"class":102},[66,131864,131865],{"class":102}," #333",[66,131867,3135],{"class":76},[66,131869,131870,131873,131875,131877,131879,131882,131885],{"class":68,"line":138},[66,131871,131872],{"class":102},"  border-bottom",[66,131874,53221],{"class":76},[66,131876,1520],{"class":102},[66,131878,53276],{"class":72},[66,131880,131881],{"class":102}," dotted",[66,131883,131884],{"class":102}," #666",[66,131886,3135],{"class":76},[66,131888,131889,131892,131894,131896,131898,131900,131903],{"class":68,"line":227},[66,131890,131891],{"class":102},"  border-left",[66,131893,53221],{"class":76},[66,131895,304],{"class":102},[66,131897,53276],{"class":72},[66,131899,53305],{"class":102},[66,131901,131902],{"class":102}," #999",[66,131904,3135],{"class":76},[66,131906,131907],{"class":68,"line":236},[66,131908,3407],{"class":76},[31,131910,131911],{"start":129},[34,131912,131913],{},"表格的细线边框",[19,131915,131916],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[57,131918,131920],{"className":128322,"code":131919,"language":128324,"meta":62,"style":62},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[23,131921,131922,131927,131933,131943],{"__ignoreMap":62},[66,131923,131924],{"class":68,"line":69},[66,131925,131926],{"class":758},"\u002F* 表格细线边框合并 *\u002F\n",[66,131928,131929,131931],{"class":68,"line":80},[66,131930,2129],{"class":53084},[66,131932,17375],{"class":76},[66,131934,131935,131937,131939,131941],{"class":68,"line":112},[66,131936,72357],{"class":102},[66,131938,53221],{"class":76},[66,131940,66814],{"class":102},[66,131942,3135],{"class":76},[66,131944,131945],{"class":68,"line":129},[66,131946,3407],{"class":76},[19,131948,131949],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[31,131951,131952],{"start":138},[34,131953,131954],{},"解决边框额外增加盒子的实际大小的方法：",[2982,131956,131957,131960],{},[34,131958,131959],{},"测量盒子大小的时候,不量边框",[34,131961,131962],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[484,131964,131966],{"id":131965},"_912-内边距","9.1.2 内边距",[31,131968,131969,131972],{},[34,131970,131971],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[34,131973,131683],{},[2129,131975,131976,131986],{},[2132,131977,131978],{},[2135,131979,131980,131983],{},[2138,131981,131982],{"align":25539},"值的个数",[2138,131984,131985],{"align":25539},"表达意思",[2176,131987,131988,131996,132004,132012],{},[2135,131989,131990,131993],{},[2181,131991,131992],{"align":25539},"padding: 5px;",[2181,131994,131995],{"align":25539},"1个值，代表上下左右都有5个元素",[2135,131997,131998,132001],{},[2181,131999,132000],{"align":25539},"padding: 5px 10px;",[2181,132002,132003],{"align":25539},"2个值，代表上下内边距为5像素，左右内边距为10像素",[2135,132005,132006,132009],{},[2181,132007,132008],{"align":25539},"padding: 5px 10px 20px;",[2181,132010,132011],{"align":25539},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[2135,132013,132014,132017],{},[2181,132015,132016],{"align":25539},"padding: 5px 10px 20px 30px;",[2181,132018,132019],{"align":25539},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[2129,132021,132022,132030],{},[2132,132023,132024],{},[2135,132025,132026,132028],{},[2138,132027,130924],{"align":25539},[2138,132029,104469],{"align":25539},[2176,132031,132032,132040,132048,132056],{},[2135,132033,132034,132037],{},[2181,132035,132036],{"align":25539},"padding-left",[2181,132038,132039],{"align":25539},"左内边距",[2135,132041,132042,132045],{},[2181,132043,132044],{"align":25539},"padding-right",[2181,132046,132047],{"align":25539},"右内边距",[2135,132049,132050,132053],{},[2181,132051,132052],{"align":25539},"padding-top",[2181,132054,132055],{"align":25539},"上内边距",[2135,132057,132058,132061],{},[2181,132059,132060],{"align":25539},"padding-bottom",[2181,132062,132063],{"align":25539},"下内边距",[31,132065,132066],{"start":112},[34,132067,132068],{},"内边距会影响盒子的实际大小",[19,132070,132071],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,132073,132074],{},"①内容和边框有了距离，添加了内边距",[19,132076,132077],{},"②padding影响了盒子实际大小",[19,132079,132080],{},"内边距对盒子大小的影响：",[19,132082,132083],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,132085,132086],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,132088,96996],{},[19,132090,132091],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[484,132093,132095],{"id":132094},"_913-外边距","9.1.3 外边距",[31,132097,132098],{},[34,132099,132100],{},"控制盒子与盒子之间的距离",[2129,132102,132103,132111],{},[2132,132104,132105],{},[2135,132106,132107,132109],{},[2138,132108,130924],{"align":25539},[2138,132110,104469],{"align":25539},[2176,132112,132113,132121,132129,132137],{},[2135,132114,132115,132118],{},[2181,132116,132117],{"align":25539},"margin-left",[2181,132119,132120],{"align":25539},"左外边距",[2135,132122,132123,132126],{},[2181,132124,132125],{"align":25539},"margin-right",[2181,132127,132128],{"align":25539},"右外边距",[2135,132130,132131,132134],{},[2181,132132,132133],{"align":25539},"margin-top",[2181,132135,132136],{"align":25539},"上外边距",[2135,132138,132139,132142],{},[2181,132140,132141],{"align":25539},"margin-bottom",[2181,132143,132144],{"align":25539},"下外边距",[31,132146,132147],{"start":80},[34,132148,132149],{},"外边距可以让块级盒子水平居中的两个条件：",[19,132151,132152],{},"①盒子必须指定了宽度（width）",[19,132154,132155],{},"②盒子左右的外边距都设置为 auto",[57,132157,132159],{"className":128322,"code":132158,"language":128324,"meta":62,"style":62},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[23,132160,132161,132166,132173,132189],{"__ignoreMap":62},[66,132162,132163],{"class":68,"line":69},[66,132164,132165],{"class":758},"\u002F* margin 复合写法（同上） *\u002F\n",[66,132167,132168,132171],{"class":68,"line":80},[66,132169,132170],{"class":3793},".box",[66,132172,17375],{"class":76},[66,132174,132175,132177,132179,132181,132183,132186],{"class":68,"line":112},[66,132176,72249],{"class":102},[66,132178,53221],{"class":76},[66,132180,2183],{"class":102},[66,132182,53340],{"class":102},[66,132184,132185],{"class":76},";  ",[66,132187,132188],{"class":758},"\u002F* 块级盒子水平居中 *\u002F\n",[66,132190,132191],{"class":68,"line":129},[66,132192,3407],{"class":76},[31,132194,132195],{"start":112},[34,132196,132197],{},"外边距塌陷问题",[19,132199,132200],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[3304,132202],{"style":128178,"src":132203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,132205,132206],{},"解决方案：",[19,132208,132209],{},"①可以为父亲元素定义上边距",[57,132211,132212],{"className":128322,"code":132158,"language":128324,"meta":62,"style":62},[23,132213,132214,132218,132224,132238],{"__ignoreMap":62},[66,132215,132216],{"class":68,"line":69},[66,132217,132165],{"class":758},[66,132219,132220,132222],{"class":68,"line":80},[66,132221,132170],{"class":3793},[66,132223,17375],{"class":76},[66,132225,132226,132228,132230,132232,132234,132236],{"class":68,"line":112},[66,132227,72249],{"class":102},[66,132229,53221],{"class":76},[66,132231,2183],{"class":102},[66,132233,53340],{"class":102},[66,132235,132185],{"class":76},[66,132237,132188],{"class":758},[66,132239,132240],{"class":68,"line":129},[66,132241,3407],{"class":76},[19,132243,132244],{},"②可以为父亲元素定义上内边距",[19,132246,132247],{},"③可以为父亲元素添加overflow:hidden",[3304,132249],{"style":128178,"src":132250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[57,132252,132253],{"className":128322,"code":132158,"language":128324,"meta":62,"style":62},[23,132254,132255,132259,132265,132279],{"__ignoreMap":62},[66,132256,132257],{"class":68,"line":69},[66,132258,132165],{"class":758},[66,132260,132261,132263],{"class":68,"line":80},[66,132262,132170],{"class":3793},[66,132264,17375],{"class":76},[66,132266,132267,132269,132271,132273,132275,132277],{"class":68,"line":112},[66,132268,72249],{"class":102},[66,132270,53221],{"class":76},[66,132272,2183],{"class":102},[66,132274,53340],{"class":102},[66,132276,132185],{"class":76},[66,132278,132188],{"class":758},[66,132280,132281],{"class":68,"line":129},[66,132282,3407],{"class":76},[3304,132284],{"style":128178,"src":132285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,132287,132288],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,132290,132291],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[484,132293,132295],{"id":132294},"_914-清除内外边距","9.1.4 清除内外边距",[19,132297,132298],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[57,132300,132301],{"className":128322,"code":132158,"language":128324,"meta":62,"style":62},[23,132302,132303,132307,132313,132327],{"__ignoreMap":62},[66,132304,132305],{"class":68,"line":69},[66,132306,132165],{"class":758},[66,132308,132309,132311],{"class":68,"line":80},[66,132310,132170],{"class":3793},[66,132312,17375],{"class":76},[66,132314,132315,132317,132319,132321,132323,132325],{"class":68,"line":112},[66,132316,72249],{"class":102},[66,132318,53221],{"class":76},[66,132320,2183],{"class":102},[66,132322,53340],{"class":102},[66,132324,132185],{"class":76},[66,132326,132188],{"class":758},[66,132328,132329],{"class":68,"line":129},[66,132330,3407],{"class":76},[19,132332,132333],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[484,132335,132337],{"id":132336},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[2982,132339,132340,132343,132346,132349,132352,132355],{},[34,132341,132342],{},"文件→打开 ：可以打开我们要测量的图片",[34,132344,132345],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[34,132347,132348],{},"右击标尺，把里面的单位改为像素",[34,132350,132351],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[34,132353,132354],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[34,132356,132357],{},"用选区拖动 可以测量大小",[3304,132359],{"style":128178,"src":132360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[2982,132362,132363,132366],{},[34,132364,132365],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[34,132367,132368],{},"吸管取色工具",[3304,132370],{"style":128178,"src":132371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[484,132373,132375],{"id":132374},"_916-案例","9.1.6 案例",[31,132377,132378],{},[34,132379,132380],{},"小米商品",[3304,132382],{"style":128178,"src":132383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[57,132385,132386],{"className":128322,"code":132158,"language":128324,"meta":62,"style":62},[23,132387,132388,132392,132398,132412],{"__ignoreMap":62},[66,132389,132390],{"class":68,"line":69},[66,132391,132165],{"class":758},[66,132393,132394,132396],{"class":68,"line":80},[66,132395,132170],{"class":3793},[66,132397,17375],{"class":76},[66,132399,132400,132402,132404,132406,132408,132410],{"class":68,"line":112},[66,132401,72249],{"class":102},[66,132403,53221],{"class":76},[66,132405,2183],{"class":102},[66,132407,53340],{"class":102},[66,132409,132185],{"class":76},[66,132411,132188],{"class":758},[66,132413,132414],{"class":68,"line":129},[66,132415,3407],{"class":76},[31,132417,132418],{"start":80},[34,132419,132420],{},"快报模块",[3304,132422],{"style":128178,"src":132423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[57,132425,132427],{"className":129069,"code":132426,"language":129071,"meta":62,"style":62},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[23,132428,132429,132434,132449,132454],{"__ignoreMap":62},[66,132430,132431],{"class":68,"line":69},[66,132432,132433],{"class":758},"\u003C!-- HTML 代码示例 -->\n",[66,132435,132436,132438,132440,132442,132444,132447],{"class":68,"line":80},[66,132437,413],{"class":76},[66,132439,53395],{"class":53084},[66,132441,55268],{"class":3793},[66,132443,99],{"class":76},[66,132445,132446],{"class":356},"\"example\"",[66,132448,53091],{"class":76},[66,132450,132451],{"class":68,"line":112},[66,132452,132453],{"class":76},"  示例内容\n",[66,132455,132456,132458,132460],{"class":68,"line":129},[66,132457,53569],{"class":76},[66,132459,53395],{"class":53084},[66,132461,53091],{"class":76},[484,132463,132465],{"id":132464},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[31,132467,132468],{},[34,132469,132470],{},"圆角边框",[19,132472,132473],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[3304,132475],{"style":128178,"src":132476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[57,132478,132480],{"className":128322,"code":132479,"language":128324,"meta":62,"style":62},"div {\n  border: 1px solid #ccc;\n}\n",[23,132481,132482,132488,132504],{"__ignoreMap":62},[66,132483,132484,132486],{"class":68,"line":69},[66,132485,53395],{"class":53084},[66,132487,17375],{"class":76},[66,132489,132490,132492,132494,132496,132498,132500,132502],{"class":68,"line":80},[66,132491,72675],{"class":102},[66,132493,53221],{"class":76},[66,132495,304],{"class":102},[66,132497,53276],{"class":72},[66,132499,53305],{"class":102},[66,132501,131714],{"class":102},[66,132503,3135],{"class":76},[66,132505,132506],{"class":68,"line":112},[66,132507,3407],{"class":76},[19,132509,132510],{},"解释:",[2982,132512,132513,132516,132519,132522,132525],{},[34,132514,132515],{},"参数值可以为数值或百分比的形式",[34,132517,132518],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[34,132520,132521],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[34,132523,132524],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[34,132526,132527],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[31,132529,132530],{"start":80},[34,132531,132532],{},"盒子阴影",[57,132534,132536],{"className":128322,"code":132535,"language":128324,"meta":62,"style":62},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[23,132537,132538,132544,132581],{"__ignoreMap":62},[66,132539,132540,132542],{"class":68,"line":69},[66,132541,53395],{"class":53084},[66,132543,17375],{"class":76},[66,132545,132546,132549,132551,132553,132555,132557,132559,132561,132563,132565,132567,132569,132571,132573,132575,132577,132579],{"class":68,"line":80},[66,132547,132548],{"class":102},"  box-shadow",[66,132550,53221],{"class":76},[66,132552,2183],{"class":102},[66,132554,956],{"class":102},[66,132556,53276],{"class":72},[66,132558,1335],{"class":102},[66,132560,53276],{"class":72},[66,132562,80545],{"class":102},[66,132564,348],{"class":76},[66,132566,2183],{"class":102},[66,132568,307],{"class":76},[66,132570,2183],{"class":102},[66,132572,307],{"class":76},[66,132574,2183],{"class":102},[66,132576,307],{"class":76},[66,132578,87986],{"class":102},[66,132580,4543],{"class":76},[66,132582,132583],{"class":68,"line":112},[66,132584,3407],{"class":76},[2129,132586,132587,132595],{},[2132,132588,132589],{},[2135,132590,132591,132593],{},[2138,132592,2144],{"align":25539},[2138,132594,29290],{"align":25539},[2176,132596,132597,132605,132613,132621,132629,132637],{},[2135,132598,132599,132602],{},[2181,132600,132601],{"align":25539},"h-shadow",[2181,132603,132604],{"align":25539},"必需,水平阴影的位置,允许负值",[2135,132606,132607,132610],{},[2181,132608,132609],{"align":25539},"v-shadow",[2181,132611,132612],{"align":25539},"必需,垂直阴影的位置,允许负值",[2135,132614,132615,132618],{},[2181,132616,132617],{"align":25539},"blur",[2181,132619,132620],{"align":25539},"可选,模糊距离,就是影子的虚实",[2135,132622,132623,132626],{},[2181,132624,132625],{"align":25539},"spread",[2181,132627,132628],{"align":25539},"可选,阴影尺寸",[2135,132630,132631,132634],{},[2181,132632,132633],{"align":25539},"color",[2181,132635,132636],{"align":25539},"可选,阴影的颜色",[2135,132638,132639,132642],{},[2181,132640,132641],{"align":25539},"inset",[2181,132643,132644],{"align":25539},"可选,将外部阴影(outset)改为内部阴影",[31,132646,132647],{"start":112},[34,132648,132649],{},"文字阴影",[57,132651,132653],{"className":128322,"code":132652,"language":128324,"meta":62,"style":62},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[23,132654,132655,132661,132700],{"__ignoreMap":62},[66,132656,132657,132659],{"class":68,"line":69},[66,132658,19],{"class":53084},[66,132660,17375],{"class":76},[66,132662,132663,132666,132668,132670,132672,132674,132676,132678,132680,132682,132684,132686,132688,132690,132692,132694,132696,132698],{"class":68,"line":80},[66,132664,132665],{"class":102},"  text-shadow",[66,132667,53221],{"class":76},[66,132669,304],{"class":102},[66,132671,53276],{"class":72},[66,132673,1187],{"class":102},[66,132675,53276],{"class":72},[66,132677,956],{"class":102},[66,132679,53276],{"class":72},[66,132681,80545],{"class":102},[66,132683,348],{"class":76},[66,132685,2183],{"class":102},[66,132687,307],{"class":76},[66,132689,2183],{"class":102},[66,132691,307],{"class":76},[66,132693,2183],{"class":102},[66,132695,307],{"class":76},[66,132697,102295],{"class":102},[66,132699,4543],{"class":76},[66,132701,132702],{"class":68,"line":112},[66,132703,3407],{"class":76},[2129,132705,132706,132714],{},[2132,132707,132708],{},[2135,132709,132710,132712],{},[2138,132711,2144],{"align":25539},[2138,132713,29290],{"align":25539},[2176,132715,132716,132722,132729,132736],{},[2135,132717,132718,132720],{},[2181,132719,132601],{"align":25539},[2181,132721,132604],{"align":25539},[2135,132723,132724,132726],{},[2181,132725,132609],{"align":25539},[2181,132727,132728],{"align":25539},"必需,垂直阴影位置,允许负值",[2135,132730,132731,132733],{},[2181,132732,132617],{"align":25539},[2181,132734,132735],{"align":25539},"可选,模糊的距离",[2135,132737,132738,132740],{},[2181,132739,132633],{"align":25539},[2181,132741,132636],{"align":25539},[14,132743,132745],{"id":132744},"_92-浮动","9.2 浮动",[484,132747,132749],{"id":132748},"_921-浮动介绍","9.2.1 浮动介绍",[19,132751,132752],{},"在16.2中详细介绍",[484,132754,132756],{"id":132755},"_922-清除浮动","9.2.2 清除浮动",[31,132758,132759,132762],{},[34,132760,132761],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[34,132763,132764],{},"清除浮动的本质",[19,132766,132767],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,132769,841],{},[2982,132771,132772,132775,132778],{},[34,132773,132774],{},"如果父盒子本身有高度，则不需要清除浮动",[34,132776,132777],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[34,132779,132780],{},"父级有了高度，就不会影响下面的标准流了",[31,132782,132783],{"start":112},[34,132784,132785],{},"清除浮动样式",[57,132787,132789],{"className":128322,"code":132788,"language":128324,"meta":62,"style":62},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[23,132790,132791,132798,132809,132813,132820,132830],{"__ignoreMap":62},[66,132792,132793,132796],{"class":68,"line":69},[66,132794,132795],{"class":3793},".left",[66,132797,17375],{"class":76},[66,132799,132800,132803,132805,132807],{"class":68,"line":80},[66,132801,132802],{"class":102},"  float",[66,132804,53221],{"class":76},[66,132806,25539],{"class":102},[66,132808,3135],{"class":76},[66,132810,132811],{"class":68,"line":112},[66,132812,3407],{"class":76},[66,132814,132815,132818],{"class":68,"line":129},[66,132816,132817],{"class":3793},".right",[66,132819,17375],{"class":76},[66,132821,132822,132824,132826,132828],{"class":68,"line":138},[66,132823,132802],{"class":102},[66,132825,53221],{"class":76},[66,132827,74301],{"class":102},[66,132829,3135],{"class":76},[66,132831,132832],{"class":68,"line":227},[66,132833,3407],{"class":76},[2129,132835,132836,132844],{},[2132,132837,132838],{},[2135,132839,132840,132842],{},[2138,132841,128786],{"align":25539},[2138,132843,29290],{"align":25539},[2176,132845,132846,132853,132860],{},[2135,132847,132848,132850],{},[2181,132849,25539],{"align":25539},[2181,132851,132852],{"align":25539},"不允许左侧有浮动元素（清除左侧浮动的影响）",[2135,132854,132855,132857],{},[2181,132856,74301],{"align":25539},[2181,132858,132859],{"align":25539},"不允许右侧有浮动元素（清除右侧浮动的影响）",[2135,132861,132862,132865],{},[2181,132863,132864],{"align":25539},"both",[2181,132866,132867],{"align":25539},"同时清除左右侧浮动的影响",[19,132869,132870],{},"法一",[19,132872,132873],{},"额外标签法也称为隔墙法",[19,132875,132876],{},"使用方式：",[19,132878,132879],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[57,132881,132882],{"className":128322,"code":132788,"language":128324,"meta":62,"style":62},[23,132883,132884,132890,132900,132904,132910,132920],{"__ignoreMap":62},[66,132885,132886,132888],{"class":68,"line":69},[66,132887,132795],{"class":3793},[66,132889,17375],{"class":76},[66,132891,132892,132894,132896,132898],{"class":68,"line":80},[66,132893,132802],{"class":102},[66,132895,53221],{"class":76},[66,132897,25539],{"class":102},[66,132899,3135],{"class":76},[66,132901,132902],{"class":68,"line":112},[66,132903,3407],{"class":76},[66,132905,132906,132908],{"class":68,"line":129},[66,132907,132817],{"class":3793},[66,132909,17375],{"class":76},[66,132911,132912,132914,132916,132918],{"class":68,"line":138},[66,132913,132802],{"class":102},[66,132915,53221],{"class":76},[66,132917,74301],{"class":102},[66,132919,3135],{"class":76},[66,132921,132922],{"class":68,"line":227},[66,132923,3407],{"class":76},[19,132925,132926],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,132928,132929],{},"优点： 通俗易懂，书写方便",[19,132931,132932],{},"缺点： 添加许多无意义的标签，结构化较差",[19,132934,132935],{},"注意： 要求这个新的空标签必须是块级元素。",[19,132937,132938],{},"法二",[19,132940,132941],{},"父级添加overflow属性",[57,132943,132944],{"className":128322,"code":132788,"language":128324,"meta":62,"style":62},[23,132945,132946,132952,132962,132966,132972,132982],{"__ignoreMap":62},[66,132947,132948,132950],{"class":68,"line":69},[66,132949,132795],{"class":3793},[66,132951,17375],{"class":76},[66,132953,132954,132956,132958,132960],{"class":68,"line":80},[66,132955,132802],{"class":102},[66,132957,53221],{"class":76},[66,132959,25539],{"class":102},[66,132961,3135],{"class":76},[66,132963,132964],{"class":68,"line":112},[66,132965,3407],{"class":76},[66,132967,132968,132970],{"class":68,"line":129},[66,132969,132817],{"class":3793},[66,132971,17375],{"class":76},[66,132973,132974,132976,132978,132980],{"class":68,"line":138},[66,132975,132802],{"class":102},[66,132977,53221],{"class":76},[66,132979,74301],{"class":102},[66,132981,3135],{"class":76},[66,132983,132984],{"class":68,"line":227},[66,132985,3407],{"class":76},[19,132987,132988],{},"overflow: hidden;",[19,132990,132991],{},"优点：代码简洁",[19,132993,132994],{},"缺点：无法显示溢出的部分",[19,132996,132997],{},"注意：是给父元素添加代码",[19,132999,133000],{},"法三",[19,133002,133003],{},"父级添加after伪元素",[19,133005,133006,133009],{},[133007,133008],"after",{}," 方式是额外标签法的升级版",[19,133011,133012],{},"使用的时候复制就可以",[57,133014,133015],{"className":128322,"code":132788,"language":128324,"meta":62,"style":62},[23,133016,133017,133023,133033,133037,133043,133053],{"__ignoreMap":62},[66,133018,133019,133021],{"class":68,"line":69},[66,133020,132795],{"class":3793},[66,133022,17375],{"class":76},[66,133024,133025,133027,133029,133031],{"class":68,"line":80},[66,133026,132802],{"class":102},[66,133028,53221],{"class":76},[66,133030,25539],{"class":102},[66,133032,3135],{"class":76},[66,133034,133035],{"class":68,"line":112},[66,133036,3407],{"class":76},[66,133038,133039,133041],{"class":68,"line":129},[66,133040,132817],{"class":3793},[66,133042,17375],{"class":76},[66,133044,133045,133047,133049,133051],{"class":68,"line":138},[66,133046,132802],{"class":102},[66,133048,53221],{"class":76},[66,133050,74301],{"class":102},[66,133052,3135],{"class":76},[66,133054,133055],{"class":68,"line":227},[66,133056,3407],{"class":76},[19,133058,133059],{},"优点：没有增加标签，结构更简单",[19,133061,133062],{},"缺点：照顾低版本浏览器",[19,133064,133065],{},"代表网站： 百度、淘宝网、网易等",[19,133067,133068],{},"法四",[19,133070,133071],{},"父级添加双伪元素",[57,133073,133074],{"className":128322,"code":132788,"language":128324,"meta":62,"style":62},[23,133075,133076,133082,133092,133096,133102,133112],{"__ignoreMap":62},[66,133077,133078,133080],{"class":68,"line":69},[66,133079,132795],{"class":3793},[66,133081,17375],{"class":76},[66,133083,133084,133086,133088,133090],{"class":68,"line":80},[66,133085,132802],{"class":102},[66,133087,53221],{"class":76},[66,133089,25539],{"class":102},[66,133091,3135],{"class":76},[66,133093,133094],{"class":68,"line":112},[66,133095,3407],{"class":76},[66,133097,133098,133100],{"class":68,"line":129},[66,133099,132817],{"class":3793},[66,133101,17375],{"class":76},[66,133103,133104,133106,133108,133110],{"class":68,"line":138},[66,133105,132802],{"class":102},[66,133107,53221],{"class":76},[66,133109,74301],{"class":102},[66,133111,3135],{"class":76},[66,133113,133114],{"class":68,"line":227},[66,133115,3407],{"class":76},[19,133117,133118],{},"优点：代码更简洁",[19,133120,133062],{},[19,133122,133123],{},"代表网站：小米、腾讯等",[14,133125,133127],{"id":133126},"_93-ps切图","9.3 PS切图",[484,133129,133131],{"id":133130},"_931-常见图片格式","9.3.1 常见图片格式",[2129,133133,133134,133144],{},[2132,133135,133136],{},[2135,133137,133138,133141],{},[2138,133139,133140],{"align":25539},"jpg图像格式",[2138,133142,133143],{"align":25539},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[2176,133145,133146,133154,133162],{},[2135,133147,133148,133151],{},[2181,133149,133150],{"align":25539},"gif图像格式",[2181,133152,133153],{"align":25539},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[2135,133155,133156,133159],{},[2181,133157,133158],{"align":25539},"png图像格式",[2181,133160,133161],{"align":25539},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[2135,133163,133164,133167],{},[2181,133165,133166],{"align":25539},"PSD图像格式",[2181,133168,133169],{"align":25539},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[484,133171,133173],{"id":133172},"_932-图层切图","9.3.2 图层切图",[19,133175,133176],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,133178,133179],{},"按住shift选中两个图层->图层菜单->合并图层",[484,133181,133183],{"id":133182},"_933-切片切图","9.3.3 切片切图",[2982,133185,133186,133189],{},[34,133187,133188],{},"利用切片工具手动划出",[34,133190,133191],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[484,133193,133195],{"id":133194},"_934-切图步骤","9.3.4 切图步骤",[19,133197,133198],{},"用切片工具选中：",[3304,133200],{"style":128178,"src":133201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,133203,133204],{},"文件 -> 导出",[3304,133206],{"style":128178,"src":133207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[1903,133209,133210],{},"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":62,"searchDepth":80,"depth":80,"links":133212},[133213,133222,133226],{"id":131649,"depth":80,"text":131650,"children":133214},[133215,133216,133217,133218,133219,133220,133221],{"id":131674,"depth":112,"text":131675},{"id":131965,"depth":112,"text":131966},{"id":132094,"depth":112,"text":132095},{"id":132294,"depth":112,"text":132295},{"id":132336,"depth":112,"text":132337},{"id":132374,"depth":112,"text":132375},{"id":132464,"depth":112,"text":132465},{"id":132744,"depth":80,"text":132745,"children":133223},[133224,133225],{"id":132748,"depth":112,"text":132749},{"id":132755,"depth":112,"text":132756},{"id":133126,"depth":80,"text":133127,"children":133227},[133228,133229,133230,133231],{"id":133130,"depth":112,"text":133131},{"id":133172,"depth":112,"text":133173},{"id":133182,"depth":112,"text":133183},{"id":133194,"depth":112,"text":133195},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":131641,"description":1926},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":133238,"title":133239,"body":133240,"description":1926,"extension":1927,"meta":133881,"navigation":108,"path":133882,"seo":133883,"stem":133884,"__hash__":133885},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":133241,"toc":133869},[133242,133245,133249,133275,133309,133313,133317,133320,133362,133369,133379,133387,133389,133392,133395,133398,133405,133419,133423,133426,133455,133459,133462,133476,133480,133483,133511,133515,133518,133544,133548,133553,133586,133591,133619,133623,133640,133686,133691,133735,133752,133859,133867],[10,133243,133239],{"id":133244},"_10-css规范与学成在线案例",[14,133246,133248],{"id":133247},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[31,133250,133251,133257,133263,133269],{},[34,133252,133253,133256],{},[2141,133254,133255],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[34,133258,133259,133262],{},[2141,133260,133261],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[34,133264,133265,133268],{},[2141,133266,133267],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[34,133270,133271,133274],{},[2141,133272,133273],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[57,133276,133277],{"className":128322,"code":131686,"language":128324,"meta":62,"style":62},[23,133278,133279,133283,133289,133305],{"__ignoreMap":62},[66,133280,133281],{"class":68,"line":69},[66,133282,131693],{"class":758},[66,133284,133285,133287],{"class":68,"line":80},[66,133286,53395],{"class":53084},[66,133288,17375],{"class":76},[66,133290,133291,133293,133295,133297,133299,133301,133303],{"class":68,"line":112},[66,133292,72675],{"class":102},[66,133294,53221],{"class":76},[66,133296,304],{"class":102},[66,133298,53276],{"class":72},[66,133300,53305],{"class":102},[66,133302,131714],{"class":102},[66,133304,3135],{"class":76},[66,133306,133307],{"class":68,"line":129},[66,133308,3407],{"class":76},[14,133310,133312],{"id":133311},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[484,133314,133316],{"id":133315},"_1021-header头部制作","10.2.1 header头部制作",[3304,133318],{"style":128178,"src":133319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[2982,133321,133322,133329,133336,133342,133349,133356],{},[34,133323,133324,133325,133328],{},"1号是版心盒子 ",[2141,133326,133327],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[34,133330,133331,133332,133335],{},"版心盒子 里面包含 2号盒子 ",[2141,133333,133334],{},"logo"," 图标",[34,133337,133338,133339,133341],{},"版心盒子 里面包含 3号盒子 ",[2141,133340,55495],{}," 导航栏",[34,133343,133344,133345,133348],{},"版心盒子 里面包含 4号盒子 ",[2141,133346,133347],{},"search"," 搜索框",[34,133350,133351,133352,133355],{},"版心盒子 里面包含 5号盒子 ",[2141,133353,133354],{},"user"," 个人信息",[34,133357,133358,133359],{},"注意，要求里面的 ",[2141,133360,133361],{},"4个子盒子 必须都浮动",[31,133363,133364],{},[34,133365,133366],{},[2141,133367,133368],{},"导航栏注意点:",[19,133370,133371,133372,133375,133376],{},"实际开发中， ",[2141,133373,133374],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[2141,133377,133378],{},"用 li 包含链接(li+a)的做法",[2982,133380,133381,133384],{},[34,133382,133383],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[34,133385,133386],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,133388,841],{},[19,133390,133391],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,133393,133394],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,133396,133397],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[31,133399,133400],{"start":80},[34,133401,133402],{},[2141,133403,133404],{},"4号盒子search的细节：",[2982,133406,133407,133410,133413],{},[34,133408,133409],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[34,133411,133412],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[34,133414,133415,133418],{},[23,133416,133417],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[484,133420,133422],{"id":133421},"_1022-banner制作","10.2.2 banner制作",[3304,133424],{"style":128178,"src":133425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[2982,133427,133428,133435,133441,133448],{},[34,133429,133430,133431,133434],{},"1号盒子是通栏的大盒子 ",[2141,133432,133433],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[34,133436,133437,133438,133440],{},"2号盒子是版心 ",[2141,133439,2774],{}," ， 要水平居中对齐",[34,133442,133443,133444,133447],{},"3号盒子版心内，左对齐 ",[2141,133445,133446],{},"subnav"," 侧导航栏",[34,133449,133450,133451,133454],{},"4号盒子版心内，右对齐 ",[2141,133452,133453],{},"course"," 课程",[484,133456,133458],{"id":133457},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[3304,133460],{"style":128178,"src":133461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[2982,133463,133464,133467,133470,133473],{},[34,133465,133466],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[34,133468,133469],{},"1号盒子是标题 H3 左侧浮动",[34,133471,133472],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[34,133474,133475],{},"3号盒子 右浮动 mod 修改",[484,133477,133479],{"id":133478},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[3304,133481],{"style":128178,"src":133482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[2982,133484,133485,133491,133498,133505,133508],{},[34,133486,133487,133488,133490],{},"1号盒子为最大的盒子 ",[2141,133489,55496],{}," 版心水平居中对齐",[34,133492,133493,133494,133497],{},"2号盒子为上面部分 ",[2141,133495,133496],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[34,133499,133500,133501,133504],{},"3号盒子为底下部分 ",[2141,133502,133503],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[34,133506,133507],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[34,133509,133510],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[484,133512,133514],{"id":133513},"_1025-底部模块制作","10.2.5 底部模块制作",[3304,133516],{"style":128178,"src":133517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[2982,133519,133520,133527,133530,133537],{},[34,133521,133522,133523,133526],{},"1号盒子通栏大盒子 底部 ",[2141,133524,133525],{},"footer"," 给高度 底色是白色",[34,133528,133529],{},"2号盒子版心水平居中",[34,133531,133532,133533,133536],{},"3号盒子版权 ",[2141,133534,133535],{},"copyright"," 左对齐",[34,133538,133539,133540,133543],{},"4号盒子 链接组 ",[2141,133541,133542],{},"links"," 右对齐",[484,133545,133547],{"id":133546},"_1026-代码模块","10.2.6 代码模块",[31,133549,133550],{},[34,133551,133552],{},"html部分",[57,133554,133556],{"className":129069,"code":133555,"language":129071,"meta":62,"style":62},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[23,133557,133558],{"__ignoreMap":62},[66,133559,133560,133562,133564,133566,133568,133571,133574,133576,133579,133582,133584],{"class":68,"line":69},[66,133561,413],{"class":76},[66,133563,2229],{"class":53084},[66,133565,62836],{"class":3793},[66,133567,99],{"class":76},[66,133569,133570],{"class":356},"\"https:\u002F\u002Fexample.com\"",[66,133572,133573],{"class":3793}," target",[66,133575,99],{"class":76},[66,133577,133578],{"class":356},"\"_blank\"",[66,133580,133581],{"class":76},">链接文字\u003C\u002F",[66,133583,2229],{"class":53084},[66,133585,53091],{"class":76},[31,133587,133588],{"start":80},[34,133589,133590],{},"css部分",[57,133592,133593],{"className":129069,"code":133555,"language":129071,"meta":62,"style":62},[23,133594,133595],{"__ignoreMap":62},[66,133596,133597,133599,133601,133603,133605,133607,133609,133611,133613,133615,133617],{"class":68,"line":69},[66,133598,413],{"class":76},[66,133600,2229],{"class":53084},[66,133602,62836],{"class":3793},[66,133604,99],{"class":76},[66,133606,133570],{"class":356},[66,133608,133573],{"class":3793},[66,133610,99],{"class":76},[66,133612,133578],{"class":356},[66,133614,133581],{"class":76},[66,133616,2229],{"class":53084},[66,133618,53091],{"class":76},[484,133620,133622],{"id":133621},"_1027-收获","10.2.7 收获",[31,133624,133625,133628,133631,133634,133637],{},[34,133626,133627],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[34,133629,133630],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[34,133632,133633],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[34,133635,133636],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[34,133638,133639],{},"遗忘代码",[57,133641,133643],{"className":128322,"code":133642,"language":128324,"meta":62,"style":62},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[23,133644,133645,133667,133672,133682],{"__ignoreMap":62},[66,133646,133647,133649,133651,133653,133655,133657,133659,133661,133663,133665],{"class":68,"line":69},[66,133648,53395],{"class":53084},[66,133650,307],{"class":76},[66,133652,19],{"class":53084},[66,133654,307],{"class":76},[66,133656,10],{"class":53084},[66,133658,307],{"class":76},[66,133660,2982],{"class":53084},[66,133662,307],{"class":76},[66,133664,34],{"class":53084},[66,133666,17375],{"class":76},[66,133668,133669],{"class":68,"line":80},[66,133670,133671],{"class":758},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[66,133673,133674,133676,133678,133680],{"class":68,"line":112},[66,133675,129938],{"class":102},[66,133677,53221],{"class":76},[66,133679,62648],{"class":102},[66,133681,3135],{"class":76},[66,133683,133684],{"class":68,"line":129},[66,133685,3407],{"class":76},[31,133687,133688],{"start":227},[34,133689,133690],{},"html引css的程序",[57,133692,133693],{"className":128322,"code":133642,"language":128324,"meta":62,"style":62},[23,133694,133695,133717,133721,133731],{"__ignoreMap":62},[66,133696,133697,133699,133701,133703,133705,133707,133709,133711,133713,133715],{"class":68,"line":69},[66,133698,53395],{"class":53084},[66,133700,307],{"class":76},[66,133702,19],{"class":53084},[66,133704,307],{"class":76},[66,133706,10],{"class":53084},[66,133708,307],{"class":76},[66,133710,2982],{"class":53084},[66,133712,307],{"class":76},[66,133714,34],{"class":53084},[66,133716,17375],{"class":76},[66,133718,133719],{"class":68,"line":80},[66,133720,133671],{"class":758},[66,133722,133723,133725,133727,133729],{"class":68,"line":112},[66,133724,129938],{"class":102},[66,133726,53221],{"class":76},[66,133728,62648],{"class":102},[66,133730,3135],{"class":76},[66,133732,133733],{"class":68,"line":129},[66,133734,3407],{"class":76},[31,133736,133737,133740,133743,133746,133749],{"start":236},[34,133738,133739],{},"浮动的盒子不会有外边距合并问题",[34,133741,133742],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[34,133744,133745],{},"ctrl+g快速定位行；shift+alt多个光标",[34,133747,133748],{},"学习上方各个模块的选择器起名方法，以后就这样用",[34,133750,133751],{},"在写选择器时尽量写全一些，例如",[57,133753,133755],{"className":128322,"code":133754,"language":128324,"meta":62,"style":62},"\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",[23,133756,133757,133762,133778,133783,133798,133803,133818,133823,133838,133843],{"__ignoreMap":62},[66,133758,133759],{"class":68,"line":69},[66,133760,133761],{"class":758},"\u002F* 静态定位（默认） *\u002F\n",[66,133763,133764,133767,133769,133771,133773,133776],{"class":68,"line":80},[66,133765,133766],{"class":3793},".static",[66,133768,81585],{"class":76},[66,133770,130682],{"class":102},[66,133772,53221],{"class":76},[66,133774,133775],{"class":102},"static",[66,133777,131252],{"class":76},[66,133779,133780],{"class":68,"line":112},[66,133781,133782],{"class":758},"\u002F* 相对定位 *\u002F\n",[66,133784,133785,133788,133790,133792,133794,133796],{"class":68,"line":129},[66,133786,133787],{"class":3793},".relative",[66,133789,81585],{"class":76},[66,133791,130682],{"class":102},[66,133793,53221],{"class":76},[66,133795,56545],{"class":102},[66,133797,131252],{"class":76},[66,133799,133800],{"class":68,"line":138},[66,133801,133802],{"class":758},"\u002F* 绝对定位 *\u002F\n",[66,133804,133805,133808,133810,133812,133814,133816],{"class":68,"line":227},[66,133806,133807],{"class":3793},".absolute",[66,133809,81585],{"class":76},[66,133811,130682],{"class":102},[66,133813,53221],{"class":76},[66,133815,56612],{"class":102},[66,133817,131252],{"class":76},[66,133819,133820],{"class":68,"line":236},[66,133821,133822],{"class":758},"\u002F* 固定定位 *\u002F\n",[66,133824,133825,133828,133830,133832,133834,133836],{"class":68,"line":241},[66,133826,133827],{"class":3793},".fixed",[66,133829,81585],{"class":76},[66,133831,130682],{"class":102},[66,133833,53221],{"class":76},[66,133835,88009],{"class":102},[66,133837,131252],{"class":76},[66,133839,133840],{"class":68,"line":372},[66,133841,133842],{"class":758},"\u002F* 粘性定位 *\u002F\n",[66,133844,133845,133848,133850,133852,133854,133857],{"class":68,"line":377},[66,133846,133847],{"class":3793},".sticky",[66,133849,81585],{"class":76},[66,133851,130682],{"class":102},[66,133853,53221],{"class":76},[66,133855,133856],{"class":102},"sticky",[66,133858,131252],{"class":76},[31,133860,133861,133864],{"start":405},[34,133862,133863],{},"一定要用好注释",[34,133865,133866],{},"浮动的盒子不会有外边距合并的问题",[1903,133868,133210],{},{"title":62,"searchDepth":80,"depth":80,"links":133870},[133871,133872],{"id":133247,"depth":80,"text":133248},{"id":133311,"depth":80,"text":133312,"children":133873},[133874,133875,133876,133877,133878,133879,133880],{"id":133315,"depth":112,"text":133316},{"id":133421,"depth":112,"text":133422},{"id":133457,"depth":112,"text":133458},{"id":133478,"depth":112,"text":133479},{"id":133513,"depth":112,"text":133514},{"id":133546,"depth":112,"text":133547},{"id":133621,"depth":112,"text":133622},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":133239,"description":1926},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":133887,"title":133888,"body":133889,"description":1926,"extension":1927,"meta":135375,"navigation":108,"path":135376,"seo":135377,"stem":135378,"__hash__":135379},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":133890,"toc":135367},[133891,133894,133898,133902,133913,133917,133934,133978,134011,134014,134031,134034,134037,134081,134085,134089,134092,134095,134099,134102,134113,134176,134217,134220,134235,134289,134297,134300,134311,134365,134391,134394,134407,134461,134493,134547,134570,134624,134627,134630,134637,134691,134712,134766,134769,134772,134857,134865,134922,134945,134949,134952,134970,134974,134993,135047,135085,135089,135092,135095,135117,135121,135129,135132,135137,135148,135151,135155,135169,135213,135216,135220,135223,135228,135254,135259,135336,135339,135343,135346,135349,135352,135355,135358,135361,135364],[10,133892,133888],{"id":133893},"_11-传统布局与定位体系",[14,133895,133897],{"id":133896},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[484,133899,133901],{"id":133900},"_1111-普通流标准流","11.1.1 普通流（标准流）",[2982,133903,133904,133907,133910],{},[34,133905,133906],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[34,133908,133909],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[34,133911,133912],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[484,133914,133916],{"id":133915},"_1112-浮动","11.1.2 浮动",[2982,133918,133919,133922,133925,133928,133931],{},[34,133920,133921],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[34,133923,133924],{},"浮动可以改变元素标签默认的排列方式",[34,133926,133927],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[34,133929,133930],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[34,133932,133933],{},"在使用行内块转换时盒子之间是有空隙的",[57,133935,133936],{"className":128322,"code":132788,"language":128324,"meta":62,"style":62},[23,133937,133938,133944,133954,133958,133964,133974],{"__ignoreMap":62},[66,133939,133940,133942],{"class":68,"line":69},[66,133941,132795],{"class":3793},[66,133943,17375],{"class":76},[66,133945,133946,133948,133950,133952],{"class":68,"line":80},[66,133947,132802],{"class":102},[66,133949,53221],{"class":76},[66,133951,25539],{"class":102},[66,133953,3135],{"class":76},[66,133955,133956],{"class":68,"line":112},[66,133957,3407],{"class":76},[66,133959,133960,133962],{"class":68,"line":129},[66,133961,132817],{"class":3793},[66,133963,17375],{"class":76},[66,133965,133966,133968,133970,133972],{"class":68,"line":138},[66,133967,132802],{"class":102},[66,133969,53221],{"class":76},[66,133971,74301],{"class":102},[66,133973,3135],{"class":76},[66,133975,133976],{"class":68,"line":227},[66,133977,3407],{"class":76},[2129,133979,133980,133988],{},[2132,133981,133982],{},[2135,133983,133984,133986],{},[2138,133985,128786],{"align":25539},[2138,133987,29290],{"align":25539},[2176,133989,133990,133997,134004],{},[2135,133991,133992,133994],{},[2181,133993,56518],{"align":25539},[2181,133995,133996],{"align":25539},"元素不浮动（默认值）",[2135,133998,133999,134001],{},[2181,134000,25539],{"align":25539},[2181,134002,134003],{"align":25539},"元素向左浮动",[2135,134005,134006,134008],{},[2181,134007,74301],{"align":25539},[2181,134009,134010],{"align":25539},"元素向右浮动",[19,134012,134013],{},"浮动重点：",[2982,134015,134016,134019,134022,134025,134028],{},[34,134017,134018],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[34,134020,134021],{},"浮动的元素会一行内显示并且元素顶部对齐",[34,134023,134024],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[34,134026,134027],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[34,134029,134030],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,134032,134033],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,134035,134036],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[57,134038,134039],{"className":128322,"code":132788,"language":128324,"meta":62,"style":62},[23,134040,134041,134047,134057,134061,134067,134077],{"__ignoreMap":62},[66,134042,134043,134045],{"class":68,"line":69},[66,134044,132795],{"class":3793},[66,134046,17375],{"class":76},[66,134048,134049,134051,134053,134055],{"class":68,"line":80},[66,134050,132802],{"class":102},[66,134052,53221],{"class":76},[66,134054,25539],{"class":102},[66,134056,3135],{"class":76},[66,134058,134059],{"class":68,"line":112},[66,134060,3407],{"class":76},[66,134062,134063,134065],{"class":68,"line":129},[66,134064,132817],{"class":3793},[66,134066,17375],{"class":76},[66,134068,134069,134071,134073,134075],{"class":68,"line":138},[66,134070,132802],{"class":102},[66,134072,53221],{"class":76},[66,134074,74301],{"class":102},[66,134076,3135],{"class":76},[66,134078,134079],{"class":68,"line":227},[66,134080,3407],{"class":76},[484,134082,134084],{"id":134083},"_1113-定位","11.1.3 定位",[23801,134086,134088],{"id":134087},"_11131-使用场景","11.1.3.1 使用场景",[19,134090,134091],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,134093,134094],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[23801,134096,134098],{"id":134097},"_11132-定位组成","11.1.3.2 定位组成",[19,134100,134101],{},"定位 = 定位模式 + 边偏移",[31,134103,134104],{},[34,134105,134106,134109,134110],{},[2141,134107,134108],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[2141,134111,134112],{},"定位模式",[57,134114,134116],{"className":128322,"code":134115,"language":128324,"meta":62,"style":62},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[23,134117,134118,134124,134138,134155,134172],{"__ignoreMap":62},[66,134119,134120,134122],{"class":68,"line":69},[66,134121,132170],{"class":3793},[66,134123,17375],{"class":76},[66,134125,134126,134129,134131,134133,134135],{"class":68,"line":80},[66,134127,134128],{"class":102},"  position",[66,134130,53221],{"class":76},[66,134132,56545],{"class":102},[66,134134,132185],{"class":76},[66,134136,134137],{"class":758},"\u002F* 定位模式 *\u002F\n",[66,134139,134140,134143,134145,134147,134149,134152],{"class":68,"line":112},[66,134141,134142],{"class":102},"  top",[66,134144,53221],{"class":76},[66,134146,790],{"class":102},[66,134148,53276],{"class":72},[66,134150,134151],{"class":76},";           ",[66,134153,134154],{"class":758},"\u002F* 边偏移：上 *\u002F\n",[66,134156,134157,134160,134162,134164,134166,134169],{"class":68,"line":129},[66,134158,134159],{"class":102},"  left",[66,134161,53221],{"class":76},[66,134163,2679],{"class":102},[66,134165,53276],{"class":72},[66,134167,134168],{"class":76},";          ",[66,134170,134171],{"class":758},"\u002F* 边偏移：左 *\u002F\n",[66,134173,134174],{"class":68,"line":138},[66,134175,3407],{"class":76},[2129,134177,134178,134187],{},[2132,134179,134180],{},[2135,134181,134182,134184],{},[2138,134183,2144],{"align":25539},[2138,134185,134186],{"align":25539},"语义",[2176,134188,134189,134196,134203,134210],{},[2135,134190,134191,134193],{},[2181,134192,133775],{"align":25539},[2181,134194,134195],{"align":25539},"静态定位",[2135,134197,134198,134200],{},[2181,134199,56545],{"align":25539},[2181,134201,134202],{"align":25539},"相对定位",[2135,134204,134205,134207],{},[2181,134206,56612],{"align":25539},[2181,134208,134209],{"align":25539},"绝对定位",[2135,134211,134212,134214],{},[2181,134213,88009],{"align":25539},[2181,134215,134216],{"align":25539},"固定定位",[19,134218,134219],{},"（1）静态定位：",[2982,134221,134222,134233],{},[34,134223,134224,134225,134228,134229,134232],{},"静态定位是元素的 ",[2141,134226,134227],{},"默认定位方式"," ， ",[2141,134230,134231],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[34,134234,55],{},[57,134236,134237],{"className":128322,"code":134115,"language":128324,"meta":62,"style":62},[23,134238,134239,134245,134257,134271,134285],{"__ignoreMap":62},[66,134240,134241,134243],{"class":68,"line":69},[66,134242,132170],{"class":3793},[66,134244,17375],{"class":76},[66,134246,134247,134249,134251,134253,134255],{"class":68,"line":80},[66,134248,134128],{"class":102},[66,134250,53221],{"class":76},[66,134252,56545],{"class":102},[66,134254,132185],{"class":76},[66,134256,134137],{"class":758},[66,134258,134259,134261,134263,134265,134267,134269],{"class":68,"line":112},[66,134260,134142],{"class":102},[66,134262,53221],{"class":76},[66,134264,790],{"class":102},[66,134266,53276],{"class":72},[66,134268,134151],{"class":76},[66,134270,134154],{"class":758},[66,134272,134273,134275,134277,134279,134281,134283],{"class":68,"line":129},[66,134274,134159],{"class":102},[66,134276,53221],{"class":76},[66,134278,2679],{"class":102},[66,134280,53276],{"class":72},[66,134282,134168],{"class":76},[66,134284,134171],{"class":758},[66,134286,134287],{"class":68,"line":138},[66,134288,3407],{"class":76},[2982,134290,134291,134294],{},[34,134292,134293],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[34,134295,134296],{},"静态定位在布局时我们几乎不用的",[19,134298,134299],{},"（2）相对定位",[2982,134301,134302,134309],{},[34,134303,134304,134305,134308],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[2141,134306,134307],{},"原来的位置"," 来说的（自恋型）",[34,134310,55],{},[57,134312,134313],{"className":128322,"code":134115,"language":128324,"meta":62,"style":62},[23,134314,134315,134321,134333,134347,134361],{"__ignoreMap":62},[66,134316,134317,134319],{"class":68,"line":69},[66,134318,132170],{"class":3793},[66,134320,17375],{"class":76},[66,134322,134323,134325,134327,134329,134331],{"class":68,"line":80},[66,134324,134128],{"class":102},[66,134326,53221],{"class":76},[66,134328,56545],{"class":102},[66,134330,132185],{"class":76},[66,134332,134137],{"class":758},[66,134334,134335,134337,134339,134341,134343,134345],{"class":68,"line":112},[66,134336,134142],{"class":102},[66,134338,53221],{"class":76},[66,134340,790],{"class":102},[66,134342,53276],{"class":72},[66,134344,134151],{"class":76},[66,134346,134154],{"class":758},[66,134348,134349,134351,134353,134355,134357,134359],{"class":68,"line":129},[66,134350,134159],{"class":102},[66,134352,53221],{"class":76},[66,134354,2679],{"class":102},[66,134356,53276],{"class":72},[66,134358,134168],{"class":76},[66,134360,134171],{"class":758},[66,134362,134363],{"class":68,"line":138},[66,134364,3407],{"class":76},[2982,134366,134367],{},[34,134368,134369,134370,134372,134373,134375,134376,134379,134380,134383,134384,134386,134387,134390],{},"相对定位的特点：",[55498,134371],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[55498,134374],{},"  ② ",[2141,134377,134378],{},"原来"," 在标准流的 ",[2141,134381,134382],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[55498,134385],{},"  ③因此， ",[2141,134388,134389],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,134392,134393],{},"（3）绝对定位",[2982,134395,134396,134405],{},[34,134397,134398,134400,134401,134404],{},[2141,134399,134209],{}," 是元素在移动位置的时候，是相对于它 ",[2141,134402,134403],{},"祖先元素"," 来说的（拼爹型）",[34,134406,55],{},[57,134408,134409],{"className":128322,"code":134115,"language":128324,"meta":62,"style":62},[23,134410,134411,134417,134429,134443,134457],{"__ignoreMap":62},[66,134412,134413,134415],{"class":68,"line":69},[66,134414,132170],{"class":3793},[66,134416,17375],{"class":76},[66,134418,134419,134421,134423,134425,134427],{"class":68,"line":80},[66,134420,134128],{"class":102},[66,134422,53221],{"class":76},[66,134424,56545],{"class":102},[66,134426,132185],{"class":76},[66,134428,134137],{"class":758},[66,134430,134431,134433,134435,134437,134439,134441],{"class":68,"line":112},[66,134432,134142],{"class":102},[66,134434,53221],{"class":76},[66,134436,790],{"class":102},[66,134438,53276],{"class":72},[66,134440,134151],{"class":76},[66,134442,134154],{"class":758},[66,134444,134445,134447,134449,134451,134453,134455],{"class":68,"line":129},[66,134446,134159],{"class":102},[66,134448,53221],{"class":76},[66,134450,2679],{"class":102},[66,134452,53276],{"class":72},[66,134454,134168],{"class":76},[66,134456,134171],{"class":758},[66,134458,134459],{"class":68,"line":138},[66,134460,3407],{"class":76},[2982,134462,134463,134478,134487,134490],{},[34,134464,134465,134466,134468,134469,134471,134472,134474,134475,134477],{},"绝对定位的特点：",[55498,134467],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[55498,134470],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[55498,134473],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[55498,134476],{},"  (4)固定定位",[34,134479,134480,134482,134483,134486],{},[2141,134481,134216],{}," 是元素 ",[2141,134484,134485],{},"固定于浏览器可视区的位置"," 。（认死理型）",[34,134488,134489],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[34,134491,134492],{},"语法:",[57,134494,134495],{"className":128322,"code":134115,"language":128324,"meta":62,"style":62},[23,134496,134497,134503,134515,134529,134543],{"__ignoreMap":62},[66,134498,134499,134501],{"class":68,"line":69},[66,134500,132170],{"class":3793},[66,134502,17375],{"class":76},[66,134504,134505,134507,134509,134511,134513],{"class":68,"line":80},[66,134506,134128],{"class":102},[66,134508,53221],{"class":76},[66,134510,56545],{"class":102},[66,134512,132185],{"class":76},[66,134514,134137],{"class":758},[66,134516,134517,134519,134521,134523,134525,134527],{"class":68,"line":112},[66,134518,134142],{"class":102},[66,134520,53221],{"class":76},[66,134522,790],{"class":102},[66,134524,53276],{"class":72},[66,134526,134151],{"class":76},[66,134528,134154],{"class":758},[66,134530,134531,134533,134535,134537,134539,134541],{"class":68,"line":129},[66,134532,134159],{"class":102},[66,134534,53221],{"class":76},[66,134536,2679],{"class":102},[66,134538,53276],{"class":72},[66,134540,134168],{"class":76},[66,134542,134171],{"class":758},[66,134544,134545],{"class":68,"line":138},[66,134546,3407],{"class":76},[2982,134548,134549,134558],{},[34,134550,134551,134552,134554,134555,134557],{},"特点:",[55498,134553],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[55498,134556],{},"  ②固定定位不再占有原先的位置,完全脱标",[34,134559,134560,134561,134563,134564,134566,134567,134569],{},"固定在版心位置的方法:",[55498,134562],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[55498,134565],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[55498,134568],{},"  实例：",[57,134571,134572],{"className":128322,"code":134115,"language":128324,"meta":62,"style":62},[23,134573,134574,134580,134592,134606,134620],{"__ignoreMap":62},[66,134575,134576,134578],{"class":68,"line":69},[66,134577,132170],{"class":3793},[66,134579,17375],{"class":76},[66,134581,134582,134584,134586,134588,134590],{"class":68,"line":80},[66,134583,134128],{"class":102},[66,134585,53221],{"class":76},[66,134587,56545],{"class":102},[66,134589,132185],{"class":76},[66,134591,134137],{"class":758},[66,134593,134594,134596,134598,134600,134602,134604],{"class":68,"line":112},[66,134595,134142],{"class":102},[66,134597,53221],{"class":76},[66,134599,790],{"class":102},[66,134601,53276],{"class":72},[66,134603,134151],{"class":76},[66,134605,134154],{"class":758},[66,134607,134608,134610,134612,134614,134616,134618],{"class":68,"line":129},[66,134609,134159],{"class":102},[66,134611,53221],{"class":76},[66,134613,2679],{"class":102},[66,134615,53276],{"class":72},[66,134617,134168],{"class":76},[66,134619,134171],{"class":758},[66,134621,134622],{"class":68,"line":138},[66,134623,3407],{"class":76},[3304,134625],{"style":128178,"src":134626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,134628,134629],{},"(5)粘性定位",[2982,134631,134632,134635],{},[34,134633,134634],{},"粘性定位可以被认为是相对定位和固定定位的混合",[34,134636,55],{},[57,134638,134639],{"className":128322,"code":134115,"language":128324,"meta":62,"style":62},[23,134640,134641,134647,134659,134673,134687],{"__ignoreMap":62},[66,134642,134643,134645],{"class":68,"line":69},[66,134644,132170],{"class":3793},[66,134646,17375],{"class":76},[66,134648,134649,134651,134653,134655,134657],{"class":68,"line":80},[66,134650,134128],{"class":102},[66,134652,53221],{"class":76},[66,134654,56545],{"class":102},[66,134656,132185],{"class":76},[66,134658,134137],{"class":758},[66,134660,134661,134663,134665,134667,134669,134671],{"class":68,"line":112},[66,134662,134142],{"class":102},[66,134664,53221],{"class":76},[66,134666,790],{"class":102},[66,134668,53276],{"class":72},[66,134670,134151],{"class":76},[66,134672,134154],{"class":758},[66,134674,134675,134677,134679,134681,134683,134685],{"class":68,"line":129},[66,134676,134159],{"class":102},[66,134678,53221],{"class":76},[66,134680,2679],{"class":102},[66,134682,53276],{"class":72},[66,134684,134168],{"class":76},[66,134686,134171],{"class":758},[66,134688,134689],{"class":68,"line":138},[66,134690,3407],{"class":76},[2982,134692,134693],{},[34,134694,134695,134696,134698,134699,134701,134702,134704,134705,134708,134709,134711],{},"粘性定位的特点：",[55498,134697],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[55498,134700],{},"  ②粘性定位占有原先的位置（相对定位特点）",[55498,134703],{},"  ③必须添加 top 、left、right、bottom ",[2141,134706,134707],{},"其中一个"," 才有效",[55498,134710],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[57,134713,134714],{"className":128322,"code":134115,"language":128324,"meta":62,"style":62},[23,134715,134716,134722,134734,134748,134762],{"__ignoreMap":62},[66,134717,134718,134720],{"class":68,"line":69},[66,134719,132170],{"class":3793},[66,134721,17375],{"class":76},[66,134723,134724,134726,134728,134730,134732],{"class":68,"line":80},[66,134725,134128],{"class":102},[66,134727,53221],{"class":76},[66,134729,56545],{"class":102},[66,134731,132185],{"class":76},[66,134733,134137],{"class":758},[66,134735,134736,134738,134740,134742,134744,134746],{"class":68,"line":112},[66,134737,134142],{"class":102},[66,134739,53221],{"class":76},[66,134741,790],{"class":102},[66,134743,53276],{"class":72},[66,134745,134151],{"class":76},[66,134747,134154],{"class":758},[66,134749,134750,134752,134754,134756,134758,134760],{"class":68,"line":129},[66,134751,134159],{"class":102},[66,134753,53221],{"class":76},[66,134755,2679],{"class":102},[66,134757,53276],{"class":72},[66,134759,134168],{"class":76},[66,134761,134171],{"class":758},[66,134763,134764],{"class":68,"line":138},[66,134765,3407],{"class":76},[3304,134767],{"style":128178,"src":134768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,134770,134771],{},"(6)总结",[2129,134773,134774,134789],{},[2132,134775,134776],{},[2135,134777,134778,134780,134783,134786],{},[2138,134779,134112],{"align":25539},[2138,134781,134782],{"align":25539},"是否脱标",[2138,134784,134785],{"align":25539},"移动位置",[2138,134787,134788],{"align":25539},"是否常用",[2176,134790,134791,134804,134818,134832,134845],{},[2135,134792,134793,134796,134798,134801],{},[2181,134794,134795],{"align":25539},"Static 静态定位",[2181,134797,106451],{"align":25539},[2181,134799,134800],{"align":25539},"不能使用边偏移",[2181,134802,134803],{"align":25539},"很少",[2135,134805,134806,134809,134812,134815],{},[2181,134807,134808],{"align":25539},"Relative 相对定位",[2181,134810,134811],{"align":25539},"否(占有位置)",[2181,134813,134814],{"align":25539},"相对于自身位置移动",[2181,134816,134817],{"align":25539},"基本单独使用",[2135,134819,134820,134823,134826,134829],{},[2181,134821,134822],{"align":25539},"Absolute 绝对定位",[2181,134824,134825],{"align":25539},"是(不占有位置)",[2181,134827,134828],{"align":25539},"带有定位的父级",[2181,134830,134831],{"align":25539},"要和定位父级元素搭配使用",[2135,134833,134834,134837,134839,134842],{},[2181,134835,134836],{"align":25539},"Fixed 固定定位",[2181,134838,134825],{"align":25539},[2181,134840,134841],{"align":25539},"浏览器可视区",[2181,134843,134844],{"align":25539},"单独使用,不需要父级",[2135,134846,134847,134850,134852,134854],{},[2181,134848,134849],{"align":25539},"Sticky 粘性定位",[2181,134851,134811],{"align":25539},[2181,134853,134841],{"align":25539},[2181,134855,134856],{"align":25539},"当前阶段少",[31,134858,134859],{"start":80},[34,134860,134861,134864],{},[2141,134862,134863],{},"边偏移"," 则决定了该元素的最终位置",[2129,134866,134867,134878],{},[2132,134868,134869],{},[2135,134870,134871,134874,134876],{},[2138,134872,134873],{"align":25539},"边偏移属性",[2138,134875,29293],{"align":25539},[2138,134877,29290],{"align":25539},[2176,134879,134880,134891,134902,134912],{},[2135,134881,134882,134885,134888],{},[2181,134883,134884],{"align":25539},"top",[2181,134886,134887],{"align":25539},"top: 80px;",[2181,134889,134890],{"align":25539},"顶端偏移量，定义元素相对于父元素上边线的距离",[2135,134892,134893,134896,134899],{},[2181,134894,134895],{"align":25539},"bottom",[2181,134897,134898],{"align":25539},"bottom: 80px ;",[2181,134900,134901],{"align":25539},"底部偏移量，定义元素相对于其父元素下边线的距离",[2135,134903,134904,134906,134909],{},[2181,134905,25539],{"align":25539},[2181,134907,134908],{"align":25539},"left: 80px ;",[2181,134910,134911],{"align":25539},"左侧偏移量，定义元素相对于其父元素左边线的距离",[2135,134913,134914,134916,134919],{},[2181,134915,74301],{"align":25539},[2181,134917,134918],{"align":25539},"right: 80px ;",[2181,134920,134921],{"align":25539},"右侧偏移量，定义元素相对于其父元素右边线的距离",[2982,134923,134924],{},[34,134925,841,134926,134928,134929,134931,134932,134934,134935,134938,134939,134941,134942,134944],{},[55498,134927],{},"  ① ",[2141,134930,134863],{}," 需要和 ",[2141,134933,134112],{}," 联合使用， ",[2141,134936,134937],{},"单独使用无效"," ；",[55498,134940],{},"  ②top和bottom不要同时使用",[55498,134943],{},"  ③left和right不要同时使用",[23801,134946,134948],{"id":134947},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,134950,134951],{},"子级是绝对定位的话，父级要用相对定位",[2982,134953,134954,134957,134960,134963],{},[34,134955,134956],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[34,134958,134959],{},"父盒子需要加定位限制子盒子在父盒子内显示",[34,134961,134962],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[34,134964,134965,134966,134969],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[2141,134967,134968],{},"子绝父绝"," 也会遇到",[23801,134971,134973],{"id":134972},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[2982,134975,134976,134991],{},[34,134977,134978,134979,134982,134983,134986,134987,134990],{},"在使用 ",[2141,134980,134981],{},"定位"," 布局时，可能会 ",[2141,134984,134985],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[2141,134988,134989],{},"z-index"," 来控制盒子的前后次序 (z轴)",[34,134992,55],{},[57,134994,134995],{"className":128322,"code":134115,"language":128324,"meta":62,"style":62},[23,134996,134997,135003,135015,135029,135043],{"__ignoreMap":62},[66,134998,134999,135001],{"class":68,"line":69},[66,135000,132170],{"class":3793},[66,135002,17375],{"class":76},[66,135004,135005,135007,135009,135011,135013],{"class":68,"line":80},[66,135006,134128],{"class":102},[66,135008,53221],{"class":76},[66,135010,56545],{"class":102},[66,135012,132185],{"class":76},[66,135014,134137],{"class":758},[66,135016,135017,135019,135021,135023,135025,135027],{"class":68,"line":112},[66,135018,134142],{"class":102},[66,135020,53221],{"class":76},[66,135022,790],{"class":102},[66,135024,53276],{"class":72},[66,135026,134151],{"class":76},[66,135028,134154],{"class":758},[66,135030,135031,135033,135035,135037,135039,135041],{"class":68,"line":129},[66,135032,134159],{"class":102},[66,135034,53221],{"class":76},[66,135036,2679],{"class":102},[66,135038,53276],{"class":72},[66,135040,134168],{"class":76},[66,135042,134171],{"class":758},[66,135044,135045],{"class":68,"line":138},[66,135046,3407],{"class":76},[2982,135048,135049],{},[34,135050,135051,135052,134928,135054,135056,135057,129485,135060,84316,135063,135065,135066,135068,135069,135072,135073,134938,135076,135078,135079,135082,135084],{},"z-index的特性",[55498,135053],{},[2141,135055,128786],{}," ： ",[2141,135058,135059],{},"正整数",[2141,135061,135062],{},"负整数",[2141,135064,2183],{}," ，默认值是 0，数值越大，盒子越靠上；",[55498,135067],{},"  ②如果 ",[2141,135070,135071],{},"属性值相同"," ，则按照书写顺序， ",[2141,135074,135075],{},"后来居上",[55498,135077],{},"  ③数字后面 ",[2141,135080,135081],{},"不能加单位",[55498,135083],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[23801,135086,135088],{"id":135087},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,135090,135091],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,135093,135094],{},"方法:",[2982,135096,135097,135107],{},[34,135098,135099,135100,135103,135104],{},"left: 50%; 让 ",[2141,135101,135102],{},"盒子的左侧"," 移动到 ",[2141,135105,135106],{},"父级元素的水平中心位置",[34,135108,135109,135110,135113,135114],{},"margin-left: -100px; 让盒子 ",[2141,135111,135112],{},"向左"," 移动 ",[2141,135115,135116],{},"自身宽度的一半",[23801,135118,135120],{"id":135119},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[31,135122,135123,135126],{},[34,135124,135125],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[34,135127,135128],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,135130,135131],{},"也就是说绝对定位和固定定位和浮动类似",[31,135133,135134],{"start":112},[34,135135,135136],{},"display 是显示模式， 可以改变显示模式有以下方式:",[2982,135138,135139,135142,135145],{},[34,135140,135141],{},"可以用inline-block 转换为行内块",[34,135143,135144],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[34,135146,135147],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,135149,135150],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[23801,135152,135154],{"id":135153},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[31,135156,135157,135160,135163,135166],{},[34,135158,135159],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[34,135161,135162],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[34,135164,135165],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[34,135167,135168],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[57,135170,135171],{"className":128322,"code":132788,"language":128324,"meta":62,"style":62},[23,135172,135173,135179,135189,135193,135199,135209],{"__ignoreMap":62},[66,135174,135175,135177],{"class":68,"line":69},[66,135176,132795],{"class":3793},[66,135178,17375],{"class":76},[66,135180,135181,135183,135185,135187],{"class":68,"line":80},[66,135182,132802],{"class":102},[66,135184,53221],{"class":76},[66,135186,25539],{"class":102},[66,135188,3135],{"class":76},[66,135190,135191],{"class":68,"line":112},[66,135192,3407],{"class":76},[66,135194,135195,135197],{"class":68,"line":129},[66,135196,132817],{"class":3793},[66,135198,17375],{"class":76},[66,135200,135201,135203,135205,135207],{"class":68,"line":138},[66,135202,132802],{"class":102},[66,135204,53221],{"class":76},[66,135206,74301],{"class":102},[66,135208,3135],{"class":76},[66,135210,135211],{"class":68,"line":227},[66,135212,3407],{"class":76},[3304,135214],{"style":128178,"src":135215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[23801,135217,135219],{"id":135218},"_11138-轮播图","11.1.3.8 轮播图",[3304,135221],{"style":128178,"src":135222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[31,135224,135225],{},[34,135226,135227],{},"制作顺序:",[2982,135229,135230,135233,135236,135245],{},[34,135231,135232],{},"大盒子我们类名为： tb-promo 淘宝广告",[34,135234,135235],{},"里面先放一张图片",[34,135237,135238,135239,135241,135242,135244],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[55498,135240],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[55498,135243],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[34,135246,135247,135248,135250,135251,135253],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[55498,135249],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[55498,135252],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[31,135255,135256],{"start":80},[34,135257,135258],{},"代码模块",[57,135260,135262],{"className":128322,"code":135261,"language":128324,"meta":62,"style":62},"\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",[23,135263,135264,135269,135276,135286,135296,135306,135310,135315,135322,135332],{"__ignoreMap":62},[66,135265,135266],{"class":68,"line":69},[66,135267,135268],{"class":758},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[66,135270,135271,135274],{"class":68,"line":80},[66,135272,135273],{"class":3793},".son",[66,135275,17375],{"class":76},[66,135277,135278,135280,135282,135284],{"class":68,"line":112},[66,135279,134128],{"class":102},[66,135281,53221],{"class":76},[66,135283,56612],{"class":102},[66,135285,3135],{"class":76},[66,135287,135288,135290,135292,135294],{"class":68,"line":129},[66,135289,134142],{"class":102},[66,135291,53221],{"class":76},[66,135293,2183],{"class":102},[66,135295,3135],{"class":76},[66,135297,135298,135300,135302,135304],{"class":68,"line":138},[66,135299,134159],{"class":102},[66,135301,53221],{"class":76},[66,135303,2183],{"class":102},[66,135305,3135],{"class":76},[66,135307,135308],{"class":68,"line":227},[66,135309,3407],{"class":76},[66,135311,135312],{"class":68,"line":236},[66,135313,135314],{"class":758},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[66,135316,135317,135320],{"class":68,"line":241},[66,135318,135319],{"class":3793},".father",[66,135321,17375],{"class":76},[66,135323,135324,135326,135328,135330],{"class":68,"line":372},[66,135325,134128],{"class":102},[66,135327,53221],{"class":76},[66,135329,56545],{"class":102},[66,135331,3135],{"class":76},[66,135333,135334],{"class":68,"line":377},[66,135335,3407],{"class":76},[19,135337,135338],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[484,135340,135342],{"id":135341},"_1114-定位数值的移动","11.1.4 定位数值的移动",[3304,135344],{"style":128178,"src":135345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,135347,135348],{},"✨ 黄金口诀：",[19,135350,135351],{},"\"TOP正下负上，LEFT正右负左\"",[19,135353,135354],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,135356,135357],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,135359,135360],{},"✨ 简单记：",[19,135362,135363],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[1903,135365,135366],{},"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":62,"searchDepth":80,"depth":80,"links":135368},[135369],{"id":133896,"depth":80,"text":133897,"children":135370},[135371,135372,135373,135374],{"id":133900,"depth":112,"text":133901},{"id":133915,"depth":112,"text":133916},{"id":134083,"depth":112,"text":134084},{"id":135341,"depth":112,"text":135342},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":133888,"description":1926},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":135381,"title":135382,"body":135383,"description":1926,"extension":1927,"meta":136806,"navigation":108,"path":136807,"seo":136808,"stem":136809,"__hash__":136810},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":135384,"toc":136785},[135385,135388,135392,135400,135404,135409,135417,135429,135433,135438,135446,135457,135461,135466,135507,135515,135519,135522,135525,135528,135622,135625,135719,135722,135816,135819,135822,135857,135860,135863,135893,135896,135899,135902,135905,135908,135911,135914,135984,135987,135991,135995,136036,136040,136046,136049,136052,136056,136059,136062,136065,136146,136149,136152,136156,136160,136163,136166,136169,136172,136175,136181,136190,136194,136213,136217,136227,136230,136233,136236,136239,136242,136245,136248,136251,136260,136264,136273,136276,136281,136334,136339,136505,136508,136511,136516,136519,136522,136525,136528,136533,136681,136684,136687,136692,136695,136700,136734,136737,136740,136744,136747,136754,136757,136760,136763,136766,136769,136772,136775,136779,136782],[10,135386,135382],{"id":135387},"_12-显示隐藏与图形资源",[14,135389,135391],{"id":135390},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[2982,135393,135394,135397],{},[34,135395,135396],{},"目的:让一个元素在页面中消失或者显示出来",[34,135398,135399],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[484,135401,135403],{"id":135402},"_1211-display-显示","12.1.1 display 显示",[31,135405,135406],{},[34,135407,135408],{},"display 设置或检索对象是否及如何显示",[2982,135410,135411,135414],{},[34,135412,135413],{},"display: none;隐藏对象",[34,135415,135416],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[31,135418,135419,135426],{"start":80},[34,135420,135421,135422,135425],{},"特点： display 隐藏元素后， ",[2141,135423,135424],{},"不再占"," 有原来的位置",[34,135427,135428],{},"在js中使用非常的广泛",[484,135430,135432],{"id":135431},"_1212-visibility可见性","12.1.2 visibility可见性",[31,135434,135435],{},[34,135436,135437],{},"visibility 属性用于指定一个元素应可见还是隐藏",[2982,135439,135440,135443],{},[34,135441,135442],{},"visibility： visible；元素可见",[34,135444,135445],{},"visibility：hidden；元素隐藏",[31,135447,135448,135451,135454],{"start":80},[34,135449,135450],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[34,135452,135453],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[34,135455,135456],{},"隐藏后继续占有原有位置",[484,135458,135460],{"id":135459},"_1213-overflow溢出","12.1.3 overflow溢出",[2982,135462,135463],{},[34,135464,135465],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[2129,135467,135468,135476],{},[2132,135469,135470],{},[2135,135471,135472,135474],{},[2138,135473,128786],{"align":25539},[2138,135475,29290],{"align":25539},[2176,135477,135478,135486,135493,135500],{},[2135,135479,135480,135483],{},[2181,135481,135482],{"align":25539},"visible",[2181,135484,135485],{"align":25539},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[2135,135487,135488,135490],{},[2181,135489,63493],{"align":25539},[2181,135491,135492],{"align":25539},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[2135,135494,135495,135497],{},[2181,135496,130742],{"align":25539},[2181,135498,135499],{"align":25539},"不管超出内容否，总是显示滚动条",[2135,135501,135502,135504],{},[2181,135503,74442],{"align":25539},[2181,135505,135506],{"align":25539},"超出自动显示滚动条，不超出不显示滚动条",[2982,135508,135509,135512],{},[34,135510,135511],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[34,135513,135514],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[484,135516,135518],{"id":135517},"_1214-案例收获","12.1.4 案例收获",[3304,135520],{"style":128178,"src":135521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,135523,135524],{},"问题：没做出来动态效果，使用hover没实现",[19,135526,135527],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[57,135529,135530],{"className":128322,"code":133754,"language":128324,"meta":62,"style":62},[23,135531,135532,135536,135550,135554,135568,135572,135586,135590,135604,135608],{"__ignoreMap":62},[66,135533,135534],{"class":68,"line":69},[66,135535,133761],{"class":758},[66,135537,135538,135540,135542,135544,135546,135548],{"class":68,"line":80},[66,135539,133766],{"class":3793},[66,135541,81585],{"class":76},[66,135543,130682],{"class":102},[66,135545,53221],{"class":76},[66,135547,133775],{"class":102},[66,135549,131252],{"class":76},[66,135551,135552],{"class":68,"line":112},[66,135553,133782],{"class":758},[66,135555,135556,135558,135560,135562,135564,135566],{"class":68,"line":129},[66,135557,133787],{"class":3793},[66,135559,81585],{"class":76},[66,135561,130682],{"class":102},[66,135563,53221],{"class":76},[66,135565,56545],{"class":102},[66,135567,131252],{"class":76},[66,135569,135570],{"class":68,"line":138},[66,135571,133802],{"class":758},[66,135573,135574,135576,135578,135580,135582,135584],{"class":68,"line":227},[66,135575,133807],{"class":3793},[66,135577,81585],{"class":76},[66,135579,130682],{"class":102},[66,135581,53221],{"class":76},[66,135583,56612],{"class":102},[66,135585,131252],{"class":76},[66,135587,135588],{"class":68,"line":236},[66,135589,133822],{"class":758},[66,135591,135592,135594,135596,135598,135600,135602],{"class":68,"line":241},[66,135593,133827],{"class":3793},[66,135595,81585],{"class":76},[66,135597,130682],{"class":102},[66,135599,53221],{"class":76},[66,135601,88009],{"class":102},[66,135603,131252],{"class":76},[66,135605,135606],{"class":68,"line":372},[66,135607,133842],{"class":758},[66,135609,135610,135612,135614,135616,135618,135620],{"class":68,"line":377},[66,135611,133847],{"class":3793},[66,135613,81585],{"class":76},[66,135615,130682],{"class":102},[66,135617,53221],{"class":76},[66,135619,133856],{"class":102},[66,135621,131252],{"class":76},[19,135623,135624],{},"完整代码：",[57,135626,135627],{"className":128322,"code":133754,"language":128324,"meta":62,"style":62},[23,135628,135629,135633,135647,135651,135665,135669,135683,135687,135701,135705],{"__ignoreMap":62},[66,135630,135631],{"class":68,"line":69},[66,135632,133761],{"class":758},[66,135634,135635,135637,135639,135641,135643,135645],{"class":68,"line":80},[66,135636,133766],{"class":3793},[66,135638,81585],{"class":76},[66,135640,130682],{"class":102},[66,135642,53221],{"class":76},[66,135644,133775],{"class":102},[66,135646,131252],{"class":76},[66,135648,135649],{"class":68,"line":112},[66,135650,133782],{"class":758},[66,135652,135653,135655,135657,135659,135661,135663],{"class":68,"line":129},[66,135654,133787],{"class":3793},[66,135656,81585],{"class":76},[66,135658,130682],{"class":102},[66,135660,53221],{"class":76},[66,135662,56545],{"class":102},[66,135664,131252],{"class":76},[66,135666,135667],{"class":68,"line":138},[66,135668,133802],{"class":758},[66,135670,135671,135673,135675,135677,135679,135681],{"class":68,"line":227},[66,135672,133807],{"class":3793},[66,135674,81585],{"class":76},[66,135676,130682],{"class":102},[66,135678,53221],{"class":76},[66,135680,56612],{"class":102},[66,135682,131252],{"class":76},[66,135684,135685],{"class":68,"line":236},[66,135686,133822],{"class":758},[66,135688,135689,135691,135693,135695,135697,135699],{"class":68,"line":241},[66,135690,133827],{"class":3793},[66,135692,81585],{"class":76},[66,135694,130682],{"class":102},[66,135696,53221],{"class":76},[66,135698,88009],{"class":102},[66,135700,131252],{"class":76},[66,135702,135703],{"class":68,"line":372},[66,135704,133842],{"class":758},[66,135706,135707,135709,135711,135713,135715,135717],{"class":68,"line":377},[66,135708,133847],{"class":3793},[66,135710,81585],{"class":76},[66,135712,130682],{"class":102},[66,135714,53221],{"class":76},[66,135716,133856],{"class":102},[66,135718,131252],{"class":76},[19,135720,135721],{},"分布思路重点详解：",[57,135723,135724],{"className":128322,"code":133754,"language":128324,"meta":62,"style":62},[23,135725,135726,135730,135744,135748,135762,135766,135780,135784,135798,135802],{"__ignoreMap":62},[66,135727,135728],{"class":68,"line":69},[66,135729,133761],{"class":758},[66,135731,135732,135734,135736,135738,135740,135742],{"class":68,"line":80},[66,135733,133766],{"class":3793},[66,135735,81585],{"class":76},[66,135737,130682],{"class":102},[66,135739,53221],{"class":76},[66,135741,133775],{"class":102},[66,135743,131252],{"class":76},[66,135745,135746],{"class":68,"line":112},[66,135747,133782],{"class":758},[66,135749,135750,135752,135754,135756,135758,135760],{"class":68,"line":129},[66,135751,133787],{"class":3793},[66,135753,81585],{"class":76},[66,135755,130682],{"class":102},[66,135757,53221],{"class":76},[66,135759,56545],{"class":102},[66,135761,131252],{"class":76},[66,135763,135764],{"class":68,"line":138},[66,135765,133802],{"class":758},[66,135767,135768,135770,135772,135774,135776,135778],{"class":68,"line":227},[66,135769,133807],{"class":3793},[66,135771,81585],{"class":76},[66,135773,130682],{"class":102},[66,135775,53221],{"class":76},[66,135777,56612],{"class":102},[66,135779,131252],{"class":76},[66,135781,135782],{"class":68,"line":236},[66,135783,133822],{"class":758},[66,135785,135786,135788,135790,135792,135794,135796],{"class":68,"line":241},[66,135787,133827],{"class":3793},[66,135789,81585],{"class":76},[66,135791,130682],{"class":102},[66,135793,53221],{"class":76},[66,135795,88009],{"class":102},[66,135797,131252],{"class":76},[66,135799,135800],{"class":68,"line":372},[66,135801,133842],{"class":758},[66,135803,135804,135806,135808,135810,135812,135814],{"class":68,"line":377},[66,135805,133847],{"class":3793},[66,135807,81585],{"class":76},[66,135809,130682],{"class":102},[66,135811,53221],{"class":76},[66,135813,133856],{"class":102},[66,135815,131252],{"class":76},[3304,135817],{"style":128178,"src":135818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,135820,135821],{},"图片太大，盒子太小，此时需要修改图片的大小",[57,135823,135825],{"className":129069,"code":135824,"language":129071,"meta":62,"style":62},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[23,135826,135827],{"__ignoreMap":62},[66,135828,135829,135831,135833,135835,135837,135840,135842,135844,135847,135850,135852,135855],{"class":68,"line":69},[66,135830,413],{"class":76},[66,135832,3304],{"class":53084},[66,135834,57020],{"class":3793},[66,135836,99],{"class":76},[66,135838,135839],{"class":356},"\"images\u002Fpic.jpg\"",[66,135841,57028],{"class":3793},[66,135843,99],{"class":76},[66,135845,135846],{"class":356},"\"描述文字\"",[66,135848,135849],{"class":3793}," title",[66,135851,99],{"class":76},[66,135853,135854],{"class":356},"\"悬停提示\"",[66,135856,53091],{"class":76},[3304,135858],{"style":128178,"src":135859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,135861,135862],{},"制造遮罩层",[57,135864,135865],{"className":129069,"code":135824,"language":129071,"meta":62,"style":62},[23,135866,135867],{"__ignoreMap":62},[66,135868,135869,135871,135873,135875,135877,135879,135881,135883,135885,135887,135889,135891],{"class":68,"line":69},[66,135870,413],{"class":76},[66,135872,3304],{"class":53084},[66,135874,57020],{"class":3793},[66,135876,99],{"class":76},[66,135878,135839],{"class":356},[66,135880,57028],{"class":3793},[66,135882,99],{"class":76},[66,135884,135846],{"class":356},[66,135886,135849],{"class":3793},[66,135888,99],{"class":76},[66,135890,135854],{"class":356},[66,135892,53091],{"class":76},[19,135894,135895],{},"此时是这样的为标准流",[3304,135897],{"style":128178,"src":135898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,135900,135901],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,135903,135904],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,135906,135907],{},"让他在中间，用center(background-position)",[19,135909,135910],{},"将需要变的尽可能放到一个盒子中",[19,135912,135913],{},"放大盒子上内部盒子发生变化",[57,135915,135917],{"className":128322,"code":135916,"language":128324,"meta":62,"style":62},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[23,135918,135919,135925,135935,135939,135946,135956,135968,135980],{"__ignoreMap":62},[66,135920,135921,135923],{"class":68,"line":69},[66,135922,129389],{"class":3793},[66,135924,17375],{"class":76},[66,135926,135927,135929,135931,135933],{"class":68,"line":80},[66,135928,134128],{"class":102},[66,135930,53221],{"class":76},[66,135932,56545],{"class":102},[66,135934,3135],{"class":76},[66,135936,135937],{"class":68,"line":112},[66,135938,3407],{"class":76},[66,135940,135941,135944],{"class":68,"line":129},[66,135942,135943],{"class":3793},".child",[66,135945,17375],{"class":76},[66,135947,135948,135950,135952,135954],{"class":68,"line":138},[66,135949,134128],{"class":102},[66,135951,53221],{"class":76},[66,135953,56612],{"class":102},[66,135955,3135],{"class":76},[66,135957,135958,135960,135962,135964,135966],{"class":68,"line":227},[66,135959,134142],{"class":102},[66,135961,53221],{"class":76},[66,135963,2635],{"class":102},[66,135965,953],{"class":72},[66,135967,3135],{"class":76},[66,135969,135970,135972,135974,135976,135978],{"class":68,"line":236},[66,135971,134159],{"class":102},[66,135973,53221],{"class":76},[66,135975,2635],{"class":102},[66,135977,953],{"class":72},[66,135979,3135],{"class":76},[66,135981,135982],{"class":68,"line":241},[66,135983,3407],{"class":76},[19,135985,135986],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,135988,135990],{"id":135989},"_122-精灵图","12.2 精灵图",[484,135992,135994],{"id":135993},"_1221-理解","12.2.1 理解",[31,135996,135997,136015],{},[34,135998,135999,136000,134228,136003,136006,136007,136010,136011,136014],{},"目的： ",[2141,136001,136002],{},"为了有效地减少服务器接收和发送请求的次数",[2141,136004,136005],{},"提高"," 页面的 ",[2141,136008,136009],{},"加载速度"," ，出现了 ",[2141,136012,136013],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[34,136016,136017,136018,136020,136021,136023,136024,136026,136027,136029,136030,136032,136033,136035],{},"使用精灵图核心：",[55498,136019],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[55498,136022],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[55498,136025],{},"  ③移动背景图片位置， 此时可以使用 background-position",[55498,136028],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[55498,136031],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[55498,136034],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[484,136037,136039],{"id":136038},"_1222-扒图","12.2.2 扒图",[57,136041,136044],{"className":136042,"code":136043,"language":555},[553],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[23,136045,136043],{"__ignoreMap":62},[3304,136047],{"style":128178,"src":136048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[3304,136050],{"style":128178,"src":136051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[484,136053,136055],{"id":136054},"_1223-精灵图的实现","12.2.3 精灵图的实现",[3304,136057],{"style":128178,"src":136058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,136060,136061],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[3304,136063],{"style":128178,"src":136064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[57,136066,136068],{"className":128322,"code":136067,"language":128324,"meta":62,"style":62},"\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",[23,136069,136070,136075,136082,136094,136106,136125,136142],{"__ignoreMap":62},[66,136071,136072],{"class":68,"line":69},[66,136073,136074],{"class":758},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[66,136076,136077,136080],{"class":68,"line":80},[66,136078,136079],{"class":3793},".icon",[66,136081,17375],{"class":76},[66,136083,136084,136086,136088,136090,136092],{"class":68,"line":112},[66,136085,72347],{"class":102},[66,136087,53221],{"class":76},[66,136089,2679],{"class":102},[66,136091,53276],{"class":72},[66,136093,3135],{"class":76},[66,136095,136096,136098,136100,136102,136104],{"class":68,"line":129},[66,136097,72567],{"class":102},[66,136099,53221],{"class":76},[66,136101,2679],{"class":102},[66,136103,53276],{"class":72},[66,136105,3135],{"class":76},[66,136107,136108,136110,136112,136114,136116,136119,136121,136123],{"class":68,"line":138},[66,136109,72390],{"class":102},[66,136111,53221],{"class":76},[66,136113,63505],{"class":102},[66,136115,348],{"class":76},[66,136117,136118],{"class":1234},"sprites.png",[66,136120,15519],{"class":76},[66,136122,63515],{"class":102},[66,136124,3135],{"class":76},[66,136126,136127,136129,136131,136133,136135,136138,136140],{"class":68,"line":227},[66,136128,130582],{"class":102},[66,136130,53221],{"class":76},[66,136132,53547],{"class":102},[66,136134,53276],{"class":72},[66,136136,136137],{"class":102}," -20",[66,136139,53276],{"class":72},[66,136141,3135],{"class":76},[66,136143,136144],{"class":68,"line":236},[66,136145,3407],{"class":76},[3304,136147],{"style":128178,"src":136148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,136150,136151],{},"在前端中坐标轴的正方向是右和下",[14,136153,136155],{"id":136154},"_123-字体图标","12.3 字体图标",[484,136157,136159],{"id":136158},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,136161,136162],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,136164,136165],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,136167,136168],{},"1.图片文件还是比较大的。",[19,136170,136171],{},"2.图片本身放大和缩小会失真。",[19,136173,136174],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,136176,136177,136178,27542],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[2141,136179,136180],{},"字体图标 iconfont",[19,136182,136183,136186,136187,158],{},[2141,136184,136185],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[2141,136188,136189],{},"展示的是图标，本质属于字体",[484,136191,136193],{"id":136192},"_1232-字体图标的优点","12.3.2 字体图标的优点",[2982,136195,136196,136201,136204,136207,136210],{},[34,136197,136198,136200],{},[2141,136199,27678],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[34,136202,136203],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[34,136205,136206],{},"兼容性：几乎支持所有的浏览器，请放心使用",[34,136208,136209],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[34,136211,136212],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[484,136214,136216],{"id":136215},"_1233-字体库下载网站","12.3.3 字体库下载网站",[2982,136218,136219],{},[34,136220,136221,136222],{},"icomoon字体库：",[2229,136223,136226],{"href":136224,"rel":136225},"http:\u002F\u002Ficomoon.io\u002F",[25668],"http:\u002F\u002Ficomoon.io",[19,136228,136229],{},"进去之后点icomoon app",[3304,136231],{"style":128178,"src":136232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,136234,136235],{},"可以对其编辑：",[3304,136237],{"style":128178,"src":136238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,136240,136241],{},"生成字体：",[3304,136243],{"style":128178,"src":136244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,136246,136247],{},"下载：",[3304,136249],{"style":128178,"src":136250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[2982,136252,136253],{},[34,136254,136255,136256],{},"阿里iconfont字体库： ",[2229,136257,136258],{"href":136258,"rel":136259},"http:\u002F\u002Fwww.iconfont.cn\u002F",[25668],[484,136261,136263],{"id":136262},"_1234-字体图标的引入","12.3.4 字体图标的引入",[31,136265,136266],{},[34,136267,136268,136269,136272],{},"把下载包里面的 ",[2141,136270,136271],{},"fonts"," 文件夹放入页面根目录下",[3304,136274],{"style":128178,"src":136275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[31,136277,136278],{"start":80},[34,136279,136280],{},"字体文件格式",[2129,136282,136283,136292],{},[2132,136284,136285],{},[2135,136286,136287,136290],{},[2138,136288,136289],{"align":25539},"格式",[2138,136291,25543],{"align":25539},[2176,136293,136294,136304,136314,136324],{},[2135,136295,136296,136301],{},[2181,136297,136298],{"align":25539},[2141,136299,136300],{},".ttf",[2181,136302,136303],{"align":25539},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[2135,136305,136306,136311],{},[2181,136307,136308],{"align":25539},[2141,136309,136310],{},".woff",[2181,136312,136313],{"align":25539},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[2135,136315,136316,136321],{},[2181,136317,136318],{"align":25539},[2141,136319,136320],{},".eot",[2181,136322,136323],{"align":25539},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[2135,136325,136326,136331],{},[2181,136327,136328],{"align":25539},[2141,136329,136330],{},"svg",[2181,136332,136333],{"align":25539},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[31,136335,136336],{"start":112},[34,136337,136338],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[57,136340,136342],{"className":128322,"code":136341,"language":128324,"meta":62,"style":62},"\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",[23,136343,136344,136349,136356,136368,136384,136409,136430,136450,136470,136474,136480,136490,136501],{"__ignoreMap":62},[66,136345,136346],{"class":68,"line":69},[66,136347,136348],{"class":758},"\u002F* 引入字体图标 *\u002F\n",[66,136350,136351,136354],{"class":68,"line":80},[66,136352,136353],{"class":72},"@font-face",[66,136355,17375],{"class":76},[66,136357,136358,136361,136363,136366],{"class":68,"line":112},[66,136359,136360],{"class":102},"  font-family",[66,136362,53221],{"class":76},[66,136364,136365],{"class":356},"'icomoon'",[66,136367,3135],{"class":76},[66,136369,136370,136373,136375,136377,136379,136382],{"class":68,"line":129},[66,136371,136372],{"class":102},"  src",[66,136374,53221],{"class":76},[66,136376,63505],{"class":102},[66,136378,348],{"class":76},[66,136380,136381],{"class":356},"'fonts\u002Ficomoon.eot'",[66,136383,4543],{"class":76},[66,136385,136386,136388,136390,136392,136394,136397,136399,136402,136404,136407],{"class":68,"line":138},[66,136387,136372],{"class":102},[66,136389,53221],{"class":76},[66,136391,63505],{"class":102},[66,136393,348],{"class":76},[66,136395,136396],{"class":356},"'fonts\u002Ficomoon.eot?#iefix'",[66,136398,15519],{"class":76},[66,136400,136401],{"class":102},"format",[66,136403,348],{"class":76},[66,136405,136406],{"class":356},"'embedded-opentype'",[66,136408,39835],{"class":76},[66,136410,136411,136414,136416,136419,136421,136423,136425,136428],{"class":68,"line":227},[66,136412,136413],{"class":102},"       url",[66,136415,348],{"class":76},[66,136417,136418],{"class":356},"'fonts\u002Ficomoon.woff'",[66,136420,15519],{"class":76},[66,136422,136401],{"class":102},[66,136424,348],{"class":76},[66,136426,136427],{"class":356},"'woff'",[66,136429,39835],{"class":76},[66,136431,136432,136434,136436,136439,136441,136443,136445,136448],{"class":68,"line":236},[66,136433,136413],{"class":102},[66,136435,348],{"class":76},[66,136437,136438],{"class":356},"'fonts\u002Ficomoon.ttf'",[66,136440,15519],{"class":76},[66,136442,136401],{"class":102},[66,136444,348],{"class":76},[66,136446,136447],{"class":356},"'truetype'",[66,136449,39835],{"class":76},[66,136451,136452,136454,136456,136459,136461,136463,136465,136468],{"class":68,"line":241},[66,136453,136413],{"class":102},[66,136455,348],{"class":76},[66,136457,136458],{"class":356},"'fonts\u002Ficomoon.svg#icomoon'",[66,136460,15519],{"class":76},[66,136462,136401],{"class":102},[66,136464,348],{"class":76},[66,136466,136467],{"class":356},"'svg'",[66,136469,4543],{"class":76},[66,136471,136472],{"class":68,"line":372},[66,136473,3407],{"class":76},[66,136475,136476,136478],{"class":68,"line":377},[66,136477,136079],{"class":3793},[66,136479,17375],{"class":76},[66,136481,136482,136484,136486,136488],{"class":68,"line":392},[66,136483,136360],{"class":102},[66,136485,53221],{"class":76},[66,136487,136365],{"class":356},[66,136489,3135],{"class":76},[66,136491,136492,136495,136497,136499],{"class":68,"line":405},[66,136493,136494],{"class":102},"  font-style",[66,136496,53221],{"class":76},[66,136498,65620],{"class":102},[66,136500,3135],{"class":76},[66,136502,136503],{"class":68,"line":418},[66,136504,3407],{"class":76},[19,136506,136507],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[3304,136509],{"style":128178,"src":136510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[31,136512,136513],{"start":129},[34,136514,136515],{},"添加字体",[3304,136517],{"style":128178,"src":136518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,136520,136521],{},"复制：",[3304,136523],{"style":128178,"src":136524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,136526,136527],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[31,136529,136530],{"start":138},[34,136531,136532],{},"代码展示：",[57,136534,136535],{"className":128322,"code":136341,"language":128324,"meta":62,"style":62},[23,136536,136537,136541,136547,136557,136571,136593,136611,136629,136647,136651,136657,136667,136677],{"__ignoreMap":62},[66,136538,136539],{"class":68,"line":69},[66,136540,136348],{"class":758},[66,136542,136543,136545],{"class":68,"line":80},[66,136544,136353],{"class":72},[66,136546,17375],{"class":76},[66,136548,136549,136551,136553,136555],{"class":68,"line":112},[66,136550,136360],{"class":102},[66,136552,53221],{"class":76},[66,136554,136365],{"class":356},[66,136556,3135],{"class":76},[66,136558,136559,136561,136563,136565,136567,136569],{"class":68,"line":129},[66,136560,136372],{"class":102},[66,136562,53221],{"class":76},[66,136564,63505],{"class":102},[66,136566,348],{"class":76},[66,136568,136381],{"class":356},[66,136570,4543],{"class":76},[66,136572,136573,136575,136577,136579,136581,136583,136585,136587,136589,136591],{"class":68,"line":138},[66,136574,136372],{"class":102},[66,136576,53221],{"class":76},[66,136578,63505],{"class":102},[66,136580,348],{"class":76},[66,136582,136396],{"class":356},[66,136584,15519],{"class":76},[66,136586,136401],{"class":102},[66,136588,348],{"class":76},[66,136590,136406],{"class":356},[66,136592,39835],{"class":76},[66,136594,136595,136597,136599,136601,136603,136605,136607,136609],{"class":68,"line":227},[66,136596,136413],{"class":102},[66,136598,348],{"class":76},[66,136600,136418],{"class":356},[66,136602,15519],{"class":76},[66,136604,136401],{"class":102},[66,136606,348],{"class":76},[66,136608,136427],{"class":356},[66,136610,39835],{"class":76},[66,136612,136613,136615,136617,136619,136621,136623,136625,136627],{"class":68,"line":236},[66,136614,136413],{"class":102},[66,136616,348],{"class":76},[66,136618,136438],{"class":356},[66,136620,15519],{"class":76},[66,136622,136401],{"class":102},[66,136624,348],{"class":76},[66,136626,136447],{"class":356},[66,136628,39835],{"class":76},[66,136630,136631,136633,136635,136637,136639,136641,136643,136645],{"class":68,"line":241},[66,136632,136413],{"class":102},[66,136634,348],{"class":76},[66,136636,136458],{"class":356},[66,136638,15519],{"class":76},[66,136640,136401],{"class":102},[66,136642,348],{"class":76},[66,136644,136467],{"class":356},[66,136646,4543],{"class":76},[66,136648,136649],{"class":68,"line":372},[66,136650,3407],{"class":76},[66,136652,136653,136655],{"class":68,"line":377},[66,136654,136079],{"class":3793},[66,136656,17375],{"class":76},[66,136658,136659,136661,136663,136665],{"class":68,"line":392},[66,136660,136360],{"class":102},[66,136662,53221],{"class":76},[66,136664,136365],{"class":356},[66,136666,3135],{"class":76},[66,136668,136669,136671,136673,136675],{"class":68,"line":405},[66,136670,136494],{"class":102},[66,136672,53221],{"class":76},[66,136674,65620],{"class":102},[66,136676,3135],{"class":76},[66,136678,136679],{"class":68,"line":418},[66,136680,3407],{"class":76},[3304,136682],{"style":128178,"src":136683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,136685,136686],{},"更加细节展示：",[31,136688,136689],{},[34,136690,136691],{},"html 标签内添加小图标",[3304,136693],{"style":128178,"src":136694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[31,136696,136697],{"start":80},[34,136698,136699],{},"给标签定义字体",[57,136701,136702],{"className":129069,"code":132426,"language":129071,"meta":62,"style":62},[23,136703,136704,136708,136722,136726],{"__ignoreMap":62},[66,136705,136706],{"class":68,"line":69},[66,136707,132433],{"class":758},[66,136709,136710,136712,136714,136716,136718,136720],{"class":68,"line":80},[66,136711,413],{"class":76},[66,136713,53395],{"class":53084},[66,136715,55268],{"class":3793},[66,136717,99],{"class":76},[66,136719,132446],{"class":356},[66,136721,53091],{"class":76},[66,136723,136724],{"class":68,"line":112},[66,136725,132453],{"class":76},[66,136727,136728,136730,136732],{"class":68,"line":129},[66,136729,53569],{"class":76},[66,136731,53395],{"class":53084},[66,136733,53091],{"class":76},[19,136735,136736],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[3304,136738],{"style":128178,"src":136739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[484,136741,136743],{"id":136742},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,136745,136746],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,136748,136749,136750,136753],{},"把压缩包里面的 ",[2141,136751,136752],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,136755,136756],{},"打开网站，点下方：",[3304,136758],{"style":128178,"src":136759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[3304,136761],{"style":128178,"src":136762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[3304,136764],{"style":128178,"src":136765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,136767,136768],{},"点yes重新加载",[19,136770,136771],{},"然后重复之前的操作就可以实现了",[19,136773,136774],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[484,136776,136778],{"id":136777},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[3304,136780],{"style":128178,"src":136781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[1903,136783,136784],{},"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":62,"searchDepth":80,"depth":80,"links":136786},[136787,136793,136798],{"id":135390,"depth":80,"text":135391,"children":136788},[136789,136790,136791,136792],{"id":135402,"depth":112,"text":135403},{"id":135431,"depth":112,"text":135432},{"id":135459,"depth":112,"text":135460},{"id":135517,"depth":112,"text":135518},{"id":135989,"depth":80,"text":135990,"children":136794},[136795,136796,136797],{"id":135993,"depth":112,"text":135994},{"id":136038,"depth":112,"text":136039},{"id":136054,"depth":112,"text":136055},{"id":136154,"depth":80,"text":136155,"children":136799},[136800,136801,136802,136803,136804,136805],{"id":136158,"depth":112,"text":136159},{"id":136192,"depth":112,"text":136193},{"id":136215,"depth":112,"text":136216},{"id":136262,"depth":112,"text":136263},{"id":136742,"depth":112,"text":136743},{"id":136777,"depth":112,"text":136778},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":135382,"description":1926},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":136812,"title":136813,"body":136814,"description":1926,"extension":1927,"meta":138041,"navigation":108,"path":138042,"seo":138043,"stem":138044,"__hash__":138045},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":136815,"toc":138022},[136816,136819,136823,136826,136840,136908,136938,136941,136945,136949,137051,137098,137102,137105,137108,137142,137145,137148,137151,137154,137157,137160,137163,137165,137168,137171,137174,137177,137180,137183,137186,137214,137217,137221,137224,137231,137234,137237,137263,137266,137270,137273,137276,137283,137287,137290,137292,137324,137327,137330,137342,137348,137351,137354,137357,137359,137363,137366,137369,137372,137417,137421,137423,137426,137433,137475,137478,137482,137487,137501,137505,137508,137511,137514,137517,137520,137554,137557,137560,137614,137617,137620,137623,137626,137678,137681,137684,137733,137737,137739,137742,137745,137748,137751,137754,137812,137815,137821,137824,137827,137859,137862,137866,137870,137873,137905,137909,137912,137956,137960,137963,137966,137969,137972,137975,137978,137981,137983,137986,137988,137991,137994,137997,138000,138005,138008,138010,138013,138016,138019],[10,136817,136813],{"id":136818},"_13-界面样式与布局技巧",[14,136820,136822],{"id":136821},"_131-css三角","13.1 css三角",[19,136824,136825],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[2982,136827,136828,136831,136834,136837],{},[34,136829,136830],{},"用css 边框可以模拟三角效果",[34,136832,136833],{},"宽度高度为0",[34,136835,136836],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[34,136838,136839],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[57,136841,136843],{"className":128322,"code":136842,"language":128324,"meta":62,"style":62},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[23,136844,136845,136850,136857,136867,136877,136893,136904],{"__ignoreMap":62},[66,136846,136847],{"class":68,"line":69},[66,136848,136849],{"class":758},"\u002F* CSS 实现三角形 *\u002F\n",[66,136851,136852,136855],{"class":68,"line":80},[66,136853,136854],{"class":3793},".triangle",[66,136856,17375],{"class":76},[66,136858,136859,136861,136863,136865],{"class":68,"line":112},[66,136860,72347],{"class":102},[66,136862,53221],{"class":76},[66,136864,2183],{"class":102},[66,136866,3135],{"class":76},[66,136868,136869,136871,136873,136875],{"class":68,"line":129},[66,136870,72567],{"class":102},[66,136872,53221],{"class":76},[66,136874,2183],{"class":102},[66,136876,3135],{"class":76},[66,136878,136879,136881,136883,136885,136887,136889,136891],{"class":68,"line":138},[66,136880,72675],{"class":102},[66,136882,53221],{"class":76},[66,136884,790],{"class":102},[66,136886,53276],{"class":72},[66,136888,53305],{"class":102},[66,136890,65770],{"class":102},[66,136892,3135],{"class":76},[66,136894,136895,136898,136900,136902],{"class":68,"line":227},[66,136896,136897],{"class":102},"  border-bottom-color",[66,136899,53221],{"class":76},[66,136901,64148],{"class":102},[66,136903,3135],{"class":76},[66,136905,136906],{"class":68,"line":236},[66,136907,3407],{"class":76},[57,136909,136910],{"className":128322,"code":132479,"language":128324,"meta":62,"style":62},[23,136911,136912,136918,136934],{"__ignoreMap":62},[66,136913,136914,136916],{"class":68,"line":69},[66,136915,53395],{"class":53084},[66,136917,17375],{"class":76},[66,136919,136920,136922,136924,136926,136928,136930,136932],{"class":68,"line":80},[66,136921,72675],{"class":102},[66,136923,53221],{"class":76},[66,136925,304],{"class":102},[66,136927,53276],{"class":72},[66,136929,53305],{"class":102},[66,136931,131714],{"class":102},[66,136933,3135],{"class":76},[66,136935,136936],{"class":68,"line":112},[66,136937,3407],{"class":76},[3304,136939],{"style":128178,"src":136940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,136942,136944],{"id":136943},"_132-css用户界面样式","13.2 css用户界面样式",[484,136946,136948],{"id":136947},"_1321-鼠标样式","13.2.1 鼠标样式",[57,136950,136952],{"className":128322,"code":136951,"language":128324,"meta":62,"style":62},"\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",[23,136953,136954,136959,136978,136996,137015,137032],{"__ignoreMap":62},[66,136955,136956],{"class":68,"line":69},[66,136957,136958],{"class":758},"\u002F* 鼠标样式 *\u002F\n",[66,136960,136961,136963,136965,136968,136970,136972,136975],{"class":68,"line":80},[66,136962,53395],{"class":53084},[66,136964,81585],{"class":76},[66,136966,136967],{"class":102},"cursor",[66,136969,53221],{"class":76},[66,136971,63809],{"class":102},[66,136973,136974],{"class":76},"; }   ",[66,136976,136977],{"class":758},"\u002F* 手型 *\u002F\n",[66,136979,136980,136982,136984,136986,136988,136991,136993],{"class":68,"line":112},[66,136981,53395],{"class":53084},[66,136983,81585],{"class":76},[66,136985,136967],{"class":102},[66,136987,53221],{"class":76},[66,136989,136990],{"class":102},"default",[66,136992,136974],{"class":76},[66,136994,136995],{"class":758},"\u002F* 默认 *\u002F\n",[66,136997,136998,137000,137002,137004,137006,137009,137012],{"class":68,"line":129},[66,136999,53395],{"class":53084},[66,137001,81585],{"class":76},[66,137003,136967],{"class":102},[66,137005,53221],{"class":76},[66,137007,137008],{"class":102},"move",[66,137010,137011],{"class":76},"; }      ",[66,137013,137014],{"class":758},"\u002F* 移动 *\u002F\n",[66,137016,137017,137019,137021,137023,137025,137027,137029],{"class":68,"line":138},[66,137018,53395],{"class":53084},[66,137020,81585],{"class":76},[66,137022,136967],{"class":102},[66,137024,53221],{"class":76},[66,137026,555],{"class":102},[66,137028,137011],{"class":76},[66,137030,137031],{"class":758},"\u002F* 文本 *\u002F\n",[66,137033,137034,137036,137038,137040,137042,137045,137048],{"class":68,"line":227},[66,137035,53395],{"class":53084},[66,137037,81585],{"class":76},[66,137039,136967],{"class":102},[66,137041,53221],{"class":76},[66,137043,137044],{"class":102},"not-allowed",[66,137046,137047],{"class":76},"; } ",[66,137049,137050],{"class":758},"\u002F* 禁止 *\u002F\n",[2129,137052,137053,137061],{},[2132,137054,137055],{},[2135,137056,137057,137059],{},[2138,137058,128786],{"align":25539},[2138,137060,29290],{"align":25539},[2176,137062,137063,137070,137077,137084,137091],{},[2135,137064,137065,137067],{},[2181,137066,136990],{"align":25539},[2181,137068,137069],{"align":25539},"小白 默认",[2135,137071,137072,137074],{},[2181,137073,63809],{"align":25539},[2181,137075,137076],{"align":25539},"小手",[2135,137078,137079,137081],{},[2181,137080,137008],{"align":25539},[2181,137082,137083],{"align":25539},"移动",[2135,137085,137086,137088],{},[2181,137087,555],{"align":25539},[2181,137089,137090],{"align":25539},"文本",[2135,137092,137093,137095],{},[2181,137094,137044],{"align":25539},[2181,137096,137097],{"align":25539},"禁止",[484,137099,137101],{"id":137100},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,137103,137104],{},"去除表单轮廓线",[19,137106,137107],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[57,137109,137110],{"className":128322,"code":131686,"language":128324,"meta":62,"style":62},[23,137111,137112,137116,137122,137138],{"__ignoreMap":62},[66,137113,137114],{"class":68,"line":69},[66,137115,131693],{"class":758},[66,137117,137118,137120],{"class":68,"line":80},[66,137119,53395],{"class":53084},[66,137121,17375],{"class":76},[66,137123,137124,137126,137128,137130,137132,137134,137136],{"class":68,"line":112},[66,137125,72675],{"class":102},[66,137127,53221],{"class":76},[66,137129,304],{"class":102},[66,137131,53276],{"class":72},[66,137133,53305],{"class":102},[66,137135,131714],{"class":102},[66,137137,3135],{"class":76},[66,137139,137140],{"class":68,"line":129},[66,137141,3407],{"class":76},[19,137143,137144],{},"文本域：",[3304,137146],{"style":128178,"src":137147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,137149,137150],{},"此时会有一个空白区域",[3304,137152],{"style":128178,"src":137153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,137155,137156],{},"写在同一行就不会出现这个问题",[3304,137158],{"style":128178,"src":137159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,137161,137162],{},"文本域是行内块元素，一定记住！！！",[19,137164,100008],{},[3304,137166],{"style":128178,"src":137167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,137169,137170],{},"文本域尽量放在一行",[19,137172,137173],{},"知识回顾：cols是列，rols是行",[3304,137175],{"style":128178,"src":137176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,137178,137179],{},"它可以进行拖动，显然这是我们不愿意看到的",[3304,137181],{"style":128178,"src":137182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,137184,137185],{},"使用resize进行解决",[57,137187,137189],{"className":128322,"code":137188,"language":128324,"meta":62,"style":62},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[23,137190,137191,137197,137210],{"__ignoreMap":62},[66,137192,137193,137195],{"class":68,"line":69},[66,137194,351],{"class":53084},[66,137196,17375],{"class":76},[66,137198,137199,137201,137203,137205,137207],{"class":68,"line":80},[66,137200,72577],{"class":102},[66,137202,53221],{"class":76},[66,137204,56518],{"class":102},[66,137206,132185],{"class":76},[66,137208,137209],{"class":758},"\u002F* 取消表单轮廓线 *\u002F\n",[66,137211,137212],{"class":68,"line":112},[66,137213,3407],{"class":76},[19,137215,137216],{},"此时就无法通过右下方实现拖动了",[484,137218,137220],{"id":137219},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,137222,137223],{},"实现一个盒子中的文字和图片对齐",[19,137225,137226,137227,137230],{},"用于设置一个元素的 ",[2141,137228,137229],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,137232,137233],{},"图片和文字默认是基线对齐",[3304,137235],{"style":128178,"src":137236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[57,137238,137239],{"className":128322,"code":137188,"language":128324,"meta":62,"style":62},[23,137240,137241,137247,137259],{"__ignoreMap":62},[66,137242,137243,137245],{"class":68,"line":69},[66,137244,351],{"class":53084},[66,137246,17375],{"class":76},[66,137248,137249,137251,137253,137255,137257],{"class":68,"line":80},[66,137250,72577],{"class":102},[66,137252,53221],{"class":76},[66,137254,56518],{"class":102},[66,137256,132185],{"class":76},[66,137258,137209],{"class":758},[66,137260,137261],{"class":68,"line":112},[66,137262,3407],{"class":76},[3304,137264],{"style":128178,"src":137265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[23801,137267,137269],{"id":137268},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,137271,137272],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[3304,137274],{"style":128178,"src":137275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,137277,137278,137279,137282],{},"此时可以给图片、表单这些行内块元素的 ",[2141,137280,137281],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[23801,137284,137286],{"id":137285},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,137288,137289],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,137291,16438],{},[57,137293,137295],{"className":128322,"code":137294,"language":128324,"meta":62,"style":62},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[23,137296,137297,137302,137308,137320],{"__ignoreMap":62},[66,137298,137299],{"class":68,"line":69},[66,137300,137301],{"class":758},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[66,137303,137304,137306],{"class":68,"line":80},[66,137305,3304],{"class":53084},[66,137307,17375],{"class":76},[66,137309,137310,137313,137315,137318],{"class":68,"line":112},[66,137311,137312],{"class":102},"  vertical-align",[66,137314,53221],{"class":76},[66,137316,137317],{"class":102},"middle",[66,137319,3135],{"class":76},[66,137321,137322],{"class":68,"line":129},[66,137323,3407],{"class":76},[3304,137325],{"style":128178,"src":137326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,137328,137329],{},"主要解决方法有两种：",[31,137331,137332],{},[34,137333,137334,137337,137338,137341],{},[2141,137335,137336],{},"给图片"," 添加 ",[2141,137339,137340],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,137343,137344,137345],{},"2.把图片转换为块级元素 ",[2141,137346,137347],{},"display: block",[19,137349,137350],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,137352,137353],{},"img {",[19,137355,137356],{},"vertical-align:middle;",[19,137358,457],{},[484,137360,137362],{"id":137361},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,137364,137365],{},"效果：",[3304,137367],{"style":128178,"src":137368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,137370,137371],{},"单行文本溢出显示省略号--必须满足三个条件：",[57,137373,137375],{"className":128322,"code":137374,"language":128324,"meta":62,"style":62},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[23,137376,137377,137382,137388,137398,137403,137413],{"__ignoreMap":62},[66,137378,137379],{"class":68,"line":69},[66,137380,137381],{"class":758},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[66,137383,137384,137386],{"class":68,"line":80},[66,137385,3304],{"class":53084},[66,137387,17375],{"class":76},[66,137389,137390,137392,137394,137396],{"class":68,"line":112},[66,137391,137312],{"class":102},[66,137393,53221],{"class":76},[66,137395,137317],{"class":102},[66,137397,3135],{"class":76},[66,137399,137400],{"class":68,"line":129},[66,137401,137402],{"class":758},"  \u002F* 或 *\u002F\n",[66,137404,137405,137407,137409,137411],{"class":68,"line":138},[66,137406,129938],{"class":102},[66,137408,53221],{"class":76},[66,137410,62648],{"class":102},[66,137412,3135],{"class":76},[66,137414,137415],{"class":68,"line":227},[66,137416,3407],{"class":76},[484,137418,137420],{"id":137419},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,137422,137365],{},[3304,137424],{"style":128178,"src":137425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,137427,137428,137429,137432],{},"多行文本溢出显示省略号， ",[2141,137430,137431],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[57,137434,137435],{"className":128322,"code":137374,"language":128324,"meta":62,"style":62},[23,137436,137437,137441,137447,137457,137461,137471],{"__ignoreMap":62},[66,137438,137439],{"class":68,"line":69},[66,137440,137381],{"class":758},[66,137442,137443,137445],{"class":68,"line":80},[66,137444,3304],{"class":53084},[66,137446,17375],{"class":76},[66,137448,137449,137451,137453,137455],{"class":68,"line":112},[66,137450,137312],{"class":102},[66,137452,53221],{"class":76},[66,137454,137317],{"class":102},[66,137456,3135],{"class":76},[66,137458,137459],{"class":68,"line":129},[66,137460,137402],{"class":758},[66,137462,137463,137465,137467,137469],{"class":68,"line":138},[66,137464,129938],{"class":102},[66,137466,53221],{"class":76},[66,137468,62648],{"class":102},[66,137470,3135],{"class":76},[66,137472,137473],{"class":68,"line":227},[66,137474,3407],{"class":76},[19,137476,137477],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,137479,137481],{"id":137480},"_133-常见布局技巧","13.3 常见布局技巧",[19,137483,137484],{},[2141,137485,137486],{},"巧妙利用一个技术更快更好的布局：",[31,137488,137489,137492,137495,137498],{},[34,137490,137491],{},"margin负值的运用",[34,137493,137494],{},"文字围绕浮动元素",[34,137496,137497],{},"行内块的巧妙运用",[34,137499,137500],{},"CSS三角强化",[484,137502,137504],{"id":137503},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,137506,137507],{},"应用场景：",[3304,137509],{"style":128178,"src":137510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[3304,137512],{"style":128178,"src":137513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,137515,137516],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,137518,137519],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[57,137521,137522],{"className":128322,"code":131686,"language":128324,"meta":62,"style":62},[23,137523,137524,137528,137534,137550],{"__ignoreMap":62},[66,137525,137526],{"class":68,"line":69},[66,137527,131693],{"class":758},[66,137529,137530,137532],{"class":68,"line":80},[66,137531,53395],{"class":53084},[66,137533,17375],{"class":76},[66,137535,137536,137538,137540,137542,137544,137546,137548],{"class":68,"line":112},[66,137537,72675],{"class":102},[66,137539,53221],{"class":76},[66,137541,304],{"class":102},[66,137543,53276],{"class":72},[66,137545,53305],{"class":102},[66,137547,131714],{"class":102},[66,137549,3135],{"class":76},[66,137551,137552],{"class":68,"line":129},[66,137553,3407],{"class":76},[3304,137555],{"style":128178,"src":137556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,137558,137559],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[57,137561,137563],{"className":128322,"code":137562,"language":128324,"meta":62,"style":62},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[23,137564,137565,137570,137576,137586,137598,137610],{"__ignoreMap":62},[66,137566,137567],{"class":68,"line":69},[66,137568,137569],{"class":758},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[66,137571,137572,137574],{"class":68,"line":80},[66,137573,132170],{"class":3793},[66,137575,17375],{"class":76},[66,137577,137578,137580,137582,137584],{"class":68,"line":112},[66,137579,134128],{"class":102},[66,137581,53221],{"class":76},[66,137583,56545],{"class":102},[66,137585,3135],{"class":76},[66,137587,137588,137590,137592,137594,137596],{"class":68,"line":129},[66,137589,134142],{"class":102},[66,137591,53221],{"class":76},[66,137593,790],{"class":102},[66,137595,53276],{"class":72},[66,137597,3135],{"class":76},[66,137599,137600,137602,137604,137606,137608],{"class":68,"line":138},[66,137601,134159],{"class":102},[66,137603,53221],{"class":76},[66,137605,2679],{"class":102},[66,137607,53276],{"class":72},[66,137609,3135],{"class":76},[66,137611,137612],{"class":68,"line":227},[66,137613,3407],{"class":76},[19,137615,137616],{},"加上上述代码会发现：",[3304,137618],{"style":128178,"src":137619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,137621,137622],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,137624,137625],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[57,137627,137628],{"className":128322,"code":137562,"language":128324,"meta":62,"style":62},[23,137629,137630,137634,137640,137650,137662,137674],{"__ignoreMap":62},[66,137631,137632],{"class":68,"line":69},[66,137633,137569],{"class":758},[66,137635,137636,137638],{"class":68,"line":80},[66,137637,132170],{"class":3793},[66,137639,17375],{"class":76},[66,137641,137642,137644,137646,137648],{"class":68,"line":112},[66,137643,134128],{"class":102},[66,137645,53221],{"class":76},[66,137647,56545],{"class":102},[66,137649,3135],{"class":76},[66,137651,137652,137654,137656,137658,137660],{"class":68,"line":129},[66,137653,134142],{"class":102},[66,137655,53221],{"class":76},[66,137657,790],{"class":102},[66,137659,53276],{"class":72},[66,137661,3135],{"class":76},[66,137663,137664,137666,137668,137670,137672],{"class":68,"line":138},[66,137665,134159],{"class":102},[66,137667,53221],{"class":76},[66,137669,2679],{"class":102},[66,137671,53276],{"class":72},[66,137673,3135],{"class":76},[66,137675,137676],{"class":68,"line":227},[66,137677,3407],{"class":76},[19,137679,137680],{},"解决方式2：",[19,137682,137683],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[57,137685,137687],{"className":128322,"code":137686,"language":128324,"meta":62,"style":62},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[23,137688,137689,137695,137705,137717,137729],{"__ignoreMap":62},[66,137690,137691,137693],{"class":68,"line":69},[66,137692,53395],{"class":53084},[66,137694,17375],{"class":76},[66,137696,137697,137699,137701,137703],{"class":68,"line":80},[66,137698,134128],{"class":102},[66,137700,53221],{"class":76},[66,137702,56545],{"class":102},[66,137704,3135],{"class":76},[66,137706,137707,137709,137711,137713,137715],{"class":68,"line":112},[66,137708,134142],{"class":102},[66,137710,53221],{"class":76},[66,137712,790],{"class":102},[66,137714,53276],{"class":72},[66,137716,3135],{"class":76},[66,137718,137719,137721,137723,137725,137727],{"class":68,"line":129},[66,137720,134159],{"class":102},[66,137722,53221],{"class":76},[66,137724,2679],{"class":102},[66,137726,53276],{"class":72},[66,137728,3135],{"class":76},[66,137730,137731],{"class":68,"line":138},[66,137732,3407],{"class":76},[484,137734,137736],{"id":137735},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,137738,137507],{},[3304,137740],{"style":128178,"src":137741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,137743,137744],{},"实现结构图：",[3304,137746],{"style":128178,"src":137747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,137749,137750],{},"巧妙运用浮动元素不会压住文字的特性",[19,137752,137753],{},"代码显示：",[57,137755,137757],{"className":128322,"code":137756,"language":128324,"meta":62,"style":62},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[23,137758,137759,137765,137775,137779,137784,137788,137794,137808],{"__ignoreMap":62},[66,137760,137761,137763],{"class":68,"line":69},[66,137762,132170],{"class":3793},[66,137764,17375],{"class":76},[66,137766,137767,137769,137771,137773],{"class":68,"line":80},[66,137768,132802],{"class":102},[66,137770,53221],{"class":76},[66,137772,25539],{"class":102},[66,137774,3135],{"class":76},[66,137776,137777],{"class":68,"line":112},[66,137778,3407],{"class":76},[66,137780,137781],{"class":68,"line":129},[66,137782,137783],{"class":76},"```Css\n",[66,137785,137786],{"class":68,"line":138},[66,137787,132165],{"class":758},[66,137789,137790,137792],{"class":68,"line":227},[66,137791,132170],{"class":3793},[66,137793,17375],{"class":76},[66,137795,137796,137798,137800,137802,137804,137806],{"class":68,"line":236},[66,137797,72249],{"class":102},[66,137799,53221],{"class":76},[66,137801,2183],{"class":102},[66,137803,53340],{"class":102},[66,137805,132185],{"class":76},[66,137807,132188],{"class":758},[66,137809,137810],{"class":68,"line":241},[66,137811,3407],{"class":76},[19,137813,137814],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[57,137816,137819],{"className":137817,"code":137818,"language":555},[553],"\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",[23,137820,137818],{"__ignoreMap":62},[3304,137822],{"style":128178,"src":137823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,137825,137826],{},"最终展示结果：",[57,137828,137829],{"className":128322,"code":132158,"language":128324,"meta":62,"style":62},[23,137830,137831,137835,137841,137855],{"__ignoreMap":62},[66,137832,137833],{"class":68,"line":69},[66,137834,132165],{"class":758},[66,137836,137837,137839],{"class":68,"line":80},[66,137838,132170],{"class":3793},[66,137840,17375],{"class":76},[66,137842,137843,137845,137847,137849,137851,137853],{"class":68,"line":112},[66,137844,72249],{"class":102},[66,137846,53221],{"class":76},[66,137848,2183],{"class":102},[66,137850,53340],{"class":102},[66,137852,132185],{"class":76},[66,137854,132188],{"class":758},[66,137856,137857],{"class":68,"line":129},[66,137858,3407],{"class":76},[3304,137860],{"style":128178,"src":137861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,137863,137865],{"id":137864},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[484,137867,137869],{"id":137868},"_1341-原理","13.4.1 原理",[3304,137871],{"style":128178,"src":137872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[57,137874,137875],{"className":128322,"code":132158,"language":128324,"meta":62,"style":62},[23,137876,137877,137881,137887,137901],{"__ignoreMap":62},[66,137878,137879],{"class":68,"line":69},[66,137880,132165],{"class":758},[66,137882,137883,137885],{"class":68,"line":80},[66,137884,132170],{"class":3793},[66,137886,17375],{"class":76},[66,137888,137889,137891,137893,137895,137897,137899],{"class":68,"line":112},[66,137890,72249],{"class":102},[66,137892,53221],{"class":76},[66,137894,2183],{"class":102},[66,137896,53340],{"class":102},[66,137898,132185],{"class":76},[66,137900,132188],{"class":758},[66,137902,137903],{"class":68,"line":129},[66,137904,3407],{"class":76},[484,137906,137908],{"id":137907},"_1342-实例","13.4.2 实例",[3304,137910],{"style":128178,"src":137911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[57,137913,137914],{"className":128322,"code":132788,"language":128324,"meta":62,"style":62},[23,137915,137916,137922,137932,137936,137942,137952],{"__ignoreMap":62},[66,137917,137918,137920],{"class":68,"line":69},[66,137919,132795],{"class":3793},[66,137921,17375],{"class":76},[66,137923,137924,137926,137928,137930],{"class":68,"line":80},[66,137925,132802],{"class":102},[66,137927,53221],{"class":76},[66,137929,25539],{"class":102},[66,137931,3135],{"class":76},[66,137933,137934],{"class":68,"line":112},[66,137935,3407],{"class":76},[66,137937,137938,137940],{"class":68,"line":129},[66,137939,132817],{"class":3793},[66,137941,17375],{"class":76},[66,137943,137944,137946,137948,137950],{"class":68,"line":138},[66,137945,132802],{"class":102},[66,137947,53221],{"class":76},[66,137949,74301],{"class":102},[66,137951,3135],{"class":76},[66,137953,137954],{"class":68,"line":227},[66,137955,3407],{"class":76},[14,137957,137959],{"id":137958},"_135-css的初始化","13.5 css的初始化",[19,137961,137962],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,137964,137965],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,137967,137968],{},"每个网页都必须首先进行 CSS初始化。",[19,137970,137971],{},"这里我们以 京东CSS初始化代码为例。",[19,137973,137974],{},"在网页右键查看网页源代码",[19,137976,137977],{},"找到css的link引入语句",[19,137979,137980],{},"然后ctrl+f 输入body",[19,137982,79005],{},[3304,137984],{"style":128178,"src":137985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,137987,79028],{},[3304,137989],{"style":128178,"src":137990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,137992,137993],{},"③打开了网页上传压缩的代码",[3304,137995],{"style":128178,"src":137996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,137998,137999],{},"④从body前可以查看这个网页的初始化代码",[19,138001,138002],{},[2141,138003,138004],{},"Unicode编码字体：",[19,138006,138007],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,138009,84984],{},[19,138011,138012],{},"黑体 \\9ED1\\4F53",[19,138014,138015],{},"宋体 \\5B8B\\4F53",[19,138017,138018],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[1903,138020,138021],{},"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":62,"searchDepth":80,"depth":80,"links":138023},[138024,138025,138032,138036,138040],{"id":136821,"depth":80,"text":136822},{"id":136943,"depth":80,"text":136944,"children":138026},[138027,138028,138029,138030,138031],{"id":136947,"depth":112,"text":136948},{"id":137100,"depth":112,"text":137101},{"id":137219,"depth":112,"text":137220},{"id":137361,"depth":112,"text":137362},{"id":137419,"depth":112,"text":137420},{"id":137480,"depth":80,"text":137481,"children":138033},[138034,138035],{"id":137503,"depth":112,"text":137504},{"id":137735,"depth":112,"text":137736},{"id":137864,"depth":80,"text":137865,"children":138037},[138038,138039],{"id":137868,"depth":112,"text":137869},{"id":137907,"depth":112,"text":137908},{"id":137958,"depth":80,"text":137959},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":136813,"description":1926},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":138047,"title":138048,"body":138049,"description":1926,"extension":1927,"meta":139735,"navigation":108,"path":139736,"seo":139737,"stem":139738,"__hash__":139739},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":138050,"toc":139724},[138051,138054,138058,138062,138065,138072,138075,138078,138116,138119,138121,138135,138139,138148,138152,138157,138160,138163,138166,138201,138206,138209,138239,138242,138247,138250,138253,138283,138286,138340,138343,138347,138352,138364,138367,138371,138401,138404,138409,138412,138442,138445,138449,138466,138470,138474,138477,138510,138513,138517,138520,138523,138526,138529,138532,138643,138646,138649,138652,138754,138757,138761,138765,138769,138772,138812,138815,138817,138833,138837,138840,138845,138926,138929,138932,139058,139063,139066,139074,139077,139082,139167,139170,139174,139177,139180,139184,139204,139209,139293,139296,139301,139304,139307,139385,139388,139391,139394,139397,139400,139405,139408,139411,139483,139486,139491,139494,139591,139594,139600,139603,139606,139609,139612,139615,139618,139621,139624,139628,139633,139636,139669,139674,139677,139718,139721],[10,138052,138048],{"id":138053},"_14-html5与css3新特性",[14,138055,138057],{"id":138056},"_141-html5的新特性","14.1 HTML5的新特性",[484,138059,138061],{"id":138060},"_1411-基本标签","14.1.1 基本标签",[19,138063,138064],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,138066,138067,138068,138071],{},"这些新特性都有兼容性问题，基本是 ",[2141,138069,138070],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,138073,138074],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,138076,138077],{},"现在使用的是新特性：",[2982,138079,138080,138086,138092,138098,138104,138110],{},[34,138081,138082,138085],{},[23,138083,138084],{},"\u003Cheader>"," 头部标签",[34,138087,138088,138091],{},[23,138089,138090],{},"\u003Cnav>"," 导航标签",[34,138093,138094,138097],{},[23,138095,138096],{},"\u003Carticle>"," 内容标签",[34,138099,138100,138103],{},[23,138101,138102],{},"\u003Csection>"," 定义文档某个区域",[34,138105,138106,138109],{},[23,138107,138108],{},"\u003Caside>"," 侧边栏标签",[34,138111,138112,138115],{},[23,138113,138114],{},"\u003Cfooter>"," 尾部标签",[3304,138117],{"style":128178,"src":138118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,138120,2028],{},[2982,138122,138123,138126,138129,138132],{},[34,138124,138125],{},"这种语义化标准主要是针对搜索引擎的",[34,138127,138128],{},"这些标签页面中可以经常使用",[34,138130,138131],{},"在IE9中，需要把这些元素转换为块级元素",[34,138133,138134],{},"移动端更喜欢使用这些标签",[484,138136,138138],{"id":138137},"_1412-多媒体标签","14.1.2 多媒体标签",[19,138140,138141,138142,138144,138145,138147],{},"音频 ",[2141,138143,29975],{}," 和视频 ",[2141,138146,29984],{}," 两个标签",[23801,138149,138151],{"id":138150},"_14121-视频标签-video","14.1.2.1 视频标签- video",[31,138153,138154],{},[34,138155,138156],{},"支持格式：",[3304,138158],{"style":128178,"src":138159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,138161,138162],{},"尽量使用MP4，兼容性好",[19,138164,138165],{},"用MP4就可以",[57,138167,138169],{"className":129069,"code":138168,"language":129071,"meta":62,"style":62},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[23,138170,138171],{"__ignoreMap":62},[66,138172,138173,138175,138177,138179,138181,138184,138186,138189,138192,138195,138197,138199],{"class":68,"line":69},[66,138174,413],{"class":76},[66,138176,29984],{"class":53084},[66,138178,57020],{"class":3793},[66,138180,99],{"class":76},[66,138182,138183],{"class":356},"\"movie.mp4\"",[66,138185,94199],{"class":3793},[66,138187,138188],{"class":3793}," autoplay",[66,138190,138191],{"class":3793}," muted",[66,138193,138194],{"class":3793}," loop",[66,138196,57095],{"class":76},[66,138198,29984],{"class":53084},[66,138200,53091],{"class":76},[31,138202,138203],{"start":80},[34,138204,138205],{},"兼容写法",[19,138207,138208],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[57,138210,138211],{"className":129069,"code":138168,"language":129071,"meta":62,"style":62},[23,138212,138213],{"__ignoreMap":62},[66,138214,138215,138217,138219,138221,138223,138225,138227,138229,138231,138233,138235,138237],{"class":68,"line":69},[66,138216,413],{"class":76},[66,138218,29984],{"class":53084},[66,138220,57020],{"class":3793},[66,138222,99],{"class":76},[66,138224,138183],{"class":356},[66,138226,94199],{"class":3793},[66,138228,138188],{"class":3793},[66,138230,138191],{"class":3793},[66,138232,138194],{"class":3793},[66,138234,57095],{"class":76},[66,138236,29984],{"class":53084},[66,138238,53091],{"class":76},[19,138240,138241],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[31,138243,138244],{"start":112},[34,138245,138246],{},"video常用属性",[3304,138248],{"style":128178,"src":138249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,138251,138252],{},"poster属性后面是跟的等待加载图片的地址",[57,138254,138255],{"className":129069,"code":135824,"language":129071,"meta":62,"style":62},[23,138256,138257],{"__ignoreMap":62},[66,138258,138259,138261,138263,138265,138267,138269,138271,138273,138275,138277,138279,138281],{"class":68,"line":69},[66,138260,413],{"class":76},[66,138262,3304],{"class":53084},[66,138264,57020],{"class":3793},[66,138266,99],{"class":76},[66,138268,135839],{"class":356},[66,138270,57028],{"class":3793},[66,138272,99],{"class":76},[66,138274,135846],{"class":356},[66,138276,135849],{"class":3793},[66,138278,99],{"class":76},[66,138280,135854],{"class":356},[66,138282,53091],{"class":76},[19,138284,138285],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[57,138287,138289],{"className":128322,"code":138288,"language":128324,"meta":62,"style":62},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[23,138290,138291,138296,138302,138326,138331,138336],{"__ignoreMap":62},[66,138292,138293],{"class":68,"line":69},[66,138294,138295],{"class":758},"\u002F* 2D 位移 *\u002F\n",[66,138297,138298,138300],{"class":68,"line":80},[66,138299,53395],{"class":53084},[66,138301,17375],{"class":76},[66,138303,138304,138307,138309,138312,138314,138316,138318,138320,138322,138324],{"class":68,"line":112},[66,138305,138306],{"class":102},"  transform",[66,138308,53221],{"class":76},[66,138310,138311],{"class":102},"translate",[66,138313,348],{"class":76},[66,138315,310],{"class":102},[66,138317,53276],{"class":72},[66,138319,307],{"class":76},[66,138321,2635],{"class":102},[66,138323,53276],{"class":72},[66,138325,4543],{"class":76},[66,138327,138328],{"class":68,"line":129},[66,138329,138330],{"class":758},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[66,138332,138333],{"class":68,"line":138},[66,138334,138335],{"class":758},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[66,138337,138338],{"class":68,"line":227},[66,138339,3407],{"class":76},[19,138341,138342],{},"muted:自动静音属性",[23801,138344,138346],{"id":138345},"_14122-音频标签audio","14.1.2.2 音频标签audio",[31,138348,138349],{},[34,138350,138351],{},"基本使用",[19,138353,138354,138355,138360,138361],{},"当前 ",[2141,138356,138357],{},[23,138358,138359],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[2141,138362,138363],{},"mp3格式",[3304,138365],{"style":128178,"src":138366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[31,138368,138369],{"start":80},[34,138370,138205],{},[57,138372,138373],{"className":129069,"code":138168,"language":129071,"meta":62,"style":62},[23,138374,138375],{"__ignoreMap":62},[66,138376,138377,138379,138381,138383,138385,138387,138389,138391,138393,138395,138397,138399],{"class":68,"line":69},[66,138378,413],{"class":76},[66,138380,29984],{"class":53084},[66,138382,57020],{"class":3793},[66,138384,99],{"class":76},[66,138386,138183],{"class":356},[66,138388,94199],{"class":3793},[66,138390,138188],{"class":3793},[66,138392,138191],{"class":3793},[66,138394,138194],{"class":3793},[66,138396,57095],{"class":76},[66,138398,29984],{"class":53084},[66,138400,53091],{"class":76},[19,138402,138403],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[31,138405,138406],{"start":112},[34,138407,138408],{},"常用属性",[3304,138410],{"style":128178,"src":138411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[57,138413,138414],{"className":129069,"code":138168,"language":129071,"meta":62,"style":62},[23,138415,138416],{"__ignoreMap":62},[66,138417,138418,138420,138422,138424,138426,138428,138430,138432,138434,138436,138438,138440],{"class":68,"line":69},[66,138419,413],{"class":76},[66,138421,29984],{"class":53084},[66,138423,57020],{"class":3793},[66,138425,99],{"class":76},[66,138427,138183],{"class":356},[66,138429,94199],{"class":3793},[66,138431,138188],{"class":3793},[66,138433,138191],{"class":3793},[66,138435,138194],{"class":3793},[66,138437,57095],{"class":76},[66,138439,29984],{"class":53084},[66,138441,53091],{"class":76},[19,138443,138444],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[23801,138446,138448],{"id":138447},"_14123-总结","14.1.2.3 总结",[2982,138450,138451,138454,138457,138460,138463],{},[34,138452,138453],{},"音频标签和视频标签使用方式基本一致",[34,138455,138456],{},"浏览器支持情况不同",[34,138458,138459],{},"谷歌浏览器把音频和视频自动播放禁止了",[34,138461,138462],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[34,138464,138465],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[484,138467,138469],{"id":138468},"_1413-表单元素","14.1.3 表单元素",[23801,138471,138473],{"id":138472},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[3304,138475],{"style":128178,"src":138476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[57,138478,138480],{"className":129069,"code":138479,"language":129071,"meta":62,"style":62},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[23,138481,138482],{"__ignoreMap":62},[66,138483,138484,138486,138488,138490,138492,138494,138496,138498,138501,138503,138505,138508],{"class":68,"line":69},[66,138485,413],{"class":76},[66,138487,351],{"class":53084},[66,138489,55605],{"class":3793},[66,138491,99],{"class":76},[66,138493,64478],{"class":356},[66,138495,16724],{"class":3793},[66,138497,99],{"class":76},[66,138499,138500],{"class":356},"\"username\"",[66,138502,62799],{"class":3793},[66,138504,99],{"class":76},[66,138506,138507],{"class":356},"\"请输入用户名\"",[66,138509,53091],{"class":76},[3304,138511],{"style":128178,"src":138512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[23801,138514,138516],{"id":138515},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[3304,138518],{"style":128178,"src":138519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,138521,138522],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,138524,138525],{},"快捷操作：",[3304,138527],{"style":128178,"src":138528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,138530,138531],{},"例子1：",[57,138533,138535],{"className":129069,"code":138534,"language":129071,"meta":62,"style":62},"\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",[23,138536,138537,138560,138587,138616,138635],{"__ignoreMap":62},[66,138538,138539,138541,138543,138545,138547,138550,138553,138555,138558],{"class":68,"line":69},[66,138540,413],{"class":76},[66,138542,68404],{"class":53084},[66,138544,68407],{"class":3793},[66,138546,99],{"class":76},[66,138548,138549],{"class":356},"\"\u002Fsubmit\"",[66,138551,138552],{"class":3793}," method",[66,138554,99],{"class":76},[66,138556,138557],{"class":356},"\"post\"",[66,138559,53091],{"class":76},[66,138561,138562,138564,138566,138568,138570,138572,138574,138576,138578,138580,138582,138585],{"class":68,"line":80},[66,138563,53928],{"class":76},[66,138565,351],{"class":53084},[66,138567,55605],{"class":3793},[66,138569,99],{"class":76},[66,138571,64478],{"class":356},[66,138573,16724],{"class":3793},[66,138575,99],{"class":76},[66,138577,138500],{"class":356},[66,138579,62799],{"class":3793},[66,138581,99],{"class":76},[66,138583,138584],{"class":356},"\"用户名\"",[66,138586,53091],{"class":76},[66,138588,138589,138591,138593,138595,138597,138600,138602,138604,138607,138609,138611,138614],{"class":68,"line":112},[66,138590,53928],{"class":76},[66,138592,351],{"class":53084},[66,138594,55605],{"class":3793},[66,138596,99],{"class":76},[66,138598,138599],{"class":356},"\"password\"",[66,138601,16724],{"class":3793},[66,138603,99],{"class":76},[66,138605,138606],{"class":356},"\"pwd\"",[66,138608,62799],{"class":3793},[66,138610,99],{"class":76},[66,138612,138613],{"class":356},"\"密码\"",[66,138615,53091],{"class":76},[66,138617,138618,138620,138622,138624,138626,138628,138631,138633],{"class":68,"line":129},[66,138619,53928],{"class":76},[66,138621,55668],{"class":53084},[66,138623,55605],{"class":3793},[66,138625,99],{"class":76},[66,138627,68427],{"class":356},[66,138629,138630],{"class":76},">提交\u003C\u002F",[66,138632,55668],{"class":53084},[66,138634,53091],{"class":76},[66,138636,138637,138639,138641],{"class":68,"line":138},[66,138638,53569],{"class":76},[66,138640,68404],{"class":53084},[66,138642,53091],{"class":76},[3304,138644],{"style":128178,"src":138645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,138647,138648],{},"value是表单域的内容",[19,138650,138651],{},"例子2：",[57,138653,138654],{"className":129069,"code":138534,"language":129071,"meta":62,"style":62},[23,138655,138656,138676,138702,138728,138746],{"__ignoreMap":62},[66,138657,138658,138660,138662,138664,138666,138668,138670,138672,138674],{"class":68,"line":69},[66,138659,413],{"class":76},[66,138661,68404],{"class":53084},[66,138663,68407],{"class":3793},[66,138665,99],{"class":76},[66,138667,138549],{"class":356},[66,138669,138552],{"class":3793},[66,138671,99],{"class":76},[66,138673,138557],{"class":356},[66,138675,53091],{"class":76},[66,138677,138678,138680,138682,138684,138686,138688,138690,138692,138694,138696,138698,138700],{"class":68,"line":80},[66,138679,53928],{"class":76},[66,138681,351],{"class":53084},[66,138683,55605],{"class":3793},[66,138685,99],{"class":76},[66,138687,64478],{"class":356},[66,138689,16724],{"class":3793},[66,138691,99],{"class":76},[66,138693,138500],{"class":356},[66,138695,62799],{"class":3793},[66,138697,99],{"class":76},[66,138699,138584],{"class":356},[66,138701,53091],{"class":76},[66,138703,138704,138706,138708,138710,138712,138714,138716,138718,138720,138722,138724,138726],{"class":68,"line":112},[66,138705,53928],{"class":76},[66,138707,351],{"class":53084},[66,138709,55605],{"class":3793},[66,138711,99],{"class":76},[66,138713,138599],{"class":356},[66,138715,16724],{"class":3793},[66,138717,99],{"class":76},[66,138719,138606],{"class":356},[66,138721,62799],{"class":3793},[66,138723,99],{"class":76},[66,138725,138613],{"class":356},[66,138727,53091],{"class":76},[66,138729,138730,138732,138734,138736,138738,138740,138742,138744],{"class":68,"line":129},[66,138731,53928],{"class":76},[66,138733,55668],{"class":53084},[66,138735,55605],{"class":3793},[66,138737,99],{"class":76},[66,138739,68427],{"class":356},[66,138741,138630],{"class":76},[66,138743,55668],{"class":53084},[66,138745,53091],{"class":76},[66,138747,138748,138750,138752],{"class":68,"line":138},[66,138749,53569],{"class":76},[66,138751,68404],{"class":53084},[66,138753,53091],{"class":76},[3304,138755],{"style":128178,"src":138756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,138758,138760],{"id":138759},"_142-css新特性","14.2 CSS新特性",[484,138762,138764],{"id":138763},"_1421-新增选择器","14.2.1 新增选择器",[23801,138766,138768],{"id":138767},"_14211-属性选择器","14.2.1.1 属性选择器",[3304,138770],{"style":128178,"src":138771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[57,138773,138775],{"className":128322,"code":138774,"language":128324,"meta":62,"style":62},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[23,138776,138777,138792,138808],{"__ignoreMap":62},[66,138778,138779,138781,138783,138785,138787,138789],{"class":68,"line":69},[66,138780,351],{"class":53084},[66,138782,2869],{"class":76},[66,138784,104880],{"class":3793},[66,138786,99],{"class":72},[66,138788,64478],{"class":356},[66,138790,138791],{"class":76},"] {\n",[66,138793,138794,138796,138798,138800,138802,138804,138806],{"class":68,"line":80},[66,138795,72675],{"class":102},[66,138797,53221],{"class":76},[66,138799,304],{"class":102},[66,138801,53276],{"class":72},[66,138803,53305],{"class":102},[66,138805,131902],{"class":102},[66,138807,3135],{"class":76},[66,138809,138810],{"class":68,"line":112},[66,138811,3407],{"class":76},[3304,138813],{"style":128178,"src":138814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,138816,2028],{},[2982,138818,138819,138822,138825,138828],{},[34,138820,138821],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[34,138823,138824],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[34,138826,138827],{},"属性选择器也可以选择出来自定义的属性",[34,138829,138830,138832],{},[2141,138831,841],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[23801,138834,138836],{"id":138835},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[3304,138838],{"style":128178,"src":138839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[31,138841,138842],{},[34,138843,138844],{},"fist-child",[57,138846,138848],{"className":128322,"code":138847,"language":128324,"meta":62,"style":62},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[23,138849,138850,138855,138870,138890,138908],{"__ignoreMap":62},[66,138851,138852],{"class":68,"line":69},[66,138853,138854],{"class":758},"\u002F* 属性选择器 *\u002F\n",[66,138856,138857,138859,138861,138863,138865,138867],{"class":68,"line":80},[66,138858,351],{"class":53084},[66,138860,2869],{"class":76},[66,138862,104880],{"class":3793},[66,138864,99],{"class":72},[66,138866,64478],{"class":356},[66,138868,138869],{"class":76},"] { }\n",[66,138871,138872,138874,138876,138878,138881,138884,138887],{"class":68,"line":112},[66,138873,351],{"class":53084},[66,138875,2869],{"class":76},[66,138877,16499],{"class":3793},[66,138879,138880],{"class":72},"^=",[66,138882,138883],{"class":356},"\"icon\"",[66,138885,138886],{"class":76},"] { }  ",[66,138888,138889],{"class":758},"\u002F* 以 icon 开头 *\u002F\n",[66,138891,138892,138894,138896,138898,138901,138903,138905],{"class":68,"line":129},[66,138893,351],{"class":53084},[66,138895,2869],{"class":76},[66,138897,16499],{"class":3793},[66,138899,138900],{"class":72},"$=",[66,138902,138883],{"class":356},[66,138904,138886],{"class":76},[66,138906,138907],{"class":758},"\u002F* 以 icon 结尾 *\u002F\n",[66,138909,138910,138912,138914,138916,138919,138921,138923],{"class":68,"line":138},[66,138911,351],{"class":53084},[66,138913,2869],{"class":76},[66,138915,16499],{"class":3793},[66,138917,138918],{"class":72},"*=",[66,138920,138883],{"class":356},[66,138922,138886],{"class":76},[66,138924,138925],{"class":758},"\u002F* 包含 icon *\u002F\n",[19,138927,138928],{},"ul的第一个儿子文本为红色",[19,138930,138931],{},"一定要在冒号前加空格，不然就是选中所有的了",[57,138933,138935],{"className":128322,"code":138934,"language":128324,"meta":62,"style":62},".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",[23,138936,138937,138943,138953,138957,138961,138966,138979,138992,139008,139025,139042],{"__ignoreMap":62},[66,138938,138939,138941],{"class":68,"line":69},[66,138940,128613],{"class":3793},[66,138942,17375],{"class":76},[66,138944,138945,138947,138949,138951],{"class":68,"line":80},[66,138946,72684],{"class":102},[66,138948,53221],{"class":76},[66,138950,59201],{"class":102},[66,138952,3135],{"class":76},[66,138954,138955],{"class":68,"line":112},[66,138956,3407],{"class":76},[66,138958,138959],{"class":68,"line":129},[66,138960,137783],{"class":76},[66,138962,138963],{"class":68,"line":138},[66,138964,138965],{"class":758},"\u002F* 结构伪类选择器 *\u002F\n",[66,138967,138968,138970,138973,138976],{"class":68,"line":227},[66,138969,34],{"class":53084},[66,138971,138972],{"class":3793},":first-child",[66,138974,138975],{"class":76}," { }           ",[66,138977,138978],{"class":758},"\u002F* 第一个 *\u002F\n",[66,138980,138981,138983,138986,138989],{"class":68,"line":236},[66,138982,34],{"class":53084},[66,138984,138985],{"class":3793},":last-child",[66,138987,138988],{"class":76}," { }            ",[66,138990,138991],{"class":758},"\u002F* 最后一个 *\u002F\n",[66,138993,138994,138996,138998,139000,139002,139005],{"class":68,"line":241},[66,138995,34],{"class":53084},[66,138997,131236],{"class":3793},[66,138999,348],{"class":76},[66,139001,795],{"class":102},[66,139003,139004],{"class":76},") { }          ",[66,139006,139007],{"class":758},"\u002F* 第2个 *\u002F\n",[66,139009,139010,139012,139014,139016,139019,139022],{"class":68,"line":372},[66,139011,34],{"class":53084},[66,139013,131236],{"class":3793},[66,139015,348],{"class":76},[66,139017,139018],{"class":102},"2n",[66,139020,139021],{"class":76},") { }         ",[66,139023,139024],{"class":758},"\u002F* 偶数 *\u002F\n",[66,139026,139027,139029,139031,139033,139036,139039],{"class":68,"line":377},[66,139028,34],{"class":53084},[66,139030,131236],{"class":3793},[66,139032,348],{"class":76},[66,139034,139035],{"class":102},"2n+1",[66,139037,139038],{"class":76},") { }       ",[66,139040,139041],{"class":758},"\u002F* 奇数 *\u002F\n",[66,139043,139044,139046,139048,139050,139053,139055],{"class":68,"line":392},[66,139045,34],{"class":53084},[66,139047,131236],{"class":3793},[66,139049,348],{"class":76},[66,139051,139052],{"class":102},"-n+3",[66,139054,139038],{"class":76},[66,139056,139057],{"class":758},"\u002F* 前3个 *\u002F\n",[53395,139059,139062],{"className":139060},[139061],"example","\n  示例内容\n",[19,139064,139065],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[2982,139067,139068],{},[34,139069,139070,139073],{},[23,139071,139072],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,139075,139076],{},"也就是说它选择的是熊大",[31,139078,139079],{"start":227},[34,139080,139081],{},"权重",[57,139083,139085],{"className":128322,"code":139084,"language":128324,"meta":62,"style":62},"\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",[23,139086,139087,139091,139101,139111,139125,139139,139153],{"__ignoreMap":62},[66,139088,139089],{"class":68,"line":69},[66,139090,138965],{"class":758},[66,139092,139093,139095,139097,139099],{"class":68,"line":80},[66,139094,34],{"class":53084},[66,139096,138972],{"class":3793},[66,139098,138975],{"class":76},[66,139100,138978],{"class":758},[66,139102,139103,139105,139107,139109],{"class":68,"line":112},[66,139104,34],{"class":53084},[66,139106,138985],{"class":3793},[66,139108,138988],{"class":76},[66,139110,138991],{"class":758},[66,139112,139113,139115,139117,139119,139121,139123],{"class":68,"line":129},[66,139114,34],{"class":53084},[66,139116,131236],{"class":3793},[66,139118,348],{"class":76},[66,139120,795],{"class":102},[66,139122,139004],{"class":76},[66,139124,139007],{"class":758},[66,139126,139127,139129,139131,139133,139135,139137],{"class":68,"line":138},[66,139128,34],{"class":53084},[66,139130,131236],{"class":3793},[66,139132,348],{"class":76},[66,139134,139018],{"class":102},[66,139136,139021],{"class":76},[66,139138,139024],{"class":758},[66,139140,139141,139143,139145,139147,139149,139151],{"class":68,"line":227},[66,139142,34],{"class":53084},[66,139144,131236],{"class":3793},[66,139146,348],{"class":76},[66,139148,139035],{"class":102},[66,139150,139038],{"class":76},[66,139152,139041],{"class":758},[66,139154,139155,139157,139159,139161,139163,139165],{"class":68,"line":236},[66,139156,34],{"class":53084},[66,139158,131236],{"class":3793},[66,139160,348],{"class":76},[66,139162,139052],{"class":102},[66,139164,139038],{"class":76},[66,139166,139057],{"class":758},[19,139168,139169],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[23801,139171,139173],{"id":139172},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,139175,139176],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[3304,139178],{"style":128178,"src":139179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[31,139181,139182],{},[34,139183,2028],{},[2982,139185,139186,139189,139192,139195,139198,139201],{},[34,139187,139188],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[34,139190,139191],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[34,139193,139194],{},"语法： element::before {}",[34,139196,139197],{},"before 和 after 必须有 content 属性",[34,139199,139200],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[34,139202,139203],{},"伪元素选择器和标签选择器一样，权重为 1",[31,139205,139206],{"start":80},[34,139207,139208],{},"实例",[57,139210,139211],{"className":128322,"code":139084,"language":128324,"meta":62,"style":62},[23,139212,139213,139217,139227,139237,139251,139265,139279],{"__ignoreMap":62},[66,139214,139215],{"class":68,"line":69},[66,139216,138965],{"class":758},[66,139218,139219,139221,139223,139225],{"class":68,"line":80},[66,139220,34],{"class":53084},[66,139222,138972],{"class":3793},[66,139224,138975],{"class":76},[66,139226,138978],{"class":758},[66,139228,139229,139231,139233,139235],{"class":68,"line":112},[66,139230,34],{"class":53084},[66,139232,138985],{"class":3793},[66,139234,138988],{"class":76},[66,139236,138991],{"class":758},[66,139238,139239,139241,139243,139245,139247,139249],{"class":68,"line":129},[66,139240,34],{"class":53084},[66,139242,131236],{"class":3793},[66,139244,348],{"class":76},[66,139246,795],{"class":102},[66,139248,139004],{"class":76},[66,139250,139007],{"class":758},[66,139252,139253,139255,139257,139259,139261,139263],{"class":68,"line":138},[66,139254,34],{"class":53084},[66,139256,131236],{"class":3793},[66,139258,348],{"class":76},[66,139260,139018],{"class":102},[66,139262,139021],{"class":76},[66,139264,139024],{"class":758},[66,139266,139267,139269,139271,139273,139275,139277],{"class":68,"line":227},[66,139268,34],{"class":53084},[66,139270,131236],{"class":3793},[66,139272,348],{"class":76},[66,139274,139035],{"class":102},[66,139276,139038],{"class":76},[66,139278,139041],{"class":758},[66,139280,139281,139283,139285,139287,139289,139291],{"class":68,"line":236},[66,139282,34],{"class":53084},[66,139284,131236],{"class":3793},[66,139286,348],{"class":76},[66,139288,139052],{"class":102},[66,139290,139038],{"class":76},[66,139292,139057],{"class":758},[3304,139294],{"style":128178,"src":139295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[31,139297,139298],{"start":112},[34,139299,139300],{},"使用场景1",[3304,139302],{"style":128178,"src":139303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,139305,139306],{},"不需要再加盒子来整红色那部分了",[57,139308,139310],{"className":128322,"code":139309,"language":128324,"meta":62,"style":62},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[23,139311,139312,139317,139326,139337,139347,139351,139360,139371,139381],{"__ignoreMap":62},[66,139313,139314],{"class":68,"line":69},[66,139315,139316],{"class":758},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[66,139318,139319,139321,139324],{"class":68,"line":80},[66,139320,53395],{"class":53084},[66,139322,139323],{"class":3793},"::before",[66,139325,17375],{"class":76},[66,139327,139328,139331,139333,139335],{"class":68,"line":112},[66,139329,139330],{"class":102},"  content",[66,139332,53221],{"class":76},[66,139334,9463],{"class":356},[66,139336,3135],{"class":76},[66,139338,139339,139341,139343,139345],{"class":68,"line":129},[66,139340,129938],{"class":102},[66,139342,53221],{"class":76},[66,139344,62648],{"class":102},[66,139346,3135],{"class":76},[66,139348,139349],{"class":68,"line":138},[66,139350,3407],{"class":76},[66,139352,139353,139355,139358],{"class":68,"line":227},[66,139354,53395],{"class":53084},[66,139356,139357],{"class":3793},"::after",[66,139359,17375],{"class":76},[66,139361,139362,139364,139366,139369],{"class":68,"line":236},[66,139363,139330],{"class":102},[66,139365,53221],{"class":76},[66,139367,139368],{"class":356},"\"→\"",[66,139370,3135],{"class":76},[66,139372,139373,139375,139377,139379],{"class":68,"line":241},[66,139374,72684],{"class":102},[66,139376,53221],{"class":76},[66,139378,63849],{"class":102},[66,139380,3135],{"class":76},[66,139382,139383],{"class":68,"line":372},[66,139384,3407],{"class":76},[3304,139386],{"style":128178,"src":139387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,139389,139390],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[3304,139392],{"style":128178,"src":139393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,139395,139396],{},"但是在引用时需要先转义一下",[19,139398,139399],{},"content='\\e930'",[31,139401,139402],{"start":129},[34,139403,139404],{},"使用场景2",[19,139406,139407],{},"仿土豆效果",[19,139409,139410],{},"通过使用伪元素选择器可以减少body中盒子的数量",[57,139412,139413],{"className":128322,"code":139309,"language":128324,"meta":62,"style":62},[23,139414,139415,139419,139427,139437,139447,139451,139459,139469,139479],{"__ignoreMap":62},[66,139416,139417],{"class":68,"line":69},[66,139418,139316],{"class":758},[66,139420,139421,139423,139425],{"class":68,"line":80},[66,139422,53395],{"class":53084},[66,139424,139323],{"class":3793},[66,139426,17375],{"class":76},[66,139428,139429,139431,139433,139435],{"class":68,"line":112},[66,139430,139330],{"class":102},[66,139432,53221],{"class":76},[66,139434,9463],{"class":356},[66,139436,3135],{"class":76},[66,139438,139439,139441,139443,139445],{"class":68,"line":129},[66,139440,129938],{"class":102},[66,139442,53221],{"class":76},[66,139444,62648],{"class":102},[66,139446,3135],{"class":76},[66,139448,139449],{"class":68,"line":138},[66,139450,3407],{"class":76},[66,139452,139453,139455,139457],{"class":68,"line":227},[66,139454,53395],{"class":53084},[66,139456,139357],{"class":3793},[66,139458,17375],{"class":76},[66,139460,139461,139463,139465,139467],{"class":68,"line":236},[66,139462,139330],{"class":102},[66,139464,53221],{"class":76},[66,139466,139368],{"class":356},[66,139468,3135],{"class":76},[66,139470,139471,139473,139475,139477],{"class":68,"line":241},[66,139472,72684],{"class":102},[66,139474,53221],{"class":76},[66,139476,63849],{"class":102},[66,139478,3135],{"class":76},[66,139480,139481],{"class":68,"line":372},[66,139482,3407],{"class":76},[3304,139484],{"style":128178,"src":139485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[31,139487,139488],{"start":138},[34,139489,139490],{},"使用场景3",[19,139492,139493],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[57,139495,139497],{"className":128322,"code":139496,"language":128324,"meta":62,"style":62},".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",[23,139498,139499,139505,139515,139519,139523,139527,139535,139545,139555,139559,139567,139577,139587],{"__ignoreMap":62},[66,139500,139501,139503],{"class":68,"line":69},[66,139502,132170],{"class":3793},[66,139504,17375],{"class":76},[66,139506,139507,139509,139511,139513],{"class":68,"line":80},[66,139508,132802],{"class":102},[66,139510,53221],{"class":76},[66,139512,25539],{"class":102},[66,139514,3135],{"class":76},[66,139516,139517],{"class":68,"line":112},[66,139518,3407],{"class":76},[66,139520,139521],{"class":68,"line":129},[66,139522,137783],{"class":76},[66,139524,139525],{"class":68,"line":138},[66,139526,139316],{"class":758},[66,139528,139529,139531,139533],{"class":68,"line":227},[66,139530,53395],{"class":53084},[66,139532,139323],{"class":3793},[66,139534,17375],{"class":76},[66,139536,139537,139539,139541,139543],{"class":68,"line":236},[66,139538,139330],{"class":102},[66,139540,53221],{"class":76},[66,139542,9463],{"class":356},[66,139544,3135],{"class":76},[66,139546,139547,139549,139551,139553],{"class":68,"line":241},[66,139548,129938],{"class":102},[66,139550,53221],{"class":76},[66,139552,62648],{"class":102},[66,139554,3135],{"class":76},[66,139556,139557],{"class":68,"line":372},[66,139558,3407],{"class":76},[66,139560,139561,139563,139565],{"class":68,"line":377},[66,139562,53395],{"class":53084},[66,139564,139357],{"class":3793},[66,139566,17375],{"class":76},[66,139568,139569,139571,139573,139575],{"class":68,"line":392},[66,139570,139330],{"class":102},[66,139572,53221],{"class":76},[66,139574,139368],{"class":356},[66,139576,3135],{"class":76},[66,139578,139579,139581,139583,139585],{"class":68,"line":405},[66,139580,72684],{"class":102},[66,139582,53221],{"class":76},[66,139584,63849],{"class":102},[66,139586,3135],{"class":76},[66,139588,139589],{"class":68,"line":418},[66,139590,3407],{"class":76},[19,139592,139593],{},"div {\nmargin: 0 auto;\n}",[57,139595,139598],{"className":139596,"code":139597,"language":555},[553],"\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",[23,139599,139597],{"__ignoreMap":62},[19,139601,139602],{},"如果想让多个元素都发生变化",[19,139604,139605],{},"不能如下操作：",[19,139607,139608],{},"transition: width 2s ease 0.5s;",[19,139610,139611],{},"transition: height 2s ease 0.5s;不对！！！",[19,139613,139614],{},"上方会样式冲突，导致不显示任何过渡效果",[19,139616,139617],{},"使用如下：加逗号隔开",[19,139619,139620],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,139622,139623],{},"transition all 2s ease;",[484,139625,139627],{"id":139626},"_1426-过渡练习","14.2.6 过渡练习",[31,139629,139630],{},[34,139631,139632],{},"进度条",[3304,139634],{"style":128178,"src":139635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[57,139637,139639],{"className":128322,"code":139638,"language":128324,"meta":62,"style":62},"div {\n  transition: all 0.3s ease;\n}\n",[23,139640,139641,139647,139665],{"__ignoreMap":62},[66,139642,139643,139645],{"class":68,"line":69},[66,139644,53395],{"class":53084},[66,139646,17375],{"class":76},[66,139648,139649,139652,139654,139656,139659,139661,139663],{"class":68,"line":80},[66,139650,139651],{"class":102},"  transition",[66,139653,53221],{"class":76},[66,139655,29922],{"class":102},[66,139657,139658],{"class":102}," 0.3",[66,139660,2674],{"class":72},[66,139662,80458],{"class":102},[66,139664,3135],{"class":76},[66,139666,139667],{"class":68,"line":112},[66,139668,3407],{"class":76},[31,139670,139671],{"start":80},[34,139672,139673],{},"小米logo",[19,139675,139676],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[57,139678,139680],{"className":128322,"code":139679,"language":128324,"meta":62,"style":62},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[23,139681,139682,139687,139693,139709,139714],{"__ignoreMap":62},[66,139683,139684],{"class":68,"line":69},[66,139685,139686],{"class":758},"\u002F* CSS3 过渡 *\u002F\n",[66,139688,139689,139691],{"class":68,"line":80},[66,139690,53395],{"class":53084},[66,139692,17375],{"class":76},[66,139694,139695,139697,139699,139701,139703,139705,139707],{"class":68,"line":112},[66,139696,139651],{"class":102},[66,139698,53221],{"class":76},[66,139700,29922],{"class":102},[66,139702,139658],{"class":102},[66,139704,2674],{"class":72},[66,139706,80458],{"class":102},[66,139708,3135],{"class":76},[66,139710,139711],{"class":68,"line":129},[66,139712,139713],{"class":758},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[66,139715,139716],{"class":68,"line":138},[66,139717,3407],{"class":76},[19,139719,139720],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[1903,139722,139723],{},"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":62,"searchDepth":80,"depth":80,"links":139725},[139726,139731],{"id":138056,"depth":80,"text":138057,"children":139727},[139728,139729,139730],{"id":138060,"depth":112,"text":138061},{"id":138137,"depth":112,"text":138138},{"id":138468,"depth":112,"text":138469},{"id":138759,"depth":80,"text":138760,"children":139732},[139733,139734],{"id":138763,"depth":112,"text":138764},{"id":139626,"depth":112,"text":139627},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":138048,"description":1926},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":139741,"title":139742,"body":139743,"description":1926,"extension":1927,"meta":141487,"navigation":108,"path":141488,"seo":141489,"stem":141490,"__hash__":141491},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":139744,"toc":141468},[139745,139748,139752,139755,139761,139767,139771,139773,139776,139779,139782,139785,139788,139791,139794,139798,139802,139805,139808,139811,139815,139818,139821,139826,139829,139832,139835,139839,139842,139851,139854,139857,139861,139864,139867,139872,139879,139893,139901,139908,139913,139916,139919,139922,139929,139933,139939,139945,139948,139951,139956,139962,139964,139972,139977,139980,139986,139988,139993,139998,140001,140003,140008,140011,140016,140021,140055,140059,140063,140066,140070,140073,140159,140162,140199,140202,140238,140242,140247,140260,140314,140316,140344,140346,140374,140380,140394,140396,140440,140442,140486,140489,140496,140507,140509,140536,140538,140564,140571,140587,140589,140683,140685,140779,140786,140789,140794,140800,140874,140877,140879,140915,140917,140953,140956,140963,140982,140985,140988,140990,141015,141017,141041,141044,141047,141077,141081,141084,141147,141149,141215,141217,141281,141284,141316,141318,141344,141346,141372,141375,141406,141408,141434,141436,141462,141465],[10,139746,139742],{"id":139747},"_15-品优购项目上篇-搭建与公共模块",[14,139749,139751],{"id":139750},"_151-项目规划","15.1 项目规划",[3304,139753],{"style":128178,"src":139754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,139756,139757,139760],{},[2141,139758,139759],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,139762,139763,139766],{},[2141,139764,139765],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,139768,139770],{"id":139769},"_152-项目介绍","15.2 项目介绍",[19,139772,139759],{},[3304,139774],{"style":128178,"src":139775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,139777,139778],{},"主页：",[3304,139780],{"style":128178,"src":139781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,139783,139784],{},"列表页：",[3304,139786],{"style":128178,"src":139787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,139789,139790],{},"注册页：",[3304,139792],{"style":128178,"src":139793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,139795,139797],{"id":139796},"_153-项目搭建工作","15.3 项目搭建工作",[484,139799,139801],{"id":139800},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[3304,139803],{"style":128178,"src":139804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,139806,139807],{},"经常更换的图片要放到upload文件夹中",[19,139809,139810],{},"不经常换的放到images文件夹中",[484,139812,139814],{"id":139813},"_1532-创建文件如下","15.3.2 创建文件如下",[3304,139816],{"style":128178,"src":139817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[3304,139819],{"style":128178,"src":139820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,139822,139823],{},[2141,139824,139825],{},"初始化样式：",[19,139827,139828],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,139830,139831],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,139833,139834],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[484,139836,139838],{"id":139837},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,139840,139841],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,139843,139844,139845,139850],{},"这里最典型的应用就是 ",[2141,139846,139847],{},[23,139848,139849],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[3304,139852],{"style":128178,"src":139853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,139855,139856],{},"通过link方法来引入",[484,139858,139860],{"id":139859},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[3304,139862],{"style":128178,"src":139863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,139865,139866],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[31,139868,139869],{},[34,139870,139871],{},"制作favicon图标",[19,139873,139874,139875,139878],{},"①把品优购图标切成 ",[23,139876,139877],{},"png"," 图片",[19,139880,139881,139882,139884,139885,139888,139889],{},"②把 ",[23,139883,139877],{}," 图片转换为 ",[23,139886,139887],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[2229,139890,139891],{"href":139891,"rel":139892},"http:\u002F\u002Fwww.bitbug.net\u002F",[25668],[31,139894,139895,139898],{"start":80},[34,139896,139897],{},"favicon图标放到网站根目录下",[34,139899,139900],{},"HTML页面引入favicon",[19,139902,139903,139904,139907],{},"在html 页面里面的 ",[23,139905,139906],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,139909,139910],{},[23,139911,139912],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,139914,139915],{},"复制这行代码或者在生成这个的网站进行复制",[3304,139917],{"style":128178,"src":139918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,139920,139921],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,139923,139924,139925],{},"例如:",[2229,139926,139927],{"href":139927,"rel":139928},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[25668],[484,139930,139932],{"id":139931},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,139934,139935,139938],{},[2141,139936,139937],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,139940,139941,139944],{},[2141,139942,139943],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,139946,139947],{},"页面必须有三个标签用来符合 SEO 优化",[3304,139949],{"style":128178,"src":139950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[31,139952,139953],{},[34,139954,139955],{},"title网站标题",[19,139957,139958,139961],{},[2141,139959,139960],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,139963,70569],{},[2982,139965,139966,139969],{},[34,139967,139968],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[34,139970,139971],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[31,139973,139974],{"start":80},[34,139975,139976],{},"description网站描述",[19,139978,139979],{},"简要说明我们网站主要是做什么的",[19,139981,139982,139985],{},[2141,139983,139984],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,139987,70569],{},[19,139989,139990],{},[23,139991,139992],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[31,139994,139995],{"start":112},[34,139996,139997],{},"keywords关键词",[19,139999,140000],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,140002,70569],{},[19,140004,140005],{},[23,140006,140007],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,140009,140010],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,140012,140013],{},[2141,140014,140015],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[31,140017,140018],{"start":129},[34,140019,140020],{},"代码总结",[57,140022,140023],{"className":129069,"code":132426,"language":129071,"meta":62,"style":62},[23,140024,140025,140029,140043,140047],{"__ignoreMap":62},[66,140026,140027],{"class":68,"line":69},[66,140028,132433],{"class":758},[66,140030,140031,140033,140035,140037,140039,140041],{"class":68,"line":80},[66,140032,413],{"class":76},[66,140034,53395],{"class":53084},[66,140036,55268],{"class":3793},[66,140038,99],{"class":76},[66,140040,132446],{"class":356},[66,140042,53091],{"class":76},[66,140044,140045],{"class":68,"line":112},[66,140046,132453],{"class":76},[66,140048,140049,140051,140053],{"class":68,"line":129},[66,140050,53569],{"class":76},[66,140052,53395],{"class":53084},[66,140054,53091],{"class":76},[14,140056,140058],{"id":140057},"_154-项目公共部分制作","15.4 项目公共部分制作",[484,140060,140062],{"id":140061},"_1541-常用模块类命名","15.4.1 常用模块类命名",[3304,140064],{"style":128178,"src":140065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[484,140067,140069],{"id":140068},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,140071,140072],{},"布局思路：",[2982,140074,140075,140078,140081,140103,140136],{},[34,140076,140077],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[34,140079,140080],{},"里面包含版心的盒子",[34,140082,140083,140084],{},"版心盒子里面包含 1 号左侧盒子左浮动",[2982,140085,140086,140094,140100],{},[34,140087,140088,140089,23303,140091,140093],{},"1 号盒子 里面包含一个",[23,140090,2982],{},[23,140092,2982],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[34,140095,140096,140097,140099],{},"里面的内容是水平排列，所以需要给",[23,140098,34],{},"设置浮动",[34,140101,140102],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[34,140104,140105,140106],{},"版心盒子里面包含 2 号右侧盒子右浮动",[2982,140107,140108,140122,140127],{},[34,140109,140110,140111,23303,140113,140115,140116,140118,140119,140121],{},"2 号盒子 里面包含一个",[23,140112,2982],{},[23,140114,2982],{},"包裹",[23,140117,34],{},"，中间的",[23,140120,2898],{},"可以用样式去设置，也可以用字符 |",[34,140123,140124,140125,140099],{},"里面内容水平排列，给",[23,140126,34],{},[34,140128,140129,140130,140132,140133,140135],{},"找到里面所有偶数的 ",[23,140131,34],{}," 设置样式（偶数的 ",[23,140134,34],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[34,140137,140138,140139],{},"需要用到字体图标",[2982,140140,140141,140147,140150,140153,140156],{},[34,140142,140143,140144],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[23,140145,140146],{},"arrow-icon",[34,140148,140149],{},"先要引入字体图片的资源",[34,140151,140152],{},"在样式里面利用 font-face 来进行声明",[34,140154,140155],{},"在伪元素的 content属性设置 图标的编码",[34,140157,140158],{},"给伪元素设置font-family属性",[19,140160,140161],{},"结构实例代码：",[57,140163,140165],{"className":128322,"code":140164,"language":128324,"meta":62,"style":62},"div::before {\n  content: \"\";\n  display: block;\n}\n",[23,140166,140167,140175,140185,140195],{"__ignoreMap":62},[66,140168,140169,140171,140173],{"class":68,"line":69},[66,140170,53395],{"class":53084},[66,140172,139323],{"class":3793},[66,140174,17375],{"class":76},[66,140176,140177,140179,140181,140183],{"class":68,"line":80},[66,140178,139330],{"class":102},[66,140180,53221],{"class":76},[66,140182,9463],{"class":356},[66,140184,3135],{"class":76},[66,140186,140187,140189,140191,140193],{"class":68,"line":112},[66,140188,129938],{"class":102},[66,140190,53221],{"class":76},[66,140192,62648],{"class":102},[66,140194,3135],{"class":76},[66,140196,140197],{"class":68,"line":129},[66,140198,3407],{"class":76},[19,140200,140201],{},"样式实例代码：",[57,140203,140204],{"className":128322,"code":140164,"language":128324,"meta":62,"style":62},[23,140205,140206,140214,140224,140234],{"__ignoreMap":62},[66,140207,140208,140210,140212],{"class":68,"line":69},[66,140209,53395],{"class":53084},[66,140211,139323],{"class":3793},[66,140213,17375],{"class":76},[66,140215,140216,140218,140220,140222],{"class":68,"line":80},[66,140217,139330],{"class":102},[66,140219,53221],{"class":76},[66,140221,9463],{"class":356},[66,140223,3135],{"class":76},[66,140225,140226,140228,140230,140232],{"class":68,"line":112},[66,140227,129938],{"class":102},[66,140229,53221],{"class":76},[66,140231,62648],{"class":102},[66,140233,3135],{"class":76},[66,140235,140236],{"class":68,"line":129},[66,140237,3407],{"class":76},[484,140239,140241],{"id":140240},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[2982,140243,140244],{},[34,140245,140246],{},"header 盒子必须要有高度",[19,140248,140249,140250,140252,140253],{},"1 号盒子是 ",[23,140251,133334],{}," 标志定位，在正常开发过程中， ",[2141,140254,140255,140256,140259],{},"logo的布局其实是有讲究的，需要进行 ",[23,140257,140258],{},"logoSEO","的优化 （★★★）",[2982,140261,140262,140270,140278,140305],{},[34,140263,140264,140266,140267,140269],{},[23,140265,133334],{}," 里面首先放一个 ",[23,140268,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[34,140271,140272,140274,140275,140277],{},[23,140273,10],{}," 里面再放一个链接，可以返回首页的，把 ",[23,140276,133334],{}," 的背景图片给链接即可",[34,140279,140280,140281],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[2982,140282,140283,140298],{},[34,140284,140285,140286,140289,140290,140293,140294,140297],{},"方法1：",[23,140287,140288],{},"text-indent"," 移到盒子外面（",[23,140291,140292],{},"text-indent: -9999px",") ，然后 ",[23,140295,140296],{},"overflow:hidden"," ，淘宝的做法",[34,140299,140300,140301,140304],{},"方法2：直接给 ",[23,140302,140303],{},"font-size: 0;"," 就看不到文字了，京东的做法",[34,140306,140307,140308,140310,140311,140313],{},"最后给链接一个 ",[23,140309,53191],{}," 属性，这样鼠标放到 ",[23,140312,133334],{}," 上就可以看到提示文字了",[19,140315,140161],{},[57,140317,140318],{"className":129069,"code":133555,"language":129071,"meta":62,"style":62},[23,140319,140320],{"__ignoreMap":62},[66,140321,140322,140324,140326,140328,140330,140332,140334,140336,140338,140340,140342],{"class":68,"line":69},[66,140323,413],{"class":76},[66,140325,2229],{"class":53084},[66,140327,62836],{"class":3793},[66,140329,99],{"class":76},[66,140331,133570],{"class":356},[66,140333,133573],{"class":3793},[66,140335,99],{"class":76},[66,140337,133578],{"class":356},[66,140339,133581],{"class":76},[66,140341,2229],{"class":53084},[66,140343,53091],{"class":76},[19,140345,140201],{},[57,140347,140348],{"className":129069,"code":133555,"language":129071,"meta":62,"style":62},[23,140349,140350],{"__ignoreMap":62},[66,140351,140352,140354,140356,140358,140360,140362,140364,140366,140368,140370,140372],{"class":68,"line":69},[66,140353,413],{"class":76},[66,140355,2229],{"class":53084},[66,140357,62836],{"class":3793},[66,140359,99],{"class":76},[66,140361,133570],{"class":356},[66,140363,133573],{"class":3793},[66,140365,99],{"class":76},[66,140367,133578],{"class":356},[66,140369,133581],{"class":76},[66,140371,2229],{"class":53084},[66,140373,53091],{"class":76},[19,140375,140376,140377,140379],{},"2 号盒子是 ",[23,140378,133347],{}," 搜索模块定位",[2982,140381,140382,140385,140388,140391],{},[34,140383,140384],{},"search盒子利用定位的方式放在对应的位置",[34,140386,140387],{},"search盒子设置绝对定位，header盒子设置相对定位",[34,140389,140390],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[34,140392,140393],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,140395,140161],{},[57,140397,140398],{"className":128322,"code":133642,"language":128324,"meta":62,"style":62},[23,140399,140400,140422,140426,140436],{"__ignoreMap":62},[66,140401,140402,140404,140406,140408,140410,140412,140414,140416,140418,140420],{"class":68,"line":69},[66,140403,53395],{"class":53084},[66,140405,307],{"class":76},[66,140407,19],{"class":53084},[66,140409,307],{"class":76},[66,140411,10],{"class":53084},[66,140413,307],{"class":76},[66,140415,2982],{"class":53084},[66,140417,307],{"class":76},[66,140419,34],{"class":53084},[66,140421,17375],{"class":76},[66,140423,140424],{"class":68,"line":80},[66,140425,133671],{"class":758},[66,140427,140428,140430,140432,140434],{"class":68,"line":112},[66,140429,129938],{"class":102},[66,140431,53221],{"class":76},[66,140433,62648],{"class":102},[66,140435,3135],{"class":76},[66,140437,140438],{"class":68,"line":129},[66,140439,3407],{"class":76},[19,140441,140201],{},[57,140443,140444],{"className":128322,"code":133642,"language":128324,"meta":62,"style":62},[23,140445,140446,140468,140472,140482],{"__ignoreMap":62},[66,140447,140448,140450,140452,140454,140456,140458,140460,140462,140464,140466],{"class":68,"line":69},[66,140449,53395],{"class":53084},[66,140451,307],{"class":76},[66,140453,19],{"class":53084},[66,140455,307],{"class":76},[66,140457,10],{"class":53084},[66,140459,307],{"class":76},[66,140461,2982],{"class":53084},[66,140463,307],{"class":76},[66,140465,34],{"class":53084},[66,140467,17375],{"class":76},[66,140469,140470],{"class":68,"line":80},[66,140471,133671],{"class":758},[66,140473,140474,140476,140478,140480],{"class":68,"line":112},[66,140475,129938],{"class":102},[66,140477,53221],{"class":76},[66,140479,62648],{"class":102},[66,140481,3135],{"class":76},[66,140483,140484],{"class":68,"line":129},[66,140485,3407],{"class":76},[19,140487,140488],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,140490,140491,140492,140495],{},"3 号盒子是 ",[23,140493,140494],{},"hotwords"," 热词模块定位",[2982,140497,140498,140501,140504],{},[34,140499,140500],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[34,140502,140503],{},"给里面所有的a标签设置 左右10px的外边距",[34,140505,140506],{},"给第一个a标签设置文字变红色（#c81623）",[19,140508,140161],{},[57,140510,140512],{"className":128322,"code":140511,"language":128324,"meta":62,"style":62},"div {\n  margin: 0 auto;\n}\n",[23,140513,140514,140520,140532],{"__ignoreMap":62},[66,140515,140516,140518],{"class":68,"line":69},[66,140517,53395],{"class":53084},[66,140519,17375],{"class":76},[66,140521,140522,140524,140526,140528,140530],{"class":68,"line":80},[66,140523,72249],{"class":102},[66,140525,53221],{"class":76},[66,140527,2183],{"class":102},[66,140529,53340],{"class":102},[66,140531,3135],{"class":76},[66,140533,140534],{"class":68,"line":112},[66,140535,3407],{"class":76},[19,140537,140201],{},[57,140539,140540],{"className":128322,"code":140511,"language":128324,"meta":62,"style":62},[23,140541,140542,140548,140560],{"__ignoreMap":62},[66,140543,140544,140546],{"class":68,"line":69},[66,140545,53395],{"class":53084},[66,140547,17375],{"class":76},[66,140549,140550,140552,140554,140556,140558],{"class":68,"line":80},[66,140551,72249],{"class":102},[66,140553,53221],{"class":76},[66,140555,2183],{"class":102},[66,140557,53340],{"class":102},[66,140559,3135],{"class":76},[66,140561,140562],{"class":68,"line":112},[66,140563,3407],{"class":76},[19,140565,140566,140567,140570],{},"4 号盒子是 ",[23,140568,140569],{},"shopcar"," 购物车模块",[2982,140572,140573,140578,140581,140584],{},[34,140574,125105,140575,140577],{},[23,140576,140569],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[34,140579,140580],{},"count 统计部分用绝对定位做",[34,140582,140583],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[34,140585,140586],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,140588,140161],{},[57,140590,140591],{"className":128322,"code":133754,"language":128324,"meta":62,"style":62},[23,140592,140593,140597,140611,140615,140629,140633,140647,140651,140665,140669],{"__ignoreMap":62},[66,140594,140595],{"class":68,"line":69},[66,140596,133761],{"class":758},[66,140598,140599,140601,140603,140605,140607,140609],{"class":68,"line":80},[66,140600,133766],{"class":3793},[66,140602,81585],{"class":76},[66,140604,130682],{"class":102},[66,140606,53221],{"class":76},[66,140608,133775],{"class":102},[66,140610,131252],{"class":76},[66,140612,140613],{"class":68,"line":112},[66,140614,133782],{"class":758},[66,140616,140617,140619,140621,140623,140625,140627],{"class":68,"line":129},[66,140618,133787],{"class":3793},[66,140620,81585],{"class":76},[66,140622,130682],{"class":102},[66,140624,53221],{"class":76},[66,140626,56545],{"class":102},[66,140628,131252],{"class":76},[66,140630,140631],{"class":68,"line":138},[66,140632,133802],{"class":758},[66,140634,140635,140637,140639,140641,140643,140645],{"class":68,"line":227},[66,140636,133807],{"class":3793},[66,140638,81585],{"class":76},[66,140640,130682],{"class":102},[66,140642,53221],{"class":76},[66,140644,56612],{"class":102},[66,140646,131252],{"class":76},[66,140648,140649],{"class":68,"line":236},[66,140650,133822],{"class":758},[66,140652,140653,140655,140657,140659,140661,140663],{"class":68,"line":241},[66,140654,133827],{"class":3793},[66,140656,81585],{"class":76},[66,140658,130682],{"class":102},[66,140660,53221],{"class":76},[66,140662,88009],{"class":102},[66,140664,131252],{"class":76},[66,140666,140667],{"class":68,"line":372},[66,140668,133842],{"class":758},[66,140670,140671,140673,140675,140677,140679,140681],{"class":68,"line":377},[66,140672,133847],{"class":3793},[66,140674,81585],{"class":76},[66,140676,130682],{"class":102},[66,140678,53221],{"class":76},[66,140680,133856],{"class":102},[66,140682,131252],{"class":76},[19,140684,140201],{},[57,140686,140687],{"className":128322,"code":133754,"language":128324,"meta":62,"style":62},[23,140688,140689,140693,140707,140711,140725,140729,140743,140747,140761,140765],{"__ignoreMap":62},[66,140690,140691],{"class":68,"line":69},[66,140692,133761],{"class":758},[66,140694,140695,140697,140699,140701,140703,140705],{"class":68,"line":80},[66,140696,133766],{"class":3793},[66,140698,81585],{"class":76},[66,140700,130682],{"class":102},[66,140702,53221],{"class":76},[66,140704,133775],{"class":102},[66,140706,131252],{"class":76},[66,140708,140709],{"class":68,"line":112},[66,140710,133782],{"class":758},[66,140712,140713,140715,140717,140719,140721,140723],{"class":68,"line":129},[66,140714,133787],{"class":3793},[66,140716,81585],{"class":76},[66,140718,130682],{"class":102},[66,140720,53221],{"class":76},[66,140722,56545],{"class":102},[66,140724,131252],{"class":76},[66,140726,140727],{"class":68,"line":138},[66,140728,133802],{"class":758},[66,140730,140731,140733,140735,140737,140739,140741],{"class":68,"line":227},[66,140732,133807],{"class":3793},[66,140734,81585],{"class":76},[66,140736,130682],{"class":102},[66,140738,53221],{"class":76},[66,140740,56612],{"class":102},[66,140742,131252],{"class":76},[66,140744,140745],{"class":68,"line":236},[66,140746,133822],{"class":758},[66,140748,140749,140751,140753,140755,140757,140759],{"class":68,"line":241},[66,140750,133827],{"class":3793},[66,140752,81585],{"class":76},[66,140754,130682],{"class":102},[66,140756,53221],{"class":76},[66,140758,88009],{"class":102},[66,140760,131252],{"class":76},[66,140762,140763],{"class":68,"line":372},[66,140764,133842],{"class":758},[66,140766,140767,140769,140771,140773,140775,140777],{"class":68,"line":377},[66,140768,133847],{"class":3793},[66,140770,81585],{"class":76},[66,140772,130682],{"class":102},[66,140774,53221],{"class":76},[66,140776,133856],{"class":102},[66,140778,131252],{"class":76},[484,140780,140782,140783,140785],{"id":140781},"_1544-nav导航模块制作","15.4.4 ",[23,140784,55495],{},"导航模块制作",[3304,140787],{"style":128178,"src":140788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,140790,140791,140793],{},[23,140792,55495],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,140795,140796,140797],{},"1 号盒子左侧浮动，",[23,140798,140799],{},"dropdown",[2982,140801,140802,140812,140820,140826,140834,140844,140852,140863],{},[34,140803,140804,140805,102792,140808,140811],{},"1号盒子有讲究，根据相关性 里面包含 ",[23,140806,140807],{},".dt",[23,140809,140810],{},".dd"," 两个盒子",[34,140813,140814,140816,140817,140819],{},[23,140815,140807],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[23,140818,140810],{}," 挤到下面去了",[34,140821,140822,140823,140825],{},"给 ",[23,140824,140810],{}," 盒子设置宽度 和 高度，以及背景颜色",[34,140827,140822,140828,140830,140831,122008],{},[23,140829,140810],{}," 盒子里面定义 无序列表 （",[23,140832,140833],{},"ul > li > a",[34,140835,140836,140837,140839,140840,140843],{},"每个 ",[23,140838,34],{}," 都有一个高度（",[23,140841,140842],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[34,140845,140822,140846,140848,140849,122008],{},[23,140847,34],{}," 里面的a设置文字大小（",[23,140850,140851],{},"14px",[34,140853,140822,140854,140856,140857,140859,140860,140862],{},[23,140855,34],{}," 设置 ",[23,140858,129483],{},"，当鼠标移入的时候，让",[23,140861,34],{},"的背景变成白色，让里面的文字变成红色",[34,140864,140865,140867,140868,140870,140871,140873],{},[23,140866,34],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[23,140869,34],{},"的右侧，那么给",[23,140872,34],{},"设置相对定位",[19,140875,140876],{},"一定要注意相关性",[19,140878,140161],{},[57,140880,140881],{"className":128322,"code":140164,"language":128324,"meta":62,"style":62},[23,140882,140883,140891,140901,140911],{"__ignoreMap":62},[66,140884,140885,140887,140889],{"class":68,"line":69},[66,140886,53395],{"class":53084},[66,140888,139323],{"class":3793},[66,140890,17375],{"class":76},[66,140892,140893,140895,140897,140899],{"class":68,"line":80},[66,140894,139330],{"class":102},[66,140896,53221],{"class":76},[66,140898,9463],{"class":356},[66,140900,3135],{"class":76},[66,140902,140903,140905,140907,140909],{"class":68,"line":112},[66,140904,129938],{"class":102},[66,140906,53221],{"class":76},[66,140908,62648],{"class":102},[66,140910,3135],{"class":76},[66,140912,140913],{"class":68,"line":129},[66,140914,3407],{"class":76},[19,140916,140201],{},[57,140918,140919],{"className":128322,"code":140164,"language":128324,"meta":62,"style":62},[23,140920,140921,140929,140939,140949],{"__ignoreMap":62},[66,140922,140923,140925,140927],{"class":68,"line":69},[66,140924,53395],{"class":53084},[66,140926,139323],{"class":3793},[66,140928,17375],{"class":76},[66,140930,140931,140933,140935,140937],{"class":68,"line":80},[66,140932,139330],{"class":102},[66,140934,53221],{"class":76},[66,140936,9463],{"class":356},[66,140938,3135],{"class":76},[66,140940,140941,140943,140945,140947],{"class":68,"line":112},[66,140942,129938],{"class":102},[66,140944,53221],{"class":76},[66,140946,62648],{"class":102},[66,140948,3135],{"class":76},[66,140950,140951],{"class":68,"line":129},[66,140952,3407],{"class":76},[19,140954,140955],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,140957,140958,140959,140962],{},"2 号盒子左侧浮动，",[23,140960,140961],{},"navitems"," 导航栏组",[2982,140964,140965,140970,140979],{},[34,140966,140967,140968],{},"里面结构是 ",[23,140969,140833],{},[34,140971,140972,140973,140975,140976,140978],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[23,140974,2229],{},"左右的",[23,140977,32677],{},"把两侧撑开",[34,140980,140981],{},"让文字垂直居中（行高等于高度）",[3304,140983],{"style":128178,"src":140984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,140986,140987],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,140989,140161],{},[57,140991,140993],{"className":128322,"code":140992,"language":128324,"meta":62,"style":62},".box {\n  float: left;\n}\n",[23,140994,140995,141001,141011],{"__ignoreMap":62},[66,140996,140997,140999],{"class":68,"line":69},[66,140998,132170],{"class":3793},[66,141000,17375],{"class":76},[66,141002,141003,141005,141007,141009],{"class":68,"line":80},[66,141004,132802],{"class":102},[66,141006,53221],{"class":76},[66,141008,25539],{"class":102},[66,141010,3135],{"class":76},[66,141012,141013],{"class":68,"line":112},[66,141014,3407],{"class":76},[19,141016,140201],{},[57,141018,141019],{"className":128322,"code":140992,"language":128324,"meta":62,"style":62},[23,141020,141021,141027,141037],{"__ignoreMap":62},[66,141022,141023,141025],{"class":68,"line":69},[66,141024,132170],{"class":3793},[66,141026,17375],{"class":76},[66,141028,141029,141031,141033,141035],{"class":68,"line":80},[66,141030,132802],{"class":102},[66,141032,53221],{"class":76},[66,141034,25539],{"class":102},[66,141036,3135],{"class":76},[66,141038,141039],{"class":68,"line":112},[66,141040,3407],{"class":76},[19,141042,141043],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[3304,141045],{"style":128178,"src":141046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[57,141048,141049],{"className":128322,"code":132479,"language":128324,"meta":62,"style":62},[23,141050,141051,141057,141073],{"__ignoreMap":62},[66,141052,141053,141055],{"class":68,"line":69},[66,141054,53395],{"class":53084},[66,141056,17375],{"class":76},[66,141058,141059,141061,141063,141065,141067,141069,141071],{"class":68,"line":80},[66,141060,72675],{"class":102},[66,141062,53221],{"class":76},[66,141064,304],{"class":102},[66,141066,53276],{"class":72},[66,141068,53305],{"class":102},[66,141070,131714],{"class":102},[66,141072,3135],{"class":76},[66,141074,141075],{"class":68,"line":112},[66,141076,3407],{"class":76},[484,141078,141080],{"id":141079},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[3304,141082],{"style":128178,"src":141083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[2982,141085,141086,141091,141096],{},[34,141087,141088,141090],{},[23,141089,133525],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[34,141092,141093,141095],{},[23,141094,133525],{}," 里面有一个大的版心",[34,141097,141098,141099,141102,141103],{},"版心里面包含 1 号盒子，",[23,141100,141101],{},"mod_service"," 是服务模块，mod 是模块的意思",[2982,141104,141105,141110,141123,141139,141144],{},[34,141106,140822,141107,141109],{},[23,141108,141101],{}," 设置高度（80px）和下边框",[34,141111,141112,141113,141116,141117,141119,141120,141122],{},"在里面定义 ",[23,141114,141115],{},"ul > li"," ,每个",[23,141118,34],{}," 宽度是300px 高度是 50px，给每个",[23,141121,34],{},"设置35px的左内边距",[34,141124,141125,141126,141128,141129,141131,141132,141134,141135,20213,141137,122008],{},"在每个",[23,141127,34],{},"里面，放一个 ",[23,141130,24713],{},"（里面放图标），一个",[23,141133,53395],{},"（里面放",[23,141136,53395],{},[23,141138,19],{},[34,141140,140822,141141,141143],{},[23,141142,24713],{},"设置浮动，让h5与这个div左右排列",[34,141145,141146],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,141148,140161],{},[57,141150,141152],{"className":128322,"code":141151,"language":128324,"meta":62,"style":62},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[23,141153,141154,141160,141172,141184,141211],{"__ignoreMap":62},[66,141155,141156,141158],{"class":68,"line":69},[66,141157,136079],{"class":3793},[66,141159,17375],{"class":76},[66,141161,141162,141164,141166,141168,141170],{"class":68,"line":80},[66,141163,72347],{"class":102},[66,141165,53221],{"class":76},[66,141167,2679],{"class":102},[66,141169,53276],{"class":72},[66,141171,3135],{"class":76},[66,141173,141174,141176,141178,141180,141182],{"class":68,"line":112},[66,141175,72567],{"class":102},[66,141177,53221],{"class":76},[66,141179,2679],{"class":102},[66,141181,53276],{"class":72},[66,141183,3135],{"class":76},[66,141185,141186,141188,141190,141192,141194,141196,141198,141200,141203,141205,141207,141209],{"class":68,"line":129},[66,141187,72390],{"class":102},[66,141189,53221],{"class":76},[66,141191,63505],{"class":102},[66,141193,348],{"class":76},[66,141195,136118],{"class":1234},[66,141197,15519],{"class":76},[66,141199,63515],{"class":102},[66,141201,141202],{"class":102}," -10",[66,141204,53276],{"class":72},[66,141206,136137],{"class":102},[66,141208,53276],{"class":72},[66,141210,3135],{"class":76},[66,141212,141213],{"class":68,"line":138},[66,141214,3407],{"class":76},[19,141216,140201],{},[57,141218,141219],{"className":128322,"code":141151,"language":128324,"meta":62,"style":62},[23,141220,141221,141227,141239,141251,141277],{"__ignoreMap":62},[66,141222,141223,141225],{"class":68,"line":69},[66,141224,136079],{"class":3793},[66,141226,17375],{"class":76},[66,141228,141229,141231,141233,141235,141237],{"class":68,"line":80},[66,141230,72347],{"class":102},[66,141232,53221],{"class":76},[66,141234,2679],{"class":102},[66,141236,53276],{"class":72},[66,141238,3135],{"class":76},[66,141240,141241,141243,141245,141247,141249],{"class":68,"line":112},[66,141242,72567],{"class":102},[66,141244,53221],{"class":76},[66,141246,2679],{"class":102},[66,141248,53276],{"class":72},[66,141250,3135],{"class":76},[66,141252,141253,141255,141257,141259,141261,141263,141265,141267,141269,141271,141273,141275],{"class":68,"line":129},[66,141254,72390],{"class":102},[66,141256,53221],{"class":76},[66,141258,63505],{"class":102},[66,141260,348],{"class":76},[66,141262,136118],{"class":1234},[66,141264,15519],{"class":76},[66,141266,63515],{"class":102},[66,141268,141202],{"class":102},[66,141270,53276],{"class":72},[66,141272,136137],{"class":102},[66,141274,53276],{"class":72},[66,141276,3135],{"class":76},[66,141278,141279],{"class":68,"line":138},[66,141280,3407],{"class":76},[19,141282,141283],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[2982,141285,141286,141289,141295,141301,141313],{},[34,141287,141288],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[34,141290,141291,141292,122008],{},"里面的布局利用 自定义列表来实现（",[23,141293,141294],{},"dl > dt + dd",[34,141296,140822,141297,141300],{},[23,141298,141299],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[34,141302,140822,141303,141306,141307,20213,141309,141312],{},[23,141304,141305],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[23,141308,141305],{},[23,141310,141311],{},"dd","之间有些距离",[34,141314,141315],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,141317,140161],{},[57,141319,141320],{"className":128322,"code":140511,"language":128324,"meta":62,"style":62},[23,141321,141322,141328,141340],{"__ignoreMap":62},[66,141323,141324,141326],{"class":68,"line":69},[66,141325,53395],{"class":53084},[66,141327,17375],{"class":76},[66,141329,141330,141332,141334,141336,141338],{"class":68,"line":80},[66,141331,72249],{"class":102},[66,141333,53221],{"class":76},[66,141335,2183],{"class":102},[66,141337,53340],{"class":102},[66,141339,3135],{"class":76},[66,141341,141342],{"class":68,"line":112},[66,141343,3407],{"class":76},[19,141345,140201],{},[57,141347,141348],{"className":128322,"code":140511,"language":128324,"meta":62,"style":62},[23,141349,141350,141356,141368],{"__ignoreMap":62},[66,141351,141352,141354],{"class":68,"line":69},[66,141353,53395],{"class":53084},[66,141355,17375],{"class":76},[66,141357,141358,141360,141362,141364,141366],{"class":68,"line":80},[66,141359,72249],{"class":102},[66,141361,53221],{"class":76},[66,141363,2183],{"class":102},[66,141365,53340],{"class":102},[66,141367,3135],{"class":76},[66,141369,141370],{"class":68,"line":112},[66,141371,3407],{"class":76},[19,141373,141374],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[2982,141376,141377,141386,141389,141400],{},[34,141378,141379,141380,141382,141383,141385],{},"分为上下两块，上面是 ",[23,141381,133542],{}," 友情链接，下面是 ",[23,141384,133535],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[34,141387,141388],{},"把内容分别复制到相应模块中",[34,141390,140822,141391,141393,141394,141396,141397,141399],{},[23,141392,133542],{}," 设置 15px 的下外边距，给",[23,141395,133542],{}," 里面 的 ",[23,141398,2229],{}," 标签设置 左右 3px 的外边距",[34,141401,141402,141403,141405],{},"给",[23,141404,133535],{}," 设置 20px 的行高",[19,141407,140161],{},[57,141409,141410],{"className":128322,"code":140511,"language":128324,"meta":62,"style":62},[23,141411,141412,141418,141430],{"__ignoreMap":62},[66,141413,141414,141416],{"class":68,"line":69},[66,141415,53395],{"class":53084},[66,141417,17375],{"class":76},[66,141419,141420,141422,141424,141426,141428],{"class":68,"line":80},[66,141421,72249],{"class":102},[66,141423,53221],{"class":76},[66,141425,2183],{"class":102},[66,141427,53340],{"class":102},[66,141429,3135],{"class":76},[66,141431,141432],{"class":68,"line":112},[66,141433,3407],{"class":76},[19,141435,140201],{},[57,141437,141438],{"className":128322,"code":140511,"language":128324,"meta":62,"style":62},[23,141439,141440,141446,141458],{"__ignoreMap":62},[66,141441,141442,141444],{"class":68,"line":69},[66,141443,53395],{"class":53084},[66,141445,17375],{"class":76},[66,141447,141448,141450,141452,141454,141456],{"class":68,"line":80},[66,141449,72249],{"class":102},[66,141451,53221],{"class":76},[66,141453,2183],{"class":102},[66,141455,53340],{"class":102},[66,141457,3135],{"class":76},[66,141459,141460],{"class":68,"line":112},[66,141461,3407],{"class":76},[19,141463,141464],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[1903,141466,141467],{},"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":62,"searchDepth":80,"depth":80,"links":141469},[141470,141471,141472,141479],{"id":139750,"depth":80,"text":139751},{"id":139769,"depth":80,"text":139770},{"id":139796,"depth":80,"text":139797,"children":141473},[141474,141475,141476,141477,141478],{"id":139800,"depth":112,"text":139801},{"id":139813,"depth":112,"text":139814},{"id":139837,"depth":112,"text":139838},{"id":139859,"depth":112,"text":139860},{"id":139931,"depth":112,"text":139932},{"id":140057,"depth":80,"text":140058,"children":141480},[141481,141482,141483,141484,141486],{"id":140061,"depth":112,"text":140062},{"id":140068,"depth":112,"text":140069},{"id":140240,"depth":112,"text":140241},{"id":140781,"depth":112,"text":141485},"15.4.4 nav导航模块制作",{"id":141079,"depth":112,"text":141080},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":139742,"description":1926},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":141493,"title":141494,"body":141495,"description":1926,"extension":1927,"meta":143897,"navigation":108,"path":143898,"seo":143899,"stem":143900,"__hash__":143901},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":141496,"toc":143874},[141497,141500,141504,141508,141520,141523,141526,141529,141540,141542,141566,141568,141592,141597,141600,141602,141638,141640,141676,141679,141684,141687,141690,141693,141723,141730,141733,141743,141745,141779,141782,141816,141822,141839,141841,141877,141879,141915,141920,141945,141947,141973,141975,141999,142006,142009,142073,142075,142117,142119,142159,142166,142171,142173,142203,142205,142235,142239,142242,142249,142261,142263,142289,142291,142315,142318,142320,142344,142350,142360,142362,142392,142394,142424,142431,142472,142474,142510,142512,142548,142552,142555,142558,142561,142567,142572,142575,142598,142601,142625,142628,142652,142657,142660,142663,142666,142669,142672,142746,142748,142778,142780,142810,142813,142816,142848,142852,142856,142870,142879,142882,142887,142889,142983,142985,143079,143102,143104,143128,143130,143154,143161,143164,143174,143176,143200,143205,143213,143215,143245,143250,143290,143292,143318,143320,143346,143350,143353,143358,143361,143365,143373,143380,143388,143390,143420,143422,143452,143460,143463,143466,143468,143498,143500,143530,143533,143538,143540,143564,143566,143590,143593,143678,143680,143704,143706,143730,143734,143736,143760,143762,143796,143800,143814,143817,143822,143825,143830,143833,143863,143871],[10,141498,141494],{"id":141499},"_16-品优购项目下篇-主体与页面开发",[14,141501,141503],{"id":141502},"_161-项目主体模块制作","16.1 项目主体模块制作",[484,141505,141507],{"id":141506},"_1611-首页制作","16.1.1 首页制作",[19,141509,141510,141512,141513,141515,141516,141519],{},[2141,141511,103831],{}," 主体模块是 ",[2141,141514,75837],{}," 里面专有的，注意需要新的样式文件 ",[2141,141517,141518],{},"index.css，"," 就不要写在common.css中了",[3304,141521],{"style":128178,"src":141522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[3304,141524],{"style":128178,"src":141525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,141527,141528],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[2982,141530,141531,141534,141537],{},[34,141532,141533],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[34,141535,141536],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[34,141538,141539],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,141541,140161],{},[57,141543,141544],{"className":128322,"code":140992,"language":128324,"meta":62,"style":62},[23,141545,141546,141552,141562],{"__ignoreMap":62},[66,141547,141548,141550],{"class":68,"line":69},[66,141549,132170],{"class":3793},[66,141551,17375],{"class":76},[66,141553,141554,141556,141558,141560],{"class":68,"line":80},[66,141555,132802],{"class":102},[66,141557,53221],{"class":76},[66,141559,25539],{"class":102},[66,141561,3135],{"class":76},[66,141563,141564],{"class":68,"line":112},[66,141565,3407],{"class":76},[19,141567,140201],{},[57,141569,141570],{"className":128322,"code":140992,"language":128324,"meta":62,"style":62},[23,141571,141572,141578,141588],{"__ignoreMap":62},[66,141573,141574,141576],{"class":68,"line":69},[66,141575,132170],{"class":3793},[66,141577,17375],{"class":76},[66,141579,141580,141582,141584,141586],{"class":68,"line":80},[66,141581,132802],{"class":102},[66,141583,53221],{"class":76},[66,141585,25539],{"class":102},[66,141587,3135],{"class":76},[66,141589,141590],{"class":68,"line":112},[66,141591,3407],{"class":76},[31,141593,141594],{},[34,141595,141596],{},"左侧focus模块制作",[3304,141598],{"style":128178,"src":141599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,141601,140161],{},[57,141603,141604],{"className":128322,"code":129645,"language":128324,"meta":62,"style":62},[23,141605,141606,141614,141624,141634],{"__ignoreMap":62},[66,141607,141608,141610,141612],{"class":68,"line":69},[66,141609,351],{"class":53084},[66,141611,63679],{"class":3793},[66,141613,17375],{"class":76},[66,141615,141616,141618,141620,141622],{"class":68,"line":80},[66,141617,129660],{"class":102},[66,141619,53221],{"class":76},[66,141621,56670],{"class":102},[66,141623,3135],{"class":76},[66,141625,141626,141628,141630,141632],{"class":68,"line":112},[66,141627,72577],{"class":102},[66,141629,53221],{"class":76},[66,141631,56518],{"class":102},[66,141633,3135],{"class":76},[66,141635,141636],{"class":68,"line":129},[66,141637,3407],{"class":76},[19,141639,140201],{},[57,141641,141642],{"className":128322,"code":129645,"language":128324,"meta":62,"style":62},[23,141643,141644,141652,141662,141672],{"__ignoreMap":62},[66,141645,141646,141648,141650],{"class":68,"line":69},[66,141647,351],{"class":53084},[66,141649,63679],{"class":3793},[66,141651,17375],{"class":76},[66,141653,141654,141656,141658,141660],{"class":68,"line":80},[66,141655,129660],{"class":102},[66,141657,53221],{"class":76},[66,141659,56670],{"class":102},[66,141661,3135],{"class":76},[66,141663,141664,141666,141668,141670],{"class":68,"line":112},[66,141665,72577],{"class":102},[66,141667,53221],{"class":76},[66,141669,56518],{"class":102},[66,141671,3135],{"class":76},[66,141673,141674],{"class":68,"line":129},[66,141675,3407],{"class":76},[19,141677,141678],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[31,141680,141681],{"start":80},[34,141682,141683],{},"右侧newsflash模块制作",[3304,141685],{"style":128178,"src":141686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,141688,141689],{},"右侧的模块 分为上中下三个盒子",[19,141691,141692],{},"结构代码：",[57,141694,141695],{"className":129069,"code":135824,"language":129071,"meta":62,"style":62},[23,141696,141697],{"__ignoreMap":62},[66,141698,141699,141701,141703,141705,141707,141709,141711,141713,141715,141717,141719,141721],{"class":68,"line":69},[66,141700,413],{"class":76},[66,141702,3304],{"class":53084},[66,141704,57020],{"class":3793},[66,141706,99],{"class":76},[66,141708,135839],{"class":356},[66,141710,57028],{"class":3793},[66,141712,99],{"class":76},[66,141714,135846],{"class":356},[66,141716,135849],{"class":3793},[66,141718,99],{"class":76},[66,141720,135854],{"class":356},[66,141722,53091],{"class":76},[19,141724,141725,141726,141729],{},"1 号盒子为 ",[23,141727,141728],{},"news"," 新闻模块 高度为 165px",[3304,141731],{"style":128178,"src":141732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,141734,141735,141736,141739,141740],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[23,141737,141738],{},"news-hd","，下面是 ",[23,141741,141742],{},"news-bd",[19,141744,141692],{},[57,141746,141747],{"className":129069,"code":132426,"language":129071,"meta":62,"style":62},[23,141748,141749,141753,141767,141771],{"__ignoreMap":62},[66,141750,141751],{"class":68,"line":69},[66,141752,132433],{"class":758},[66,141754,141755,141757,141759,141761,141763,141765],{"class":68,"line":80},[66,141756,413],{"class":76},[66,141758,53395],{"class":53084},[66,141760,55268],{"class":3793},[66,141762,99],{"class":76},[66,141764,132446],{"class":356},[66,141766,53091],{"class":76},[66,141768,141769],{"class":68,"line":112},[66,141770,132453],{"class":76},[66,141772,141773,141775,141777],{"class":68,"line":129},[66,141774,53569],{"class":76},[66,141776,53395],{"class":53084},[66,141778,53091],{"class":76},[19,141780,141781],{},"样式代码：",[57,141783,141784],{"className":129069,"code":132426,"language":129071,"meta":62,"style":62},[23,141785,141786,141790,141804,141808],{"__ignoreMap":62},[66,141787,141788],{"class":68,"line":69},[66,141789,132433],{"class":758},[66,141791,141792,141794,141796,141798,141800,141802],{"class":68,"line":80},[66,141793,413],{"class":76},[66,141795,53395],{"class":53084},[66,141797,55268],{"class":3793},[66,141799,99],{"class":76},[66,141801,132446],{"class":356},[66,141803,53091],{"class":76},[66,141805,141806],{"class":68,"line":112},[66,141807,132453],{"class":76},[66,141809,141810,141812,141814],{"class":68,"line":129},[66,141811,53569],{"class":76},[66,141813,53395],{"class":53084},[66,141815,53091],{"class":76},[19,141817,141818,141819,141821],{},"上面是",[23,141820,141738],{},"，设置高度是 33px，设置下边框",[2982,141823,141824,141830],{},[34,141825,141826,141827,141829],{},"里面放一个",[23,141828,24713],{}," 标题",[34,141831,141832,141833,141835,141836,141838],{},"放一个a",[23,141834,104466],{},"，内容是 更多，然后让 ",[23,141837,2229],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,141840,141692],{},[57,141842,141843],{"className":128322,"code":140164,"language":128324,"meta":62,"style":62},[23,141844,141845,141853,141863,141873],{"__ignoreMap":62},[66,141846,141847,141849,141851],{"class":68,"line":69},[66,141848,53395],{"class":53084},[66,141850,139323],{"class":3793},[66,141852,17375],{"class":76},[66,141854,141855,141857,141859,141861],{"class":68,"line":80},[66,141856,139330],{"class":102},[66,141858,53221],{"class":76},[66,141860,9463],{"class":356},[66,141862,3135],{"class":76},[66,141864,141865,141867,141869,141871],{"class":68,"line":112},[66,141866,129938],{"class":102},[66,141868,53221],{"class":76},[66,141870,62648],{"class":102},[66,141872,3135],{"class":76},[66,141874,141875],{"class":68,"line":129},[66,141876,3407],{"class":76},[19,141878,141781],{},[57,141880,141881],{"className":128322,"code":140164,"language":128324,"meta":62,"style":62},[23,141882,141883,141891,141901,141911],{"__ignoreMap":62},[66,141884,141885,141887,141889],{"class":68,"line":69},[66,141886,53395],{"class":53084},[66,141888,139323],{"class":3793},[66,141890,17375],{"class":76},[66,141892,141893,141895,141897,141899],{"class":68,"line":80},[66,141894,139330],{"class":102},[66,141896,53221],{"class":76},[66,141898,9463],{"class":356},[66,141900,3135],{"class":76},[66,141902,141903,141905,141907,141909],{"class":68,"line":112},[66,141904,129938],{"class":102},[66,141906,53221],{"class":76},[66,141908,62648],{"class":102},[66,141910,3135],{"class":76},[66,141912,141913],{"class":68,"line":129},[66,141914,3407],{"class":76},[19,141916,141917,141918],{},"下面是",[23,141919,141742],{},[2982,141921,141922,141930],{},[34,141923,141924,141925,102792,141927,141929],{},"里面包含 ",[23,141926,2982],{},[23,141928,34],{}," 还有链接",[34,141931,141402,141932,141934,141935,141937,141938,141941,141942],{},[23,141933,34],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[23,141936,132988],{}," 2.设置 ",[23,141939,141940],{},"white-space: nowrap;"," 3. 设置 ",[23,141943,141944],{},"text-overflow: ellipsis;",[19,141946,141692],{},[57,141948,141950],{"className":128322,"code":141949,"language":128324,"meta":62,"style":62},"div {\n  overflow: hidden;\n}\n",[23,141951,141952,141958,141969],{"__ignoreMap":62},[66,141953,141954,141956],{"class":68,"line":69},[66,141955,53395],{"class":53084},[66,141957,17375],{"class":76},[66,141959,141960,141963,141965,141967],{"class":68,"line":80},[66,141961,141962],{"class":102},"  overflow",[66,141964,53221],{"class":76},[66,141966,63493],{"class":102},[66,141968,3135],{"class":76},[66,141970,141971],{"class":68,"line":112},[66,141972,3407],{"class":76},[19,141974,141781],{},[57,141976,141977],{"className":128322,"code":141949,"language":128324,"meta":62,"style":62},[23,141978,141979,141985,141995],{"__ignoreMap":62},[66,141980,141981,141983],{"class":68,"line":69},[66,141982,53395],{"class":53084},[66,141984,17375],{"class":76},[66,141986,141987,141989,141991,141993],{"class":68,"line":80},[66,141988,141962],{"class":102},[66,141990,53221],{"class":76},[66,141992,63493],{"class":102},[66,141994,3135],{"class":76},[66,141996,141997],{"class":68,"line":112},[66,141998,3407],{"class":76},[19,142000,142001,142002,142005],{},"2 号盒子为 ",[23,142003,142004],{},"lifeservice"," 生活服务模块 高度为 209px",[3304,142007],{"style":128178,"src":142008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[2982,142010,142011,142014,142024,142048,142059],{},[34,142012,142013],{},"设置边框（左右下边框）",[34,142015,142016,142017,142020,142021,142023],{},"里面的内容 是 ",[23,142018,142019],{},"ul > 12*li","，给",[23,142022,34],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[34,142025,142026,142027],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[2982,142028,142029,142034,142043],{},[34,142030,142031,142033],{},[23,142032,142004],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[34,142035,142036,142037,142039,142040,142042],{},"可以让 ",[23,142038,142004],{}," 里面的 ",[23,142041,2982],{}," 宽度为 252，就可以装的下 4 个 小 li",[34,142044,142045,142047],{},[23,142046,142004],{}," 盒子 overflow 隐藏多余的部分就可以了",[34,142049,118238,142050,142052,142053,142055,142056,142058],{},[23,142051,34],{}," 里面放一个 ",[23,142054,257],{},"（里面放图标），下面的文本用 ",[23,142057,19],{}," 标签包裹",[34,142060,140822,142061,142063,142064,142066,142067,140856,142069,142072],{},[23,142062,257],{}," 设置 24px宽和28px的高（注意 ",[23,142065,257],{}," 是行内元素， 转成行内块），给 ",[23,142068,34],{},[23,142070,142071],{},"text-align:center"," 让里面内容居中显示",[19,142074,141692],{},[57,142076,142078],{"className":128322,"code":142077,"language":128324,"meta":62,"style":62},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[23,142079,142080,142098,142103,142113],{"__ignoreMap":62},[66,142081,142082,142084,142086,142088,142090,142092,142094,142096],{"class":68,"line":69},[66,142083,66],{"class":53084},[66,142085,307],{"class":76},[66,142087,2229],{"class":53084},[66,142089,307],{"class":76},[66,142091,25356],{"class":53084},[66,142093,307],{"class":76},[66,142095,2141],{"class":53084},[66,142097,17375],{"class":76},[66,142099,142100],{"class":68,"line":80},[66,142101,142102],{"class":758},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[66,142104,142105,142107,142109,142111],{"class":68,"line":112},[66,142106,129938],{"class":102},[66,142108,53221],{"class":76},[66,142110,130000],{"class":102},[66,142112,3135],{"class":76},[66,142114,142115],{"class":68,"line":129},[66,142116,3407],{"class":76},[19,142118,141781],{},[57,142120,142121],{"className":128322,"code":142077,"language":128324,"meta":62,"style":62},[23,142122,142123,142141,142145,142155],{"__ignoreMap":62},[66,142124,142125,142127,142129,142131,142133,142135,142137,142139],{"class":68,"line":69},[66,142126,66],{"class":53084},[66,142128,307],{"class":76},[66,142130,2229],{"class":53084},[66,142132,307],{"class":76},[66,142134,25356],{"class":53084},[66,142136,307],{"class":76},[66,142138,2141],{"class":53084},[66,142140,17375],{"class":76},[66,142142,142143],{"class":68,"line":80},[66,142144,142102],{"class":758},[66,142146,142147,142149,142151,142153],{"class":68,"line":112},[66,142148,129938],{"class":102},[66,142150,53221],{"class":76},[66,142152,130000],{"class":102},[66,142154,3135],{"class":76},[66,142156,142157],{"class":68,"line":129},[66,142158,3407],{"class":76},[19,142160,142161,142162,142165],{},"3 号盒子为 ",[23,142163,142164],{},"bargain"," 特价商品",[2982,142167,142168],{},[34,142169,142170],{},"这个比较简单，直接插入一张图片即可",[19,142172,141692],{},[57,142174,142175],{"className":129069,"code":135824,"language":129071,"meta":62,"style":62},[23,142176,142177],{"__ignoreMap":62},[66,142178,142179,142181,142183,142185,142187,142189,142191,142193,142195,142197,142199,142201],{"class":68,"line":69},[66,142180,413],{"class":76},[66,142182,3304],{"class":53084},[66,142184,57020],{"class":3793},[66,142186,99],{"class":76},[66,142188,135839],{"class":356},[66,142190,57028],{"class":3793},[66,142192,99],{"class":76},[66,142194,135846],{"class":356},[66,142196,135849],{"class":3793},[66,142198,99],{"class":76},[66,142200,135854],{"class":356},[66,142202,53091],{"class":76},[19,142204,141781],{},[57,142206,142207],{"className":129069,"code":135824,"language":129071,"meta":62,"style":62},[23,142208,142209],{"__ignoreMap":62},[66,142210,142211,142213,142215,142217,142219,142221,142223,142225,142227,142229,142231,142233],{"class":68,"line":69},[66,142212,413],{"class":76},[66,142214,3304],{"class":53084},[66,142216,57020],{"class":3793},[66,142218,99],{"class":76},[66,142220,135839],{"class":356},[66,142222,57028],{"class":3793},[66,142224,99],{"class":76},[66,142226,135846],{"class":356},[66,142228,135849],{"class":3793},[66,142230,99],{"class":76},[66,142232,135854],{"class":356},[66,142234,53091],{"class":76},[484,142236,142238],{"id":142237},"_1612-推荐模块制作","16.1.2 推荐模块制作",[3304,142240],{"style":128178,"src":142241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,142243,142244,142245,142248],{},"大盒子 ",[23,142246,142247],{},"recom"," 推荐模块 recommend",[2982,142250,142251],{},[34,142252,142253,142254,142256,142257,142260],{},"给这个 ",[23,142255,142247],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[23,142258,142259],{},"#ebebeb","），设置距离上边 12px",[19,142262,141692],{},[57,142264,142266],{"className":128322,"code":142265,"language":128324,"meta":62,"style":62},"div {\n  background-color: #f0f0f0;\n}\n",[23,142267,142268,142274,142285],{"__ignoreMap":62},[66,142269,142270,142272],{"class":68,"line":69},[66,142271,53395],{"class":53084},[66,142273,17375],{"class":76},[66,142275,142276,142278,142280,142283],{"class":68,"line":80},[66,142277,72657],{"class":102},[66,142279,53221],{"class":76},[66,142281,142282],{"class":102},"#f0f0f0",[66,142284,3135],{"class":76},[66,142286,142287],{"class":68,"line":112},[66,142288,3407],{"class":76},[19,142290,141781],{},[57,142292,142293],{"className":128322,"code":142265,"language":128324,"meta":62,"style":62},[23,142294,142295,142301,142311],{"__ignoreMap":62},[66,142296,142297,142299],{"class":68,"line":69},[66,142298,53395],{"class":53084},[66,142300,17375],{"class":76},[66,142302,142303,142305,142307,142309],{"class":68,"line":80},[66,142304,72657],{"class":102},[66,142306,53221],{"class":76},[66,142308,142282],{"class":102},[66,142310,3135],{"class":76},[66,142312,142313],{"class":68,"line":112},[66,142314,3407],{"class":76},[19,142316,142317],{},"里面包含 2 个盒子， 浮动即可",[19,142319,141692],{},[57,142321,142322],{"className":128322,"code":140992,"language":128324,"meta":62,"style":62},[23,142323,142324,142330,142340],{"__ignoreMap":62},[66,142325,142326,142328],{"class":68,"line":69},[66,142327,132170],{"class":3793},[66,142329,17375],{"class":76},[66,142331,142332,142334,142336,142338],{"class":68,"line":80},[66,142333,132802],{"class":102},[66,142335,53221],{"class":76},[66,142337,25539],{"class":102},[66,142339,3135],{"class":76},[66,142341,142342],{"class":68,"line":112},[66,142343,3407],{"class":76},[19,142345,142346,142347],{},"1 号盒子 ",[23,142348,142349],{},"recom_hd",[2982,142351,142352,142355],{},[34,142353,142354],{},"设置宽度205px，高度163px",[34,142356,141826,142357,142359],{},[23,142358,3304],{},"标签，插入图片即可",[19,142361,141692],{},[57,142363,142364],{"className":129069,"code":135824,"language":129071,"meta":62,"style":62},[23,142365,142366],{"__ignoreMap":62},[66,142367,142368,142370,142372,142374,142376,142378,142380,142382,142384,142386,142388,142390],{"class":68,"line":69},[66,142369,413],{"class":76},[66,142371,3304],{"class":53084},[66,142373,57020],{"class":3793},[66,142375,99],{"class":76},[66,142377,135839],{"class":356},[66,142379,57028],{"class":3793},[66,142381,99],{"class":76},[66,142383,135846],{"class":356},[66,142385,135849],{"class":3793},[66,142387,99],{"class":76},[66,142389,135854],{"class":356},[66,142391,53091],{"class":76},[19,142393,141781],{},[57,142395,142396],{"className":129069,"code":135824,"language":129071,"meta":62,"style":62},[23,142397,142398],{"__ignoreMap":62},[66,142399,142400,142402,142404,142406,142408,142410,142412,142414,142416,142418,142420,142422],{"class":68,"line":69},[66,142401,413],{"class":76},[66,142403,3304],{"class":53084},[66,142405,57020],{"class":3793},[66,142407,99],{"class":76},[66,142409,135839],{"class":356},[66,142411,57028],{"class":3793},[66,142413,99],{"class":76},[66,142415,135846],{"class":356},[66,142417,135849],{"class":3793},[66,142419,99],{"class":76},[66,142421,135854],{"class":356},[66,142423,53091],{"class":76},[19,142425,142426,142427,142430],{},"2 号盒子 ",[23,142428,142429],{},"recom_bd"," ，注意里面的小竖线",[2982,142432,142433,142444,142447,142452,142457],{},[34,142434,142435,142436,142438,142439,142441,142442],{},"右侧结构里面放 ",[23,142437,2982],{}," 包含 4个 ",[23,142440,34],{},"，每个li里面包含一个",[23,142443,3304],{},[34,142445,142446],{},"直接利用切片工具把里面的内容当成一张图片",[34,142448,140822,142449,142451],{},[23,142450,34],{}," 设置浮动",[34,142453,140822,142454,142456],{},[23,142455,3304],{}," 设置宽高，宽度 248px，高度 163px",[34,142458,142459,142460,142020,142463,142465,142466,142468,142469],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[23,142461,142462],{},"top 10px",[23,142464,34],{},"设置相对定位（注意，最后一个",[23,142467,34],{},"不用设置伪元素），可以利用 ",[23,142470,142471],{},"nth-child(-n+3){...}",[19,142473,141692],{},[57,142475,142476],{"className":128322,"code":140164,"language":128324,"meta":62,"style":62},[23,142477,142478,142486,142496,142506],{"__ignoreMap":62},[66,142479,142480,142482,142484],{"class":68,"line":69},[66,142481,53395],{"class":53084},[66,142483,139323],{"class":3793},[66,142485,17375],{"class":76},[66,142487,142488,142490,142492,142494],{"class":68,"line":80},[66,142489,139330],{"class":102},[66,142491,53221],{"class":76},[66,142493,9463],{"class":356},[66,142495,3135],{"class":76},[66,142497,142498,142500,142502,142504],{"class":68,"line":112},[66,142499,129938],{"class":102},[66,142501,53221],{"class":76},[66,142503,62648],{"class":102},[66,142505,3135],{"class":76},[66,142507,142508],{"class":68,"line":129},[66,142509,3407],{"class":76},[19,142511,141781],{},[57,142513,142514],{"className":128322,"code":140164,"language":128324,"meta":62,"style":62},[23,142515,142516,142524,142534,142544],{"__ignoreMap":62},[66,142517,142518,142520,142522],{"class":68,"line":69},[66,142519,53395],{"class":53084},[66,142521,139323],{"class":3793},[66,142523,17375],{"class":76},[66,142525,142526,142528,142530,142532],{"class":68,"line":80},[66,142527,139330],{"class":102},[66,142529,53221],{"class":76},[66,142531,9463],{"class":356},[66,142533,3135],{"class":76},[66,142535,142536,142538,142540,142542],{"class":68,"line":112},[66,142537,129938],{"class":102},[66,142539,53221],{"class":76},[66,142541,62648],{"class":102},[66,142543,3135],{"class":76},[66,142545,142546],{"class":68,"line":129},[66,142547,3407],{"class":76},[484,142549,142551],{"id":142550},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[3304,142553],{"style":128178,"src":142554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,142556,142557],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,142559,142560],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,142562,142563,142566],{},[23,142564,142565],{},"box_hd"," 制作",[19,142568,142346,142569,142571],{},[23,142570,142565],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[3304,142573],{"style":128178,"src":142574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[2982,142576,142577,142582,142587,142590],{},[34,142578,142579,142581],{},[23,142580,142565],{}," 给 30px 的高度，2个像素的下边框",[34,142583,142584,142585],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[23,142586,140833],{},[34,142588,142589],{},"左侧盒左浮动，右侧盒子右浮动",[34,142591,142592,142594,142595,142597],{},[23,142593,2229],{},"标签之间的距离用左右的",[23,142596,32677],{},"撑开即可",[19,142599,142600],{},"结构代码",[57,142602,142603],{"className":128322,"code":140992,"language":128324,"meta":62,"style":62},[23,142604,142605,142611,142621],{"__ignoreMap":62},[66,142606,142607,142609],{"class":68,"line":69},[66,142608,132170],{"class":3793},[66,142610,17375],{"class":76},[66,142612,142613,142615,142617,142619],{"class":68,"line":80},[66,142614,132802],{"class":102},[66,142616,53221],{"class":76},[66,142618,25539],{"class":102},[66,142620,3135],{"class":76},[66,142622,142623],{"class":68,"line":112},[66,142624,3407],{"class":76},[19,142626,142627],{},"样式代码",[57,142629,142630],{"className":128322,"code":140992,"language":128324,"meta":62,"style":62},[23,142631,142632,142638,142648],{"__ignoreMap":62},[66,142633,142634,142636],{"class":68,"line":69},[66,142635,132170],{"class":3793},[66,142637,17375],{"class":76},[66,142639,142640,142642,142644,142646],{"class":68,"line":80},[66,142641,132802],{"class":102},[66,142643,53221],{"class":76},[66,142645,25539],{"class":102},[66,142647,3135],{"class":76},[66,142649,142650],{"class":68,"line":112},[66,142651,3407],{"class":76},[19,142653,142654,142566],{},[23,142655,142656],{},"box_bd",[19,142658,142659],{},"2 号盒子 box_bd，不要给高度",[3304,142661],{"style":128178,"src":142662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,142664,142665],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,142667,142668],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,142670,142671],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[2982,142673,142674,142686,142702],{},[34,142675,142676,142678,142679,142682,142683,142685],{},[23,142677,142656],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[23,142680,142681],{},"tab_content","，在",[23,142684,142681],{}," 里面包裹tab选项卡对应的内容",[34,142687,142688,142689,142692,142693,142695,142696,142698,142699,142701],{},"内容被一个大盒子包裹（",[23,142690,142691],{},"tab_list_item","），里面是 ",[23,142694,2982],{}," 包裹 5个 ",[23,142697,34],{},"，每个",[23,142700,34],{},"设置对应的宽度，然后设置浮动",[34,142703,142704,142705,142707,142708,142710,142711],{},"而这5个",[23,142706,34],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[23,142709,34],{},"设置",[2982,142712,142713,142731,142734],{},[34,142714,142715,142716,142718,142719,142721,142722,142724,142725,142727,142728,142730],{},"第一个小 ",[23,142717,34],{}," 分为上下结构，上面是 ",[23,142720,2982],{}," 包裹 ",[23,142723,34],{}," ，",[23,142726,34],{},"里面包裹 ",[23,142729,2229],{},"，下面插入一张图片",[34,142732,142733],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[34,142735,142736,142737,142739,142740,142742,142743,142745],{},"后面的小 ",[23,142738,34],{}," 里面先放一个",[23,142741,2229],{},"标签，然后在",[23,142744,2229],{},"标签里面插入图片即可",[19,142747,142600],{},[57,142749,142750],{"className":129069,"code":135824,"language":129071,"meta":62,"style":62},[23,142751,142752],{"__ignoreMap":62},[66,142753,142754,142756,142758,142760,142762,142764,142766,142768,142770,142772,142774,142776],{"class":68,"line":69},[66,142755,413],{"class":76},[66,142757,3304],{"class":53084},[66,142759,57020],{"class":3793},[66,142761,99],{"class":76},[66,142763,135839],{"class":356},[66,142765,57028],{"class":3793},[66,142767,99],{"class":76},[66,142769,135846],{"class":356},[66,142771,135849],{"class":3793},[66,142773,99],{"class":76},[66,142775,135854],{"class":356},[66,142777,53091],{"class":76},[19,142779,142627],{},[57,142781,142782],{"className":129069,"code":135824,"language":129071,"meta":62,"style":62},[23,142783,142784],{"__ignoreMap":62},[66,142785,142786,142788,142790,142792,142794,142796,142798,142800,142802,142804,142806,142808],{"class":68,"line":69},[66,142787,413],{"class":76},[66,142789,3304],{"class":53084},[66,142791,57020],{"class":3793},[66,142793,99],{"class":76},[66,142795,135839],{"class":356},[66,142797,57028],{"class":3793},[66,142799,99],{"class":76},[66,142801,135846],{"class":356},[66,142803,135849],{"class":3793},[66,142805,99],{"class":76},[66,142807,135854],{"class":356},[66,142809,53091],{"class":76},[19,142811,142812],{},"tab栏切换需求！！！！！！介绍：",[3304,142814],{"style":128178,"src":142815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[2982,142817,142818,142826,142832,142835],{},[34,142819,142820,142823,142824],{},[23,142821,142822],{},"tab","栏的布局是 ",[23,142825,140833],{},[34,142827,142828,142829,142831],{},"有多少个",[23,142830,142822],{},"选项卡，那么对应就有多少个内容",[34,142833,142834],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[34,142836,142837,142838,142841,142842,142844,142845,142847],{},"等后面我们学习了",[23,142839,142840],{},"js","之后，我们就会配合",[23,142843,142840],{},"来实现，",[23,142846,142822],{},"栏的切换",[14,142849,142851],{"id":142850},"_162-列表制作","16.2 列表制作",[484,142853,142855],{"id":142854},"_1621-准备工作","16.2.1 准备工作",[2982,142857,142858,142861,142864,142867],{},[34,142859,142860],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[34,142862,142863],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[34,142865,142866],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[34,142868,142869],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[484,142871,142873,142874,102792,142876,142878],{"id":142872},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[23,142875,133327],{},[23,142877,55495],{}," 修改",[3304,142880],{"style":128178,"src":142881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[2982,142883,142884],{},[34,142885,142886],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,142888,141692],{},[57,142890,142891],{"className":128322,"code":133754,"language":128324,"meta":62,"style":62},[23,142892,142893,142897,142911,142915,142929,142933,142947,142951,142965,142969],{"__ignoreMap":62},[66,142894,142895],{"class":68,"line":69},[66,142896,133761],{"class":758},[66,142898,142899,142901,142903,142905,142907,142909],{"class":68,"line":80},[66,142900,133766],{"class":3793},[66,142902,81585],{"class":76},[66,142904,130682],{"class":102},[66,142906,53221],{"class":76},[66,142908,133775],{"class":102},[66,142910,131252],{"class":76},[66,142912,142913],{"class":68,"line":112},[66,142914,133782],{"class":758},[66,142916,142917,142919,142921,142923,142925,142927],{"class":68,"line":129},[66,142918,133787],{"class":3793},[66,142920,81585],{"class":76},[66,142922,130682],{"class":102},[66,142924,53221],{"class":76},[66,142926,56545],{"class":102},[66,142928,131252],{"class":76},[66,142930,142931],{"class":68,"line":138},[66,142932,133802],{"class":758},[66,142934,142935,142937,142939,142941,142943,142945],{"class":68,"line":227},[66,142936,133807],{"class":3793},[66,142938,81585],{"class":76},[66,142940,130682],{"class":102},[66,142942,53221],{"class":76},[66,142944,56612],{"class":102},[66,142946,131252],{"class":76},[66,142948,142949],{"class":68,"line":236},[66,142950,133822],{"class":758},[66,142952,142953,142955,142957,142959,142961,142963],{"class":68,"line":241},[66,142954,133827],{"class":3793},[66,142956,81585],{"class":76},[66,142958,130682],{"class":102},[66,142960,53221],{"class":76},[66,142962,88009],{"class":102},[66,142964,131252],{"class":76},[66,142966,142967],{"class":68,"line":372},[66,142968,133842],{"class":758},[66,142970,142971,142973,142975,142977,142979,142981],{"class":68,"line":377},[66,142972,133847],{"class":3793},[66,142974,81585],{"class":76},[66,142976,130682],{"class":102},[66,142978,53221],{"class":76},[66,142980,133856],{"class":102},[66,142982,131252],{"class":76},[19,142984,141781],{},[57,142986,142987],{"className":128322,"code":133754,"language":128324,"meta":62,"style":62},[23,142988,142989,142993,143007,143011,143025,143029,143043,143047,143061,143065],{"__ignoreMap":62},[66,142990,142991],{"class":68,"line":69},[66,142992,133761],{"class":758},[66,142994,142995,142997,142999,143001,143003,143005],{"class":68,"line":80},[66,142996,133766],{"class":3793},[66,142998,81585],{"class":76},[66,143000,130682],{"class":102},[66,143002,53221],{"class":76},[66,143004,133775],{"class":102},[66,143006,131252],{"class":76},[66,143008,143009],{"class":68,"line":112},[66,143010,133782],{"class":758},[66,143012,143013,143015,143017,143019,143021,143023],{"class":68,"line":129},[66,143014,133787],{"class":3793},[66,143016,81585],{"class":76},[66,143018,130682],{"class":102},[66,143020,53221],{"class":76},[66,143022,56545],{"class":102},[66,143024,131252],{"class":76},[66,143026,143027],{"class":68,"line":138},[66,143028,133802],{"class":758},[66,143030,143031,143033,143035,143037,143039,143041],{"class":68,"line":227},[66,143032,133807],{"class":3793},[66,143034,81585],{"class":76},[66,143036,130682],{"class":102},[66,143038,53221],{"class":76},[66,143040,56612],{"class":102},[66,143042,131252],{"class":76},[66,143044,143045],{"class":68,"line":236},[66,143046,133822],{"class":758},[66,143048,143049,143051,143053,143055,143057,143059],{"class":68,"line":241},[66,143050,133827],{"class":3793},[66,143052,81585],{"class":76},[66,143054,130682],{"class":102},[66,143056,53221],{"class":76},[66,143058,88009],{"class":102},[66,143060,131252],{"class":76},[66,143062,143063],{"class":68,"line":372},[66,143064,133842],{"class":758},[66,143066,143067,143069,143071,143073,143075,143077],{"class":68,"line":377},[66,143068,133847],{"class":3793},[66,143070,81585],{"class":76},[66,143072,130682],{"class":102},[66,143074,53221],{"class":76},[66,143076,133856],{"class":102},[66,143078,131252],{"class":76},[2982,143080,143081,143092],{},[34,143082,143083,143084,143087,143088,102792,143090],{},"1 号盒子左侧浮动 ",[23,143085,143086],{},"sk_list"," 里面包含 ",[23,143089,2982],{},[23,143091,34],{},[34,143093,143094,143095,143087,143098,102792,143100],{},"2 号盒子左侧浮动 ",[23,143096,143097],{},"sk_con",[23,143099,2982],{},[23,143101,34],{},[19,143103,141692],{},[57,143105,143106],{"className":128322,"code":140992,"language":128324,"meta":62,"style":62},[23,143107,143108,143114,143124],{"__ignoreMap":62},[66,143109,143110,143112],{"class":68,"line":69},[66,143111,132170],{"class":3793},[66,143113,17375],{"class":76},[66,143115,143116,143118,143120,143122],{"class":68,"line":80},[66,143117,132802],{"class":102},[66,143119,53221],{"class":76},[66,143121,25539],{"class":102},[66,143123,3135],{"class":76},[66,143125,143126],{"class":68,"line":112},[66,143127,3407],{"class":76},[19,143129,141781],{},[57,143131,143132],{"className":128322,"code":140992,"language":128324,"meta":62,"style":62},[23,143133,143134,143140,143150],{"__ignoreMap":62},[66,143135,143136,143138],{"class":68,"line":69},[66,143137,132170],{"class":3793},[66,143139,17375],{"class":76},[66,143141,143142,143144,143146,143148],{"class":68,"line":80},[66,143143,132802],{"class":102},[66,143145,53221],{"class":76},[66,143147,25539],{"class":102},[66,143149,3135],{"class":76},[66,143151,143152],{"class":68,"line":112},[66,143153,3407],{"class":76},[484,143155,143157,143158],{"id":143156},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[23,143159,143160],{},"sk_container",[3304,143162],{"style":128178,"src":143163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[2982,143165,143166,143171],{},[34,143167,142346,143168,143170],{},[23,143169,143160],{}," 给宽度 1200，不要给高度",[34,143172,143173],{},"一定不要忘记清除浮动",[19,143175,141692],{},[57,143177,143178],{"className":128322,"code":140992,"language":128324,"meta":62,"style":62},[23,143179,143180,143186,143196],{"__ignoreMap":62},[66,143181,143182,143184],{"class":68,"line":69},[66,143183,132170],{"class":3793},[66,143185,17375],{"class":76},[66,143187,143188,143190,143192,143194],{"class":68,"line":80},[66,143189,132802],{"class":102},[66,143191,53221],{"class":76},[66,143193,25539],{"class":102},[66,143195,3135],{"class":76},[66,143197,143198],{"class":68,"line":112},[66,143199,3407],{"class":76},[31,143201,143202],{},[34,143203,143204],{},"sk_hd制作",[2982,143206,143207],{},[34,143208,142426,143209,143212],{},[23,143210,143211],{},"sk_hd"," ，插入图片即可",[19,143214,141692],{},[57,143216,143217],{"className":129069,"code":135824,"language":129071,"meta":62,"style":62},[23,143218,143219],{"__ignoreMap":62},[66,143220,143221,143223,143225,143227,143229,143231,143233,143235,143237,143239,143241,143243],{"class":68,"line":69},[66,143222,413],{"class":76},[66,143224,3304],{"class":53084},[66,143226,57020],{"class":3793},[66,143228,99],{"class":76},[66,143230,135839],{"class":356},[66,143232,57028],{"class":3793},[66,143234,99],{"class":76},[66,143236,135846],{"class":356},[66,143238,135849],{"class":3793},[66,143240,99],{"class":76},[66,143242,135854],{"class":356},[66,143244,53091],{"class":76},[31,143246,143247],{"start":80},[34,143248,143249],{},"sk_bd制作",[2982,143251,143252],{},[34,143253,143254,143255,143258,143259,102792,143261,143263],{},"3 号盒子 ",[23,143256,143257],{},"sk_bd"," ，里面包含很多的 ",[23,143260,2982],{},[23,143262,34],{},[2982,143264,143265,143274],{},[34,143266,143267,143268,143270,143271,143273],{},"当鼠标移入到 ",[23,143269,34],{}," 上面的时候显示红色的边框，在这里先给 ",[23,143272,34],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[34,143275,143276,143277,143279,143280,143282,143283,143286,143287,143289],{},"由于给每个 ",[23,143278,34],{}," 都设置了外边距，导致一行的最后一个 ",[23,143281,34],{}," 掉了下来，在这里我们利用 ",[23,143284,143285],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[23,143288,34],{},"，去掉外边距就好了",[19,143291,141692],{},[57,143293,143294],{"className":128322,"code":140511,"language":128324,"meta":62,"style":62},[23,143295,143296,143302,143314],{"__ignoreMap":62},[66,143297,143298,143300],{"class":68,"line":69},[66,143299,53395],{"class":53084},[66,143301,17375],{"class":76},[66,143303,143304,143306,143308,143310,143312],{"class":68,"line":80},[66,143305,72249],{"class":102},[66,143307,53221],{"class":76},[66,143309,2183],{"class":102},[66,143311,53340],{"class":102},[66,143313,3135],{"class":76},[66,143315,143316],{"class":68,"line":112},[66,143317,3407],{"class":76},[19,143319,141781],{},[57,143321,143322],{"className":128322,"code":140511,"language":128324,"meta":62,"style":62},[23,143323,143324,143330,143342],{"__ignoreMap":62},[66,143325,143326,143328],{"class":68,"line":69},[66,143327,53395],{"class":53084},[66,143329,17375],{"class":76},[66,143331,143332,143334,143336,143338,143340],{"class":68,"line":80},[66,143333,72249],{"class":102},[66,143335,53221],{"class":76},[66,143337,2183],{"class":102},[66,143339,53340],{"class":102},[66,143341,3135],{"class":76},[66,143343,143344],{"class":68,"line":112},[66,143345,3407],{"class":76},[14,143347,143349],{"id":143348},"_163-注册页面制作","16.3 注册页面制作",[3304,143351],{"style":128178,"src":143352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,143354,143355,143357],{},[2141,143356,841],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[3304,143359],{"style":128178,"src":143360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[484,143362,143364],{"id":143363},"_1631-准备工作","16.3.1 准备工作",[2982,143366,143367,143370],{},[34,143368,143369],{},"创建register.html，引入 base.css，引入favicon图标",[34,143371,143372],{},"创建register.css ，在html页面进行引入",[484,143374,143376,143377,143379],{"id":143375},"_1632-header-头部实现","16.3.2 ",[23,143378,133327],{}," 头部实现",[2982,143381,143382,143385],{},[34,143383,143384],{},"整个内容用 版心 进行包裹",[34,143386,143387],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,143389,141692],{},[57,143391,143392],{"className":129069,"code":135824,"language":129071,"meta":62,"style":62},[23,143393,143394],{"__ignoreMap":62},[66,143395,143396,143398,143400,143402,143404,143406,143408,143410,143412,143414,143416,143418],{"class":68,"line":69},[66,143397,413],{"class":76},[66,143399,3304],{"class":53084},[66,143401,57020],{"class":3793},[66,143403,99],{"class":76},[66,143405,135839],{"class":356},[66,143407,57028],{"class":3793},[66,143409,99],{"class":76},[66,143411,135846],{"class":356},[66,143413,135849],{"class":3793},[66,143415,99],{"class":76},[66,143417,135854],{"class":356},[66,143419,53091],{"class":76},[19,143421,141781],{},[57,143423,143424],{"className":129069,"code":135824,"language":129071,"meta":62,"style":62},[23,143425,143426],{"__ignoreMap":62},[66,143427,143428,143430,143432,143434,143436,143438,143440,143442,143444,143446,143448,143450],{"class":68,"line":69},[66,143429,413],{"class":76},[66,143431,3304],{"class":53084},[66,143433,57020],{"class":3793},[66,143435,99],{"class":76},[66,143437,135839],{"class":356},[66,143439,57028],{"class":3793},[66,143441,99],{"class":76},[66,143443,135846],{"class":356},[66,143445,135849],{"class":3793},[66,143447,99],{"class":76},[66,143449,135854],{"class":356},[66,143451,53091],{"class":76},[484,143453,143455,143456,143459],{"id":143454},"_1633-registerarea-主体模块实现","16.3.3 ",[23,143457,143458],{},"registerarea"," 主体模块实现",[3304,143461],{"style":128178,"src":143462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,143464,143465],{},"整个大盒子 高度为 522px，设置4个边框",[19,143467,141692],{},[57,143469,143470],{"className":128322,"code":132479,"language":128324,"meta":62,"style":62},[23,143471,143472,143478,143494],{"__ignoreMap":62},[66,143473,143474,143476],{"class":68,"line":69},[66,143475,53395],{"class":53084},[66,143477,17375],{"class":76},[66,143479,143480,143482,143484,143486,143488,143490,143492],{"class":68,"line":80},[66,143481,72675],{"class":102},[66,143483,53221],{"class":76},[66,143485,304],{"class":102},[66,143487,53276],{"class":72},[66,143489,53305],{"class":102},[66,143491,131714],{"class":102},[66,143493,3135],{"class":76},[66,143495,143496],{"class":68,"line":112},[66,143497,3407],{"class":76},[19,143499,141781],{},[57,143501,143502],{"className":128322,"code":132479,"language":128324,"meta":62,"style":62},[23,143503,143504,143510,143526],{"__ignoreMap":62},[66,143505,143506,143508],{"class":68,"line":69},[66,143507,53395],{"class":53084},[66,143509,17375],{"class":76},[66,143511,143512,143514,143516,143518,143520,143522,143524],{"class":68,"line":80},[66,143513,72675],{"class":102},[66,143515,53221],{"class":76},[66,143517,304],{"class":102},[66,143519,53276],{"class":72},[66,143521,53305],{"class":102},[66,143523,131714],{"class":102},[66,143525,3135],{"class":76},[66,143527,143528],{"class":68,"line":112},[66,143529,3407],{"class":76},[19,143531,143532],{},"1号盒子 是一个 h3 标签，放标题",[2982,143534,143535],{},[34,143536,143537],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,143539,141692],{},[57,143541,143542],{"className":128322,"code":140992,"language":128324,"meta":62,"style":62},[23,143543,143544,143550,143560],{"__ignoreMap":62},[66,143545,143546,143548],{"class":68,"line":69},[66,143547,132170],{"class":3793},[66,143549,17375],{"class":76},[66,143551,143552,143554,143556,143558],{"class":68,"line":80},[66,143553,132802],{"class":102},[66,143555,53221],{"class":76},[66,143557,25539],{"class":102},[66,143559,3135],{"class":76},[66,143561,143562],{"class":68,"line":112},[66,143563,3407],{"class":76},[19,143565,141781],{},[57,143567,143568],{"className":128322,"code":140992,"language":128324,"meta":62,"style":62},[23,143569,143570,143576,143586],{"__ignoreMap":62},[66,143571,143572,143574],{"class":68,"line":69},[66,143573,132170],{"class":3793},[66,143575,17375],{"class":76},[66,143577,143578,143580,143582,143584],{"class":68,"line":80},[66,143579,132802],{"class":102},[66,143581,53221],{"class":76},[66,143583,25539],{"class":102},[66,143585,3135],{"class":76},[66,143587,143588],{"class":68,"line":112},[66,143589,3407],{"class":76},[19,143591,143592],{},"2号盒子 里面放注册的内容",[2982,143594,143595,143598,143607,143621,143634,143637,143640,143658,143672],{},[34,143596,143597],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[34,143599,143600,143601,143603,143604,143606],{},"里面的内容利用 ",[23,143602,2982],{}," 包含 ",[23,143605,34],{}," 来实现的（不需要用表格）",[34,143608,140836,143609,143611,143612,143614,143615,143617,143618,143620],{},[23,143610,34],{}," 里面，左侧放 ",[23,143613,35396],{}," 标签， 中间放",[23,143616,351],{}," 标签， 右侧放 ",[23,143619,66],{}," 提示信息",[34,143622,143623,143624,143626,143627,143629,143630,143633],{},"左侧 ",[23,143625,35396],{},"里面的文字都是右对齐，我们可以给",[23,143628,35396],{},"设置一个宽度（88px），然后利用",[23,143631,143632],{},"text-align"," 来设置右对齐",[34,143635,143636],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[34,143638,143639],{},"右侧 span修饰一下文字颜色",[34,143641,143642,143643],{},"提示信息的样式优化",[2982,143644,143645,143648,143651],{},[34,143646,143647],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[34,143649,143650],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[34,143652,143653,143654,143657],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[23,143655,143656],{},"vertical-algin"," 来设置 图片与文字对齐方式",[34,143659,143660,143661],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[2982,143662,143663,143669],{},[34,143664,143665,143666,143668],{},"设置 ",[23,143667,25356],{}," 的 左右 12px 的内边距，设置一下文字颜色",[34,143670,143671],{},"分别设置 背景颜色",[34,143673,143674,143675,143677],{},"同意协议 和 完成注册 都是用 ",[23,143676,34],{}," 进行包裹",[19,143679,141692],{},[57,143681,143682],{"className":128322,"code":142265,"language":128324,"meta":62,"style":62},[23,143683,143684,143690,143700],{"__ignoreMap":62},[66,143685,143686,143688],{"class":68,"line":69},[66,143687,53395],{"class":53084},[66,143689,17375],{"class":76},[66,143691,143692,143694,143696,143698],{"class":68,"line":80},[66,143693,72657],{"class":102},[66,143695,53221],{"class":76},[66,143697,142282],{"class":102},[66,143699,3135],{"class":76},[66,143701,143702],{"class":68,"line":112},[66,143703,3407],{"class":76},[19,143705,141781],{},[57,143707,143708],{"className":128322,"code":142265,"language":128324,"meta":62,"style":62},[23,143709,143710,143716,143726],{"__ignoreMap":62},[66,143711,143712,143714],{"class":68,"line":69},[66,143713,53395],{"class":53084},[66,143715,17375],{"class":76},[66,143717,143718,143720,143722,143724],{"class":68,"line":80},[66,143719,72657],{"class":102},[66,143721,53221],{"class":76},[66,143723,142282],{"class":102},[66,143725,3135],{"class":76},[66,143727,143728],{"class":68,"line":112},[66,143729,3407],{"class":76},[484,143731,143733],{"id":143732},"_1634-底部实现","16.3.4 底部实现",[19,143735,141692],{},[57,143737,143738],{"className":128322,"code":142265,"language":128324,"meta":62,"style":62},[23,143739,143740,143746,143756],{"__ignoreMap":62},[66,143741,143742,143744],{"class":68,"line":69},[66,143743,53395],{"class":53084},[66,143745,17375],{"class":76},[66,143747,143748,143750,143752,143754],{"class":68,"line":80},[66,143749,72657],{"class":102},[66,143751,53221],{"class":76},[66,143753,142282],{"class":102},[66,143755,3135],{"class":76},[66,143757,143758],{"class":68,"line":112},[66,143759,3407],{"class":76},[19,143761,141781],{},[57,143763,143764],{"className":129069,"code":132426,"language":129071,"meta":62,"style":62},[23,143765,143766,143770,143784,143788],{"__ignoreMap":62},[66,143767,143768],{"class":68,"line":69},[66,143769,132433],{"class":758},[66,143771,143772,143774,143776,143778,143780,143782],{"class":68,"line":80},[66,143773,413],{"class":76},[66,143775,53395],{"class":53084},[66,143777,55268],{"class":3793},[66,143779,99],{"class":76},[66,143781,132446],{"class":356},[66,143783,53091],{"class":76},[66,143785,143786],{"class":68,"line":112},[66,143787,132453],{"class":76},[66,143789,143790,143792,143794],{"class":68,"line":129},[66,143791,53569],{"class":76},[66,143793,53395],{"class":53084},[66,143795,53091],{"class":76},[14,143797,143799],{"id":143798},"_164-项目总结","16.4 项目总结",[31,143801,143802,143805,143808,143811],{},[34,143803,143804],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[34,143806,143807],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[34,143809,143810],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[34,143812,143813],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[3304,143815],{"style":128178,"src":143816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[31,143818,143819],{"start":138},[34,143820,143821],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[3304,143823],{"style":128178,"src":143824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[31,143826,143827],{"start":227},[34,143828,143829],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[3304,143831],{"style":128178,"src":143832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[57,143834,143835],{"className":129069,"code":138479,"language":129071,"meta":62,"style":62},[23,143836,143837],{"__ignoreMap":62},[66,143838,143839,143841,143843,143845,143847,143849,143851,143853,143855,143857,143859,143861],{"class":68,"line":69},[66,143840,413],{"class":76},[66,143842,351],{"class":53084},[66,143844,55605],{"class":3793},[66,143846,99],{"class":76},[66,143848,64478],{"class":356},[66,143850,16724],{"class":3793},[66,143852,99],{"class":76},[66,143854,138500],{"class":356},[66,143856,62799],{"class":3793},[66,143858,99],{"class":76},[66,143860,138507],{"class":356},[66,143862,53091],{"class":76},[31,143864,143865,143868],{"start":236},[34,143866,143867],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[34,143869,143870],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[1903,143872,143873],{},"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":62,"searchDepth":80,"depth":80,"links":143875},[143876,143881,143888,143896],{"id":141502,"depth":80,"text":141503,"children":143877},[143878,143879,143880],{"id":141506,"depth":112,"text":141507},{"id":142237,"depth":112,"text":142238},{"id":142550,"depth":112,"text":142551},{"id":142850,"depth":80,"text":142851,"children":143882},[143883,143884,143886],{"id":142854,"depth":112,"text":142855},{"id":142872,"depth":112,"text":143885},"16.2.2 列表页 header 和 nav 修改",{"id":143156,"depth":112,"text":143887},"16.2.3 列表页主体 sk_container",{"id":143348,"depth":80,"text":143349,"children":143889},[143890,143891,143893,143895],{"id":143363,"depth":112,"text":143364},{"id":143375,"depth":112,"text":143892},"16.3.2 header 头部实现",{"id":143454,"depth":112,"text":143894},"16.3.3 registerarea 主体模块实现",{"id":143732,"depth":112,"text":143733},{"id":143798,"depth":80,"text":143799},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":141494,"description":1926},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":143903,"title":143904,"body":143905,"description":1926,"extension":1927,"meta":144013,"navigation":108,"path":144014,"seo":144015,"stem":144016,"__hash__":144017},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":143906,"toc":144008},[143907,143910,143914,143917,143920,143929,143938,143942,143947,143954,143972,143975,143978,143981,143984,143987,143990,143993,143996,143999,144002,144005],[10,143908,143904],{"id":143909},"_17-web服务器与网站发布",[14,143911,143913],{"id":143912},"_171-web服务器","17.1 Web服务器",[19,143915,143916],{},"把自己网站上传到服务器上，可以让其他人访问",[3304,143918],{"style":128178,"src":143919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,143921,143922,143925,143926],{},[2141,143923,143924],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[2141,143927,143928],{},"Web 服务器等",[19,143930,143931,143932,102792,143935,27542],{},"根据服务器在网络中所在的位置不同，又可分为 ",[2141,143933,143934],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[2141,143936,143937],{},"远程服务器",[484,143939,143941],{"id":143940},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,143943,143944],{},[2141,143945,143946],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,143948,143949,143950],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[2229,143951,143952],{"href":143952,"rel":143953},"http:\u002F\u002Ffree.3v.do\u002F",[25668],[2982,143955,143956,143959,143962,143969],{},[34,143957,143958],{},"去免费空间网站注册账号。",[34,143960,143961],{},"记录下主机名、用户名、密码、域名。",[34,143963,143964,143965,143968],{},"利用 ",[23,143966,143967],{},"utftp"," 软件 上传网站到远程服务器",[34,143970,143971],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,143973,143974],{},"使用软件上传，对上传软件文件进行解压",[3304,143976],{"style":128178,"src":143977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[3304,143979],{"style":128178,"src":143980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,143982,143983],{},"输入刚刚申请的服务器账号信息：",[3304,143985],{"style":128178,"src":143986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[3304,143988],{"style":128178,"src":143989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[3304,143991],{"style":128178,"src":143992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[3304,143994],{"style":128178,"src":143995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,143997,143998],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[3304,144000],{"style":128178,"src":144001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,144003,144004],{},"浏览器输入域名即可访问",[19,144006,144007],{},"首页一定必须是index",{"title":62,"searchDepth":80,"depth":80,"links":144009},[144010],{"id":143912,"depth":80,"text":143913,"children":144011},[144012],{"id":143940,"depth":112,"text":143941},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":143904,"description":1926},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":144019,"title":144020,"body":144021,"description":1926,"extension":1927,"meta":144948,"navigation":108,"path":144949,"seo":144950,"stem":144951,"__hash__":144952},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":144022,"toc":144931},[144023,144026,144030,144033,144036,144047,144050,144054,144058,144063,144066,144069,144072,144075,144079,144105,144109,144113,144116,144119,144123,144156,144160,144163,144166,144230,144234,144238,144241,144244,144247,144251,144296,144300,144303,144333,144337,144341,144344,144347,144351,144354,144423,144426,144534,144536,144542,144546,144549,144552,144648,144651,144655,144679,144683,144686,144690,144693,144697,144700,144703,144706,144709,144713,144716,144719,144723,144727,144730,144733,144736,144739,144743,144746,144750,144753,144756,144801,144805,144809,144812,144815,144818,144850,144854,144857,144891,144895,144898,144928],[10,144024,144020],{"id":144025},"_18-2d动画与3d转换",[14,144027,144029],{"id":144028},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,144031,144032],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,144034,144035],{},"转换（transform）你可以简单理解为变形",[2982,144037,144038,144041,144044],{},[34,144039,144040],{},"移动：translate",[34,144042,144043],{},"旋转：rotate",[34,144045,144046],{},"缩放：scale",[3304,144048],{"style":128178,"src":144049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[484,144051,144053],{"id":144052},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[23801,144055,144057],{"id":144056},"_18111-translate介绍","18.1.1.1 translate介绍",[19,144059,144060,144061],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[2141,144062,134981],{},[3304,144064],{"style":128178,"src":144065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,144067,144068],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,144070,144071],{},"对于行内元素无效",[19,144073,144074],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[23801,144076,144078],{"id":144077},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[57,144080,144081],{"className":128322,"code":140511,"language":128324,"meta":62,"style":62},[23,144082,144083,144089,144101],{"__ignoreMap":62},[66,144084,144085,144087],{"class":68,"line":69},[66,144086,53395],{"class":53084},[66,144088,17375],{"class":76},[66,144090,144091,144093,144095,144097,144099],{"class":68,"line":80},[66,144092,72249],{"class":102},[66,144094,53221],{"class":76},[66,144096,2183],{"class":102},[66,144098,53340],{"class":102},[66,144100,3135],{"class":76},[66,144102,144103],{"class":68,"line":112},[66,144104,3407],{"class":76},[484,144106,144108],{"id":144107},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[23801,144110,144112],{"id":144111},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,144114,144115],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[3304,144117],{"style":128178,"src":144118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[23801,144120,144122],{"id":144121},"_18122-旋转效果","18.1.2.2 旋转效果",[57,144124,144126],{"className":128322,"code":144125,"language":128324,"meta":62,"style":62},"div {\n  transform: rotate(45deg);\n}\n",[23,144127,144128,144134,144152],{"__ignoreMap":62},[66,144129,144130,144132],{"class":68,"line":69},[66,144131,53395],{"class":53084},[66,144133,17375],{"class":76},[66,144135,144136,144138,144140,144143,144145,144147,144150],{"class":68,"line":80},[66,144137,138306],{"class":102},[66,144139,53221],{"class":76},[66,144141,144142],{"class":102},"rotate",[66,144144,348],{"class":76},[66,144146,2508],{"class":102},[66,144148,144149],{"class":72},"deg",[66,144151,4543],{"class":76},[66,144153,144154],{"class":68,"line":112},[66,144155,3407],{"class":76},[23801,144157,144159],{"id":144158},"_18123-三角做法","18.1.2.3 三角做法",[19,144161,144162],{},"该下标当经过最外层大盒子时会实现向上反转",[3304,144164],{"style":128178,"src":144165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[57,144167,144168],{"className":128322,"code":136842,"language":128324,"meta":62,"style":62},[23,144169,144170,144174,144180,144190,144200,144216,144226],{"__ignoreMap":62},[66,144171,144172],{"class":68,"line":69},[66,144173,136849],{"class":758},[66,144175,144176,144178],{"class":68,"line":80},[66,144177,136854],{"class":3793},[66,144179,17375],{"class":76},[66,144181,144182,144184,144186,144188],{"class":68,"line":112},[66,144183,72347],{"class":102},[66,144185,53221],{"class":76},[66,144187,2183],{"class":102},[66,144189,3135],{"class":76},[66,144191,144192,144194,144196,144198],{"class":68,"line":129},[66,144193,72567],{"class":102},[66,144195,53221],{"class":76},[66,144197,2183],{"class":102},[66,144199,3135],{"class":76},[66,144201,144202,144204,144206,144208,144210,144212,144214],{"class":68,"line":138},[66,144203,72675],{"class":102},[66,144205,53221],{"class":76},[66,144207,790],{"class":102},[66,144209,53276],{"class":72},[66,144211,53305],{"class":102},[66,144213,65770],{"class":102},[66,144215,3135],{"class":76},[66,144217,144218,144220,144222,144224],{"class":68,"line":227},[66,144219,136897],{"class":102},[66,144221,53221],{"class":76},[66,144223,64148],{"class":102},[66,144225,3135],{"class":76},[66,144227,144228],{"class":68,"line":236},[66,144229,3407],{"class":76},[484,144231,144233],{"id":144232},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[23801,144235,144237],{"id":144236},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,144239,144240],{},"设置中心点",[3304,144242],{"style":128178,"src":144243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,144245,144246],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[23801,144248,144250],{"id":144249},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[57,144252,144254],{"className":128322,"code":144253,"language":128324,"meta":62,"style":62},"\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",[23,144255,144256,144261,144267,144282,144287,144292],{"__ignoreMap":62},[66,144257,144258],{"class":68,"line":69},[66,144259,144260],{"class":758},"\u002F* 转换中心点 *\u002F\n",[66,144262,144263,144265],{"class":68,"line":80},[66,144264,53395],{"class":53084},[66,144266,17375],{"class":76},[66,144268,144269,144272,144274,144276,144278,144280],{"class":68,"line":112},[66,144270,144271],{"class":102},"  transform-origin",[66,144273,53221],{"class":76},[66,144275,53376],{"class":102},[66,144277,18947],{"class":102},[66,144279,132185],{"class":76},[66,144281,136995],{"class":758},[66,144283,144284],{"class":68,"line":129},[66,144285,144286],{"class":758},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[66,144288,144289],{"class":68,"line":138},[66,144290,144291],{"class":758},"  \u002F* transform-origin: left top; *\u002F\n",[66,144293,144294],{"class":68,"line":227},[66,144295,3407],{"class":76},[23801,144297,144299],{"id":144298},"_18133-旋转案例","18.1.3.3 旋转案例",[3304,144301],{"style":128178,"src":144302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[57,144304,144305],{"className":128322,"code":144125,"language":128324,"meta":62,"style":62},[23,144306,144307,144313,144329],{"__ignoreMap":62},[66,144308,144309,144311],{"class":68,"line":69},[66,144310,53395],{"class":53084},[66,144312,17375],{"class":76},[66,144314,144315,144317,144319,144321,144323,144325,144327],{"class":68,"line":80},[66,144316,138306],{"class":102},[66,144318,53221],{"class":76},[66,144320,144142],{"class":102},[66,144322,348],{"class":76},[66,144324,2508],{"class":102},[66,144326,144149],{"class":72},[66,144328,4543],{"class":76},[66,144330,144331],{"class":68,"line":112},[66,144332,3407],{"class":76},[484,144334,144336],{"id":144335},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[23801,144338,144340],{"id":144339},"_18141-scale介绍","18.1.4.1 scale介绍",[19,144342,144343],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[3304,144345],{"style":128178,"src":144346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[23801,144348,144350],{"id":144349},"_18142-分页按钮","18.1.4.2 分页按钮",[3304,144352],{"style":128178,"src":144353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[57,144355,144357],{"className":128322,"code":144356,"language":128324,"meta":62,"style":62},"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",[23,144358,144359,144365,144381,144385,144389,144394,144400,144414,144419],{"__ignoreMap":62},[66,144360,144361,144363],{"class":68,"line":69},[66,144362,53395],{"class":53084},[66,144364,17375],{"class":76},[66,144366,144367,144369,144371,144374,144376,144379],{"class":68,"line":80},[66,144368,138306],{"class":102},[66,144370,53221],{"class":76},[66,144372,144373],{"class":102},"scale",[66,144375,348],{"class":76},[66,144377,144378],{"class":102},"1.2",[66,144380,4543],{"class":76},[66,144382,144383],{"class":68,"line":112},[66,144384,3407],{"class":76},[66,144386,144387],{"class":68,"line":129},[66,144388,137783],{"class":76},[66,144390,144391],{"class":68,"line":138},[66,144392,144393],{"class":758},"\u002F* 2D 缩放 *\u002F\n",[66,144395,144396,144398],{"class":68,"line":227},[66,144397,53395],{"class":53084},[66,144399,17375],{"class":76},[66,144401,144402,144404,144406,144408,144410,144412],{"class":68,"line":236},[66,144403,138306],{"class":102},[66,144405,53221],{"class":76},[66,144407,144373],{"class":102},[66,144409,348],{"class":76},[66,144411,144378],{"class":102},[66,144413,4543],{"class":76},[66,144415,144416],{"class":68,"line":241},[66,144417,144418],{"class":758},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[66,144420,144421],{"class":68,"line":372},[66,144422,3407],{"class":76},[19,144424,144425],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[57,144427,144429],{"className":128322,"code":144428,"language":128324,"meta":62,"style":62},"\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",[23,144430,144431,144436,144446,144467,144488,144492,144497,144503,144530],{"__ignoreMap":62},[66,144432,144433],{"class":68,"line":69},[66,144434,144435],{"class":758},"\u002F* 定义动画 *\u002F\n",[66,144437,144438,144441,144444],{"class":68,"line":80},[66,144439,144440],{"class":72},"@keyframes",[66,144442,144443],{"class":1234}," move",[66,144445,17375],{"class":76},[66,144447,144448,144451,144453,144455,144457,144460,144462,144464],{"class":68,"line":112},[66,144449,144450],{"class":3793},"  0%",[66,144452,81585],{"class":76},[66,144454,49918],{"class":102},[66,144456,53221],{"class":76},[66,144458,144459],{"class":102},"translateX",[66,144461,348],{"class":76},[66,144463,2183],{"class":102},[66,144465,144466],{"class":76},"); }\n",[66,144468,144469,144472,144474,144476,144478,144480,144482,144484,144486],{"class":68,"line":129},[66,144470,144471],{"class":3793},"  100%",[66,144473,81585],{"class":76},[66,144475,49918],{"class":102},[66,144477,53221],{"class":76},[66,144479,144459],{"class":102},[66,144481,348],{"class":76},[66,144483,310],{"class":102},[66,144485,53276],{"class":72},[66,144487,144466],{"class":76},[66,144489,144490],{"class":68,"line":138},[66,144491,3407],{"class":76},[66,144493,144494],{"class":68,"line":227},[66,144495,144496],{"class":758},"\u002F* 调用动画 *\u002F\n",[66,144498,144499,144501],{"class":68,"line":236},[66,144500,53395],{"class":53084},[66,144502,17375],{"class":76},[66,144504,144505,144508,144510,144512,144514,144516,144518,144520,144522,144525,144528],{"class":68,"line":241},[66,144506,144507],{"class":102},"  animation",[66,144509,53221],{"class":76},[66,144511,137008],{"class":102},[66,144513,1187],{"class":102},[66,144515,2674],{"class":72},[66,144517,80458],{"class":102},[66,144519,962],{"class":102},[66,144521,2674],{"class":72},[66,144523,144524],{"class":102}," infinite",[66,144526,144527],{"class":102}," alternate",[66,144529,3135],{"class":76},[66,144531,144532],{"class":68,"line":372},[66,144533,3407],{"class":76},[19,144535,144425],{},[57,144537,144540],{"className":144538,"code":144539,"language":555},[553],"\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",[23,144541,144539],{"__ignoreMap":62},[23801,144543,144545],{"id":144544},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,144547,144548],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[3304,144550],{"style":128178,"src":144551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[57,144553,144554],{"className":128322,"code":144428,"language":128324,"meta":62,"style":62},[23,144555,144556,144560,144568,144586,144606,144610,144614,144620,144644],{"__ignoreMap":62},[66,144557,144558],{"class":68,"line":69},[66,144559,144435],{"class":758},[66,144561,144562,144564,144566],{"class":68,"line":80},[66,144563,144440],{"class":72},[66,144565,144443],{"class":1234},[66,144567,17375],{"class":76},[66,144569,144570,144572,144574,144576,144578,144580,144582,144584],{"class":68,"line":112},[66,144571,144450],{"class":3793},[66,144573,81585],{"class":76},[66,144575,49918],{"class":102},[66,144577,53221],{"class":76},[66,144579,144459],{"class":102},[66,144581,348],{"class":76},[66,144583,2183],{"class":102},[66,144585,144466],{"class":76},[66,144587,144588,144590,144592,144594,144596,144598,144600,144602,144604],{"class":68,"line":129},[66,144589,144471],{"class":3793},[66,144591,81585],{"class":76},[66,144593,49918],{"class":102},[66,144595,53221],{"class":76},[66,144597,144459],{"class":102},[66,144599,348],{"class":76},[66,144601,310],{"class":102},[66,144603,53276],{"class":72},[66,144605,144466],{"class":76},[66,144607,144608],{"class":68,"line":138},[66,144609,3407],{"class":76},[66,144611,144612],{"class":68,"line":227},[66,144613,144496],{"class":758},[66,144615,144616,144618],{"class":68,"line":236},[66,144617,53395],{"class":53084},[66,144619,17375],{"class":76},[66,144621,144622,144624,144626,144628,144630,144632,144634,144636,144638,144640,144642],{"class":68,"line":241},[66,144623,144507],{"class":102},[66,144625,53221],{"class":76},[66,144627,137008],{"class":102},[66,144629,1187],{"class":102},[66,144631,2674],{"class":72},[66,144633,80458],{"class":102},[66,144635,962],{"class":102},[66,144637,2674],{"class":72},[66,144639,144524],{"class":102},[66,144641,144527],{"class":102},[66,144643,3135],{"class":76},[66,144645,144646],{"class":68,"line":372},[66,144647,3407],{"class":76},[19,144649,144650],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[484,144652,144654],{"id":144653},"_1823-知识点回顾","18.2.3 知识点回顾",[57,144656,144657],{"className":128322,"code":130491,"language":128324,"meta":62,"style":62},[23,144658,144659,144665,144675],{"__ignoreMap":62},[66,144660,144661,144663],{"class":68,"line":69},[66,144662,53395],{"class":53084},[66,144664,17375],{"class":76},[66,144666,144667,144669,144671,144673],{"class":68,"line":80},[66,144668,130504],{"class":102},[66,144670,53221],{"class":76},[66,144672,63515],{"class":102},[66,144674,3135],{"class":76},[66,144676,144677],{"class":68,"line":112},[66,144678,3407],{"class":76},[14,144680,144682],{"id":144681},"_183-3d-转换","18.3 3D 转换",[19,144684,144685],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[484,144687,144689],{"id":144688},"_1831-坐标轴认识","18.3.1 坐标轴认识",[3304,144691],{"style":128178,"src":144692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[484,144694,144696],{"id":144695},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[3304,144698],{"style":128178,"src":144699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,144701,144702],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,144704,144705],{},"translate3d的效果需要搭配透视perspective来使用",[3304,144707],{"style":128178,"src":144708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[484,144710,144712],{"id":144711},"_1833-透视-perspective","18.3.3 透视 perspective",[3304,144714],{"style":128178,"src":144715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,144717,144718],{},"透视写在父盒子上，单位为像素",[484,144720,144722],{"id":144721},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[23801,144724,144726],{"id":144725},"_18341-分开解释","18.3.4.1 分开解释",[3304,144728],{"style":128178,"src":144729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[3304,144731],{"style":128178,"src":144732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[3304,144734],{"style":128178,"src":144735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,144737,144738],{},"总结来说就是左手原则",[23801,144740,144742],{"id":144741},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[3304,144744],{"style":128178,"src":144745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[484,144747,144749],{"id":144748},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[3304,144751],{"style":128178,"src":144752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[3304,144754],{"style":128178,"src":144755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[57,144757,144759],{"className":128322,"code":144758,"language":128324,"meta":62,"style":62},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[23,144760,144761,144767,144780,144797],{"__ignoreMap":62},[66,144762,144763,144765],{"class":68,"line":69},[66,144764,53395],{"class":53084},[66,144766,17375],{"class":76},[66,144768,144769,144772,144774,144776,144778],{"class":68,"line":80},[66,144770,144771],{"class":102},"  perspective",[66,144773,53221],{"class":76},[66,144775,66853],{"class":102},[66,144777,53276],{"class":72},[66,144779,3135],{"class":76},[66,144781,144782,144784,144786,144789,144791,144793,144795],{"class":68,"line":112},[66,144783,138306],{"class":102},[66,144785,53221],{"class":76},[66,144787,144788],{"class":102},"rotateX",[66,144790,348],{"class":76},[66,144792,2508],{"class":102},[66,144794,144149],{"class":72},[66,144796,4543],{"class":76},[66,144798,144799],{"class":68,"line":129},[66,144800,3407],{"class":76},[484,144802,144804],{"id":144803},"_1836-案例","18.3.6 案例",[23801,144806,144808],{"id":144807},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[3304,144810],{"style":128178,"src":144811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[3304,144813],{"style":128178,"src":144814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[3304,144816],{"style":128178,"src":144817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[57,144819,144821],{"className":128322,"code":144820,"language":128324,"meta":62,"style":62},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[23,144822,144823,144828,144834,144846],{"__ignoreMap":62},[66,144824,144825],{"class":68,"line":69},[66,144826,144827],{"class":758},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[66,144829,144830,144832],{"class":68,"line":80},[66,144831,135319],{"class":3793},[66,144833,17375],{"class":76},[66,144835,144836,144838,144840,144842,144844],{"class":68,"line":112},[66,144837,144771],{"class":102},[66,144839,53221],{"class":76},[66,144841,66853],{"class":102},[66,144843,53276],{"class":72},[66,144845,3135],{"class":76},[66,144847,144848],{"class":68,"line":129},[66,144849,3407],{"class":76},[23801,144851,144853],{"id":144852},"_18362-3d导航栏","18.3.6.2 3D导航栏",[3304,144855],{"style":128178,"src":144856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[57,144858,144859],{"className":129069,"code":132426,"language":129071,"meta":62,"style":62},[23,144860,144861,144865,144879,144883],{"__ignoreMap":62},[66,144862,144863],{"class":68,"line":69},[66,144864,132433],{"class":758},[66,144866,144867,144869,144871,144873,144875,144877],{"class":68,"line":80},[66,144868,413],{"class":76},[66,144870,53395],{"class":53084},[66,144872,55268],{"class":3793},[66,144874,99],{"class":76},[66,144876,132446],{"class":356},[66,144878,53091],{"class":76},[66,144880,144881],{"class":68,"line":112},[66,144882,132453],{"class":76},[66,144884,144885,144887,144889],{"class":68,"line":129},[66,144886,53569],{"class":76},[66,144888,53395],{"class":53084},[66,144890,53091],{"class":76},[23801,144892,144894],{"id":144893},"_18363-旋转木马","18.3.6.3 旋转木马",[3304,144896],{"style":128178,"src":144897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[57,144899,144900],{"className":128322,"code":144125,"language":128324,"meta":62,"style":62},[23,144901,144902,144908,144924],{"__ignoreMap":62},[66,144903,144904,144906],{"class":68,"line":69},[66,144905,53395],{"class":53084},[66,144907,17375],{"class":76},[66,144909,144910,144912,144914,144916,144918,144920,144922],{"class":68,"line":80},[66,144911,138306],{"class":102},[66,144913,53221],{"class":76},[66,144915,144142],{"class":102},[66,144917,348],{"class":76},[66,144919,2508],{"class":102},[66,144921,144149],{"class":72},[66,144923,4543],{"class":76},[66,144925,144926],{"class":68,"line":112},[66,144927,3407],{"class":76},[1903,144929,144930],{},"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":62,"searchDepth":80,"depth":80,"links":144932},[144933,144940],{"id":144028,"depth":80,"text":144029,"children":144934},[144935,144936,144937,144938,144939],{"id":144052,"depth":112,"text":144053},{"id":144107,"depth":112,"text":144108},{"id":144232,"depth":112,"text":144233},{"id":144335,"depth":112,"text":144336},{"id":144653,"depth":112,"text":144654},{"id":144681,"depth":80,"text":144682,"children":144941},[144942,144943,144944,144945,144946,144947],{"id":144688,"depth":112,"text":144689},{"id":144695,"depth":112,"text":144696},{"id":144711,"depth":112,"text":144712},{"id":144721,"depth":112,"text":144722},{"id":144748,"depth":112,"text":144749},{"id":144803,"depth":112,"text":144804},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":144020,"description":1926},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":144954,"title":144955,"body":144956,"description":1926,"extension":1927,"meta":145159,"navigation":108,"path":145160,"seo":145161,"stem":145162,"__hash__":145163},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":144957,"toc":145148},[144958,144961,144965,144968,144971,144975,144978,144981,144984,144988,144991,144995,144998,145002,145005,145009,145023,145027,145052,145055,145058,145075,145079,145083,145086,145089,145093,145096,145099,145117,145121,145124,145138,145142,145145],[10,144959,144955],{"id":144960},"_19-移动端基础-前缀现状与视口",[14,144962,144964],{"id":144963},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[3304,144966],{"style":128178,"src":144967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,144969,144970],{},"意思就是加个前缀，增加兼容性",[14,144972,144974],{"id":144973},"_192-移动端现状认识","19.2 移动端现状认识",[3304,144976],{"style":128178,"src":144977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,144979,144980],{},"调试方法：",[3304,144982],{"style":128178,"src":144983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,144985,144987],{"id":144986},"_193-视口","19.3 视口",[19,144989,144990],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[484,144992,144994],{"id":144993},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[3304,144996],{"style":128178,"src":144997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[484,144999,145001],{"id":145000},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[3304,145003],{"style":128178,"src":145004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[484,145006,145008],{"id":145007},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[2982,145010,145011,145014,145017,145020],{},[34,145012,145013],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[34,145015,145016],{},"理想视口，对设备来讲，是最理想的视口尺寸",[34,145018,145019],{},"需要手动添写meta视口标签通知浏览器操作",[34,145021,145022],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[484,145024,145026],{"id":145025},"_1934-meta视口标签","19.3.4 meta视口标签",[57,145028,145030],{"className":129069,"code":145029,"language":129071,"meta":62,"style":62},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[23,145031,145032],{"__ignoreMap":62},[66,145033,145034,145036,145038,145040,145042,145044,145046,145048,145050],{"class":68,"line":69},[66,145035,413],{"class":76},[66,145037,53128],{"class":53084},[66,145039,16724],{"class":3793},[66,145041,99],{"class":76},[66,145043,53175],{"class":356},[66,145045,53155],{"class":3793},[66,145047,99],{"class":76},[66,145049,53182],{"class":356},[66,145051,53091],{"class":76},[3304,145053],{"style":128178,"src":145054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,145056,145057],{},"标准视口设置：",[31,145059,145060,145063,145066,145069,145072],{},[34,145061,145062],{},"视口宽度和设备保持一致",[34,145064,145065],{},"视口的默认缩放比例1.0",[34,145067,145068],{},"不允许用户自行缩放",[34,145070,145071],{},"最大允许的缩放比例1.0",[34,145073,145074],{},"最小允许的缩放比例1.0",[484,145076,145078],{"id":145077},"_1935-二倍图","19.3.5 二倍图",[23801,145080,145082],{"id":145081},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[3304,145084],{"style":128178,"src":145085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[3304,145087],{"style":128178,"src":145088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[23801,145090,145092],{"id":145091},"_19352-多倍图","19.3.5.2 多倍图",[3304,145094],{"style":128178,"src":145095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,145097,145098],{},"二倍图法，代码如下：",[57,145100,145102],{"className":128322,"code":145101,"language":128324,"meta":62,"style":62},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[23,145103,145104,145109],{"__ignoreMap":62},[66,145105,145106],{"class":68,"line":69},[66,145107,145108],{"class":758},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[66,145110,145111,145114],{"class":68,"line":80},[66,145112,145113],{"class":53084},"background-size",[66,145115,145116],{"class":76},": 50% 50%;\n",[23801,145118,145120],{"id":145119},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[3304,145122],{"style":128178,"src":145123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[31,145125,145126,145129,145132,145135],{},[34,145127,145128],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[34,145130,145131],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[34,145133,145134],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[34,145136,145137],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[23801,145139,145141],{"id":145140},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[3304,145143],{"style":128178,"src":145144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[1903,145146,145147],{},"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":62,"searchDepth":80,"depth":80,"links":145149},[145150,145151,145152],{"id":144963,"depth":80,"text":144964},{"id":144973,"depth":80,"text":144974},{"id":144986,"depth":80,"text":144987,"children":145153},[145154,145155,145156,145157,145158],{"id":144993,"depth":112,"text":144994},{"id":145000,"depth":112,"text":145001},{"id":145007,"depth":112,"text":145008},{"id":145025,"depth":112,"text":145026},{"id":145077,"depth":112,"text":145078},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":144955,"description":1926},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":145165,"title":145166,"body":145167,"description":1926,"extension":1927,"meta":146044,"navigation":108,"path":146045,"seo":146046,"stem":146047,"__hash__":146048},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":145168,"toc":146028},[145169,145172,145176,145183,145186,145193,145196,145201,145204,145208,145212,145219,145222,145225,145229,145232,145235,145238,145241,145244,145248,145251,145255,145257,145260,145263,145266,145269,145271,145274,145276,145306,145308,145338,145342,145345,145349,145352,145369,145372,145375,145451,145453,145456,145459,145462,145465,145467,145470,145473,145477,145499,145502,145505,145509,145512,145518,145521,145525,145528,145531,145535,145538,145541,145544,145548,145551,145554,145557,145560,145564,145567,145571,145578,145581,145584,145587,145590,145600,145603,145606,145613,145616,145620,145623,145626,145630,145633,145636,145639,145684,145687,145690,145693,145695,145824,145826,145864,145867,145870,145872,145990,145992,146026],[10,145170,145166],{"id":145171},"_20-移动端布局实战上篇",[14,145173,145175],{"id":145174},"_201-移动端主流方案","20.1 移动端主流方案",[31,145177,145178],{},[34,145179,145180],{},[2141,145181,145182],{},"单独移动端页面（主流）",[3304,145184],{"style":128178,"src":145185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[31,145187,145188],{"start":80},[34,145189,145190],{},[2141,145191,145192],{},"响应式兼容PC移动端",[3304,145194],{"style":128178,"src":145195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[31,145197,145198],{"start":112},[34,145199,145200],{},"两种页面选型布局方式",[3304,145202],{"style":128178,"src":145203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,145205,145207],{"id":145206},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[484,145209,145211],{"id":145210},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,145213,145214,145215],{},"官网地址： ",[2229,145216,145217],{"href":145217,"rel":145218},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[25668],[3304,145220],{"style":128178,"src":145221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[3304,145223],{"style":128178,"src":145224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[484,145226,145228],{"id":145227},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[3304,145230],{"style":128178,"src":145231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[3304,145233],{"style":128178,"src":145234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,145236,145237],{},"去除高亮：",[19,145239,145240],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,145242,145243],{},"-webkit- tap-highlight-color: transparent;",[14,145245,145247],{"id":145246},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[3304,145249],{"style":128178,"src":145250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,145252,145254],{"id":145253},"_204-流式布局案例","20.4 流式布局案例",[19,145256,2028],{},[19,145258,145259],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,145261,145262],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,145264,145265],{},"图片格式：",[3304,145267],{"style":128178,"src":145268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,145270,137365],{},[3304,145272],{"style":128178,"src":145273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,145275,141692],{},[57,145277,145278],{"className":129069,"code":135824,"language":129071,"meta":62,"style":62},[23,145279,145280],{"__ignoreMap":62},[66,145281,145282,145284,145286,145288,145290,145292,145294,145296,145298,145300,145302,145304],{"class":68,"line":69},[66,145283,413],{"class":76},[66,145285,3304],{"class":53084},[66,145287,57020],{"class":3793},[66,145289,99],{"class":76},[66,145291,135839],{"class":356},[66,145293,57028],{"class":3793},[66,145295,99],{"class":76},[66,145297,135846],{"class":356},[66,145299,135849],{"class":3793},[66,145301,99],{"class":76},[66,145303,135854],{"class":356},[66,145305,53091],{"class":76},[19,145307,141781],{},[57,145309,145310],{"className":129069,"code":135824,"language":129071,"meta":62,"style":62},[23,145311,145312],{"__ignoreMap":62},[66,145313,145314,145316,145318,145320,145322,145324,145326,145328,145330,145332,145334,145336],{"class":68,"line":69},[66,145315,413],{"class":76},[66,145317,3304],{"class":53084},[66,145319,57020],{"class":3793},[66,145321,99],{"class":76},[66,145323,135839],{"class":356},[66,145325,57028],{"class":3793},[66,145327,99],{"class":76},[66,145329,135846],{"class":356},[66,145331,135849],{"class":3793},[66,145333,99],{"class":76},[66,145335,135854],{"class":356},[66,145337,53091],{"class":76},[14,145339,145341],{"id":145340},"_205-flex布局","20.5 flex布局",[3304,145343],{"style":128178,"src":145344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[484,145346,145348],{"id":145347},"_2051-布局原理","20.5.1 布局原理",[19,145350,145351],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[2982,145353,145354,145357,145360,145363,145366],{},[34,145355,145356],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[34,145358,145359],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[34,145361,145362],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[34,145364,145365],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[34,145367,145368],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,145370,145371],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,145373,145374],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[57,145376,145378],{"className":128322,"code":145377,"language":128324,"meta":62,"style":62},"\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",[23,145379,145380,145385,145392,145402,145414,145425,145436,145447],{"__ignoreMap":62},[66,145381,145382],{"class":68,"line":69},[66,145383,145384],{"class":758},"\u002F* Flex 弹性布局 *\u002F\n",[66,145386,145387,145390],{"class":68,"line":80},[66,145388,145389],{"class":3793},".container",[66,145391,17375],{"class":76},[66,145393,145394,145396,145398,145400],{"class":68,"line":112},[66,145395,129938],{"class":102},[66,145397,53221],{"class":76},[66,145399,53261],{"class":102},[66,145401,3135],{"class":76},[66,145403,145404,145407,145409,145412],{"class":68,"line":129},[66,145405,145406],{"class":102},"  flex-direction",[66,145408,53221],{"class":76},[66,145410,145411],{"class":102},"row",[66,145413,3135],{"class":76},[66,145415,145416,145419,145421,145423],{"class":68,"line":138},[66,145417,145418],{"class":102},"  justify-content",[66,145420,53221],{"class":76},[66,145422,53452],{"class":102},[66,145424,3135],{"class":76},[66,145426,145427,145430,145432,145434],{"class":68,"line":227},[66,145428,145429],{"class":102},"  align-items",[66,145431,53221],{"class":76},[66,145433,53376],{"class":102},[66,145435,3135],{"class":76},[66,145437,145438,145441,145443,145445],{"class":68,"line":236},[66,145439,145440],{"class":102},"  flex-wrap",[66,145442,53221],{"class":76},[66,145444,80388],{"class":102},[66,145446,3135],{"class":76},[66,145448,145449],{"class":68,"line":241},[66,145450,3407],{"class":76},[19,145452,72232],{},[19,145454,145455],{},".form-item .male-label {",[19,145457,145458],{},"   margin-right: 20px;",[19,145460,145461],{},"   display: inline-flex;",[19,145463,145464],{},"   align-items: center;",[19,145466,457],{},[3304,145468],{"style":128178,"src":145469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[3304,145471],{"style":128178,"src":145472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[484,145474,145476],{"id":145475},"_2052-常见父项属性","20.5.2 常见父项属性",[31,145478,145479,145482,145485,145488,145491,145494,145497],{},[34,145480,145481],{},"flex-direction：设置主轴的方向",[34,145483,145484],{},"justify-content：设置主轴上的子元素排列方式",[34,145486,145487],{},"flex-wrap：设置子元素是否换行",[34,145489,145490],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[34,145492,145493],{},"align-items：设置侧轴上的子元素排列方式（单行）",[34,145495,145496],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[34,145498,145481],{},[3304,145500],{"style":128178,"src":145501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[3304,145503],{"style":128178,"src":145504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[31,145506,145507],{"start":80},[34,145508,145484],{},[3304,145510],{"style":128178,"src":145511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,145513,145514,145517],{},[23,145515,145516],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,145519,145520],{},"跟着主轴走",[31,145522,145523],{"start":112},[34,145524,145487],{},[3304,145526],{"style":128178,"src":145527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,145529,145530],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[31,145532,145533],{"start":129},[34,145534,145490],{},[3304,145536],{"style":128178,"src":145537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,145539,145540],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,145542,145543],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[31,145545,145546],{"start":138},[34,145547,145493],{},[3304,145549],{"style":128178,"src":145550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,145552,145553],{},"align-items与align-content之间的区别：",[19,145555,145556],{},"单找items，多找content",[3304,145558],{"style":128178,"src":145559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[31,145561,145562],{"start":227},[34,145563,145496],{},[3304,145565],{"style":128178,"src":145566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[484,145568,145570],{"id":145569},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[31,145572,145573],{},[34,145574,145575],{},[2141,145576,145577],{},"flex 属性",[19,145579,145580],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[3304,145582],{"style":128178,"src":145583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,145585,145586],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,145588,145589],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[31,145591,145592],{"start":80},[34,145593,145594,15600,145597],{},[2141,145595,145596],{},"align-self",[2141,145598,145599],{},"控制子项自己在侧轴上的排列方式",[3304,145601],{"style":128178,"src":145602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,145604,145605],{},"单个子盒子在父盒子侧轴上的排列方式",[31,145607,145608],{"start":112},[34,145609,145610,145612],{},[2141,145611,97072],{}," 属性定义项目的排列顺序",[3304,145614],{"style":128178,"src":145615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[484,145617,145619],{"id":145618},"_2054-背景线性渐变","20.5.4 背景线性渐变",[3304,145621],{"style":128178,"src":145622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,145624,145625],{},"必须要添加浏览器的私有前缀",[484,145627,145629],{"id":145628},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,145631,145632],{},"学到最重要的知识：",[19,145634,145635],{},"flex处理这样的布局思路",[3304,145637],{"style":128178,"src":145638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[57,145640,145642],{"className":128322,"code":145641,"language":128324,"meta":62,"style":62},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[23,145643,145644,145650,145660,145670,145680],{"__ignoreMap":62},[66,145645,145646,145648],{"class":68,"line":69},[66,145647,145389],{"class":3793},[66,145649,17375],{"class":76},[66,145651,145652,145654,145656,145658],{"class":68,"line":80},[66,145653,129938],{"class":102},[66,145655,53221],{"class":76},[66,145657,53261],{"class":102},[66,145659,3135],{"class":76},[66,145661,145662,145664,145666,145668],{"class":68,"line":112},[66,145663,145418],{"class":102},[66,145665,53221],{"class":76},[66,145667,53376],{"class":102},[66,145669,3135],{"class":76},[66,145671,145672,145674,145676,145678],{"class":68,"line":129},[66,145673,145429],{"class":102},[66,145675,53221],{"class":76},[66,145677,53376],{"class":102},[66,145679,3135],{"class":76},[66,145681,145682],{"class":68,"line":138},[66,145683,3407],{"class":76},[19,145685,145686],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,145688,145689],{},"使用属性选择器",[3304,145691],{"style":128178,"src":145692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,145694,70668],{},[57,145696,145698],{"className":129069,"code":145697,"language":129071,"meta":62,"style":62},"\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",[23,145699,145700,145705,145719,145724,145744,145749,145768,145773,145792,145797,145816],{"__ignoreMap":62},[66,145701,145702],{"class":68,"line":69},[66,145703,145704],{"class":758},"\u003C!-- 携程网移动端案例结构 -->\n",[66,145706,145707,145709,145711,145713,145715,145717],{"class":68,"line":80},[66,145708,413],{"class":76},[66,145710,53395],{"class":53084},[66,145712,55268],{"class":3793},[66,145714,99],{"class":76},[66,145716,94099],{"class":356},[66,145718,53091],{"class":76},[66,145720,145721],{"class":68,"line":112},[66,145722,145723],{"class":758},"  \u003C!-- 搜索栏 -->\n",[66,145725,145726,145728,145730,145732,145734,145737,145740,145742],{"class":68,"line":129},[66,145727,53928],{"class":76},[66,145729,53395],{"class":53084},[66,145731,55268],{"class":3793},[66,145733,99],{"class":76},[66,145735,145736],{"class":356},"\"search-index\"",[66,145738,145739],{"class":76},">...\u003C\u002F",[66,145741,53395],{"class":53084},[66,145743,53091],{"class":76},[66,145745,145746],{"class":68,"line":138},[66,145747,145748],{"class":758},"  \u003C!-- 焦点图 -->\n",[66,145750,145751,145753,145755,145757,145759,145762,145764,145766],{"class":68,"line":227},[66,145752,53928],{"class":76},[66,145754,53395],{"class":53084},[66,145756,55268],{"class":3793},[66,145758,99],{"class":76},[66,145760,145761],{"class":356},"\"focus\"",[66,145763,145739],{"class":76},[66,145765,53395],{"class":53084},[66,145767,53091],{"class":76},[66,145769,145770],{"class":68,"line":236},[66,145771,145772],{"class":758},"  \u003C!-- 主导航 -->\n",[66,145774,145775,145777,145779,145781,145783,145786,145788,145790],{"class":68,"line":241},[66,145776,53928],{"class":76},[66,145778,53395],{"class":53084},[66,145780,55268],{"class":3793},[66,145782,99],{"class":76},[66,145784,145785],{"class":356},"\"local-nav\"",[66,145787,145739],{"class":76},[66,145789,53395],{"class":53084},[66,145791,53091],{"class":76},[66,145793,145794],{"class":68,"line":372},[66,145795,145796],{"class":758},"  \u003C!-- 子导航 -->\n",[66,145798,145799,145801,145803,145805,145807,145810,145812,145814],{"class":68,"line":377},[66,145800,53928],{"class":76},[66,145802,53395],{"class":53084},[66,145804,55268],{"class":3793},[66,145806,99],{"class":76},[66,145808,145809],{"class":356},"\"nav-common\"",[66,145811,145739],{"class":76},[66,145813,53395],{"class":53084},[66,145815,53091],{"class":76},[66,145817,145818,145820,145822],{"class":68,"line":392},[66,145819,53569],{"class":76},[66,145821,53395],{"class":53084},[66,145823,53091],{"class":76},[19,145825,72232],{},[57,145827,145828],{"className":128322,"code":138774,"language":128324,"meta":62,"style":62},[23,145829,145830,145844,145860],{"__ignoreMap":62},[66,145831,145832,145834,145836,145838,145840,145842],{"class":68,"line":69},[66,145833,351],{"class":53084},[66,145835,2869],{"class":76},[66,145837,104880],{"class":3793},[66,145839,99],{"class":72},[66,145841,64478],{"class":356},[66,145843,138791],{"class":76},[66,145845,145846,145848,145850,145852,145854,145856,145858],{"class":68,"line":80},[66,145847,72675],{"class":102},[66,145849,53221],{"class":76},[66,145851,304],{"class":102},[66,145853,53276],{"class":72},[66,145855,53305],{"class":102},[66,145857,131902],{"class":102},[66,145859,3135],{"class":76},[66,145861,145862],{"class":68,"line":112},[66,145863,3407],{"class":76},[19,145865,145866],{},"总代码和效果展示：",[3304,145868],{"style":128178,"src":145869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,145871,70668],{},[57,145873,145874],{"className":129069,"code":145697,"language":129071,"meta":62,"style":62},[23,145875,145876,145880,145894,145898,145916,145920,145938,145942,145960,145964,145982],{"__ignoreMap":62},[66,145877,145878],{"class":68,"line":69},[66,145879,145704],{"class":758},[66,145881,145882,145884,145886,145888,145890,145892],{"class":68,"line":80},[66,145883,413],{"class":76},[66,145885,53395],{"class":53084},[66,145887,55268],{"class":3793},[66,145889,99],{"class":76},[66,145891,94099],{"class":356},[66,145893,53091],{"class":76},[66,145895,145896],{"class":68,"line":112},[66,145897,145723],{"class":758},[66,145899,145900,145902,145904,145906,145908,145910,145912,145914],{"class":68,"line":129},[66,145901,53928],{"class":76},[66,145903,53395],{"class":53084},[66,145905,55268],{"class":3793},[66,145907,99],{"class":76},[66,145909,145736],{"class":356},[66,145911,145739],{"class":76},[66,145913,53395],{"class":53084},[66,145915,53091],{"class":76},[66,145917,145918],{"class":68,"line":138},[66,145919,145748],{"class":758},[66,145921,145922,145924,145926,145928,145930,145932,145934,145936],{"class":68,"line":227},[66,145923,53928],{"class":76},[66,145925,53395],{"class":53084},[66,145927,55268],{"class":3793},[66,145929,99],{"class":76},[66,145931,145761],{"class":356},[66,145933,145739],{"class":76},[66,145935,53395],{"class":53084},[66,145937,53091],{"class":76},[66,145939,145940],{"class":68,"line":236},[66,145941,145772],{"class":758},[66,145943,145944,145946,145948,145950,145952,145954,145956,145958],{"class":68,"line":241},[66,145945,53928],{"class":76},[66,145947,53395],{"class":53084},[66,145949,55268],{"class":3793},[66,145951,99],{"class":76},[66,145953,145785],{"class":356},[66,145955,145739],{"class":76},[66,145957,53395],{"class":53084},[66,145959,53091],{"class":76},[66,145961,145962],{"class":68,"line":372},[66,145963,145796],{"class":758},[66,145965,145966,145968,145970,145972,145974,145976,145978,145980],{"class":68,"line":377},[66,145967,53928],{"class":76},[66,145969,53395],{"class":53084},[66,145971,55268],{"class":3793},[66,145973,99],{"class":76},[66,145975,145809],{"class":356},[66,145977,145739],{"class":76},[66,145979,53395],{"class":53084},[66,145981,53091],{"class":76},[66,145983,145984,145986,145988],{"class":68,"line":392},[66,145985,53569],{"class":76},[66,145987,53395],{"class":53084},[66,145989,53091],{"class":76},[19,145991,72232],{},[57,145993,145994],{"className":129069,"code":132426,"language":129071,"meta":62,"style":62},[23,145995,145996,146000,146014,146018],{"__ignoreMap":62},[66,145997,145998],{"class":68,"line":69},[66,145999,132433],{"class":758},[66,146001,146002,146004,146006,146008,146010,146012],{"class":68,"line":80},[66,146003,413],{"class":76},[66,146005,53395],{"class":53084},[66,146007,55268],{"class":3793},[66,146009,99],{"class":76},[66,146011,132446],{"class":356},[66,146013,53091],{"class":76},[66,146015,146016],{"class":68,"line":112},[66,146017,132453],{"class":76},[66,146019,146020,146022,146024],{"class":68,"line":129},[66,146021,53569],{"class":76},[66,146023,53395],{"class":53084},[66,146025,53091],{"class":76},[1903,146027,139723],{},{"title":62,"searchDepth":80,"depth":80,"links":146029},[146030,146031,146035,146036,146037],{"id":145174,"depth":80,"text":145175},{"id":145206,"depth":80,"text":145207,"children":146032},[146033,146034],{"id":145210,"depth":112,"text":145211},{"id":145227,"depth":112,"text":145228},{"id":145246,"depth":80,"text":145247},{"id":145253,"depth":80,"text":145254},{"id":145340,"depth":80,"text":145341,"children":146038},[146039,146040,146041,146042,146043],{"id":145347,"depth":112,"text":145348},{"id":145475,"depth":112,"text":145476},{"id":145569,"depth":112,"text":145570},{"id":145618,"depth":112,"text":145619},{"id":145628,"depth":112,"text":145629},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":145166,"description":1926},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":146050,"title":146051,"body":146052,"description":1926,"extension":1927,"meta":147279,"navigation":108,"path":147280,"seo":147281,"stem":147282,"__hash__":147283},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":146053,"toc":147257},[146054,146057,146061,146065,146068,146071,146075,146080,146083,146086,146089,146092,146095,146152,146155,146160,146163,146166,146170,146181,146185,146188,146191,146198,146203,146207,146210,146216,146219,146223,146226,146233,146236,146239,146246,146249,146256,146259,146262,146269,146272,146275,146277,146294,146298,146301,146304,146307,146311,146314,146317,146320,146323,146326,146329,146331,146334,146337,146399,146402,146512,146519,146525,146528,146531,146535,146538,146542,146547,146550,146557,146560,146566,146571,146574,146577,146580,146583,146586,146589,146592,146595,146651,146653,146679,146683,146686,146689,146692,146700,146703,146706,146710,146766,146769,146773,146779,146790,146793,146798,146801,146804,146810,146813,146816,146819,146822,146825,146828,146831,146834,146859,146865,146868,146871,146874,146877,146880,146883,146888,146891,146894,146897,146905,146908,146915,146918,146921,146923,146947,146949,146952,146955,146958,146961,146964,146967,146970,147004,147007,147010,147044,147051,147054,147057,147060,147063,147066,147069,147076,147079,147082,147085,147088,147095,147098,147101,147108,147111,147114,147118,147121,147124,147127,147130,147133,147136,147139,147142,147144,147168,147170,147194,147198,147209,147212,147215,147218,147221,147224,147227,147230,147233,147236,147239,147242,147245,147248,147251,147254],[10,146055,146051],{"id":146056},"_21-移动端布局实战下篇",[14,146058,146060],{"id":146059},"_211-rem适配布局","21.1 rem适配布局",[484,146062,146064],{"id":146063},"_2111-rem单位","21.1.1 rem单位",[3304,146066],{"style":128178,"src":146067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,146069,146070],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[484,146072,146074],{"id":146073},"_2112-媒体查询","21.1.2 媒体查询",[31,146076,146077],{},[34,146078,146079],{},"参数介绍",[3304,146081],{"style":128178,"src":146082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[3304,146084],{"style":128178,"src":146085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[3304,146087],{"style":128178,"src":146088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[3304,146090],{"style":128178,"src":146091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[3304,146093],{"style":128178,"src":146094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[57,146096,146098],{"className":128322,"code":146097,"language":128324,"meta":62,"style":62},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[23,146099,146100,146105,146124,146131,146144,146148],{"__ignoreMap":62},[66,146101,146102],{"class":68,"line":69},[66,146103,146104],{"class":758},"\u002F* 媒体查询 *\u002F\n",[66,146106,146107,146110,146112,146115,146117,146120,146122],{"class":68,"line":80},[66,146108,146109],{"class":72},"@media",[66,146111,3492],{"class":76},[66,146113,146114],{"class":102},"max-width",[66,146116,53221],{"class":76},[66,146118,146119],{"class":102},"768",[66,146121,53276],{"class":72},[66,146123,14247],{"class":76},[66,146125,146126,146129],{"class":68,"line":112},[66,146127,146128],{"class":3793},"  .container",[66,146130,17375],{"class":76},[66,146132,146133,146136,146138,146140,146142],{"class":68,"line":129},[66,146134,146135],{"class":102},"    width",[66,146137,53221],{"class":76},[66,146139,310],{"class":102},[66,146141,953],{"class":72},[66,146143,3135],{"class":76},[66,146145,146146],{"class":68,"line":138},[66,146147,129118],{"class":76},[66,146149,146150],{"class":68,"line":227},[66,146151,3407],{"class":76},[19,146153,146154],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[31,146156,146157],{"start":80},[34,146158,146159],{},"引入资源",[3304,146161],{"style":128178,"src":146162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,146164,146165],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[484,146167,146169],{"id":146168},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[2982,146171,146172,146175,146178],{},[34,146173,146174],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[34,146176,146177],{},"媒体查询可以根据不同设备宽度来修改样式",[34,146179,146180],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,146182,146184],{"id":146183},"_212-less基础","21.2 Less基础",[19,146186,146187],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,146189,146190],{},"Less可以解决该问题，它是css的扩展语言",[19,146192,146193,146194],{},"Less中文网址： ",[2229,146195,146196],{"href":146196,"rel":146197},"http:\u002F\u002Flesscss.cn\u002F",[25668],[19,146199,146200],{},[2141,146201,146202],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[484,146204,146206],{"id":146205},"_2121-less安装","21.2.1 less安装",[19,146208,146209],{},"如果使用vscode，则无需进行下方安装步骤",[19,146211,146212],{},[2229,146213,146214],{"href":146214,"rel":146215},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[25668],[3304,146217],{"style":128178,"src":146218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[484,146220,146222],{"id":146221},"_2122-less使用","21.2.2 less使用",[19,146224,146225],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[31,146227,146228],{},[34,146229,146230],{},[2141,146231,146232],{},"Less 变量",[3304,146234],{"style":128178,"src":146235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[3304,146237],{"style":128178,"src":146238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[31,146240,146241],{"start":80},[34,146242,146243],{},[2141,146244,146245],{},"Less 编译",[3304,146247],{"style":128178,"src":146248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[31,146250,146251],{"start":112},[34,146252,146253],{},[2141,146254,146255],{},"Less 嵌套",[3304,146257],{"style":128178,"src":146258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[3304,146260],{"style":128178,"src":146261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[31,146263,146264],{"start":129},[34,146265,146266],{},[2141,146267,146268],{},"Less 运算",[3304,146270],{"style":128178,"src":146271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,146273,146274],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,146276,2028],{},[2982,146278,146279,146282,146285,146288,146291],{},[34,146280,146281],{},"乘号（*）和除号（\u002F）的写法",[34,146283,146284],{},"运算符中间左右有个空格隔开 1px + 5",[34,146286,146287],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[34,146289,146290],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[34,146292,146293],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,146295,146297],{"id":146296},"_213-rem-适配方案","21.3 rem 适配方案",[19,146299,146300],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,146302,146303],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[3304,146305],{"style":128178,"src":146306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[484,146308,146310],{"id":146309},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,146312,146313],{},"rem + 媒体查询 + less 技术",[3304,146315],{"style":128178,"src":146316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,146318,146319],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,146321,146322],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[3304,146324],{"style":128178,"src":146325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,146327,146328],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,146330,16438],{},[3304,146332],{"style":128178,"src":146333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,146335,146336],{},"index.html:",[57,146338,146340],{"className":128322,"code":146339,"language":128324,"meta":62,"style":62},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[23,146341,146342,146347,146353,146369,146373,146379,146395],{"__ignoreMap":62},[66,146343,146344],{"class":68,"line":69},[66,146345,146346],{"class":758},"\u002F* rem 适配方案 *\u002F\n",[66,146348,146349,146351],{"class":68,"line":80},[66,146350,52419],{"class":53084},[66,146352,17375],{"class":76},[66,146354,146355,146357,146359,146362,146364,146366],{"class":68,"line":112},[66,146356,72405],{"class":102},[66,146358,53221],{"class":76},[66,146360,146361],{"class":102},"62.5",[66,146363,953],{"class":72},[66,146365,132185],{"class":76},[66,146367,146368],{"class":758},"\u002F* 1rem = 10px *\u002F\n",[66,146370,146371],{"class":68,"line":129},[66,146372,3407],{"class":76},[66,146374,146375,146377],{"class":68,"line":138},[66,146376,132170],{"class":3793},[66,146378,17375],{"class":76},[66,146380,146381,146383,146385,146387,146390,146392],{"class":68,"line":227},[66,146382,72347],{"class":102},[66,146384,53221],{"class":76},[66,146386,790],{"class":102},[66,146388,146389],{"class":72},"rem",[66,146391,132185],{"class":76},[66,146393,146394],{"class":758},"\u002F* 100px *\u002F\n",[66,146396,146397],{"class":68,"line":236},[66,146398,3407],{"class":76},[19,146400,146401],{},"common.less",[57,146403,146405],{"className":128322,"code":146404,"language":128324,"meta":62,"style":62},"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",[23,146406,146407,146413,146428,146432,146438,146452,146456,146460,146464,146470,146484,146488,146494,146508],{"__ignoreMap":62},[66,146408,146409,146411],{"class":68,"line":69},[66,146410,52419],{"class":53084},[66,146412,17375],{"class":76},[66,146414,146415,146417,146419,146421,146423,146425],{"class":68,"line":80},[66,146416,72405],{"class":102},[66,146418,53221],{"class":76},[66,146420,146361],{"class":102},[66,146422,953],{"class":72},[66,146424,27868],{"class":76},[66,146426,146427],{"class":758},"\u002F* 10px *\u002F\n",[66,146429,146430],{"class":68,"line":112},[66,146431,3407],{"class":76},[66,146433,146434,146436],{"class":68,"line":129},[66,146435,53395],{"class":53084},[66,146437,17375],{"class":76},[66,146439,146440,146442,146444,146446,146448,146450],{"class":68,"line":138},[66,146441,72347],{"class":102},[66,146443,53221],{"class":76},[66,146445,790],{"class":102},[66,146447,146389],{"class":72},[66,146449,27868],{"class":76},[66,146451,146394],{"class":758},[66,146453,146454],{"class":68,"line":227},[66,146455,3407],{"class":76},[66,146457,146458],{"class":68,"line":236},[66,146459,137783],{"class":76},[66,146461,146462],{"class":68,"line":241},[66,146463,146346],{"class":758},[66,146465,146466,146468],{"class":68,"line":372},[66,146467,52419],{"class":53084},[66,146469,17375],{"class":76},[66,146471,146472,146474,146476,146478,146480,146482],{"class":68,"line":377},[66,146473,72405],{"class":102},[66,146475,53221],{"class":76},[66,146477,146361],{"class":102},[66,146479,953],{"class":72},[66,146481,132185],{"class":76},[66,146483,146368],{"class":758},[66,146485,146486],{"class":68,"line":392},[66,146487,3407],{"class":76},[66,146489,146490,146492],{"class":68,"line":405},[66,146491,132170],{"class":3793},[66,146493,17375],{"class":76},[66,146495,146496,146498,146500,146502,146504,146506],{"class":68,"line":418},[66,146497,72347],{"class":102},[66,146499,53221],{"class":76},[66,146501,790],{"class":102},[66,146503,146389],{"class":72},[66,146505,132185],{"class":76},[66,146507,146394],{"class":758},[66,146509,146510],{"class":68,"line":430},[66,146511,3407],{"class":76},[19,146513,146514,146515,146518],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[25356,146516,146517],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[57,146520,146523],{"className":146521,"code":146522,"language":555},[553],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[23,146524,146522],{"__ignoreMap":62},[19,146526,146527],{},"less保存时会自动变成.css文件",[19,146529,146530],{},"好好搞懂上述代码写法",[484,146532,146534],{"id":146533},"_2132-样式导入样式","21.3.2 样式导入样式",[3304,146536],{"style":128178,"src":146537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[484,146539,146541],{"id":146540},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[31,146543,146544],{},[34,146545,146546],{},"准备工作",[3304,146548],{"style":128178,"src":146549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,146551,146552,146553],{},"github地址：",[2229,146554,146555],{"href":146555,"rel":146556},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[25668],[19,146558,146559],{},"下载之后，将index.js文件拖到项目中就可以了",[19,146561,146562,146563],{},"js文件引入到index.html中使用的是",[23,146564,146565],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[31,146567,146568],{"start":80},[34,146569,146570],{},"vscode插件",[3304,146572],{"style":128178,"src":146573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,146575,146576],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,146578,146579],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[3304,146581],{"style":128178,"src":146582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,146584,146585],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[3304,146587],{"style":128178,"src":146588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,146590,146591],{},"修改成75就可以，alt+z为快捷键",[19,146593,146594],{},"index.css：",[57,146596,146597],{"className":128322,"code":146339,"language":128324,"meta":62,"style":62},[23,146598,146599,146603,146609,146623,146627,146633,146647],{"__ignoreMap":62},[66,146600,146601],{"class":68,"line":69},[66,146602,146346],{"class":758},[66,146604,146605,146607],{"class":68,"line":80},[66,146606,52419],{"class":53084},[66,146608,17375],{"class":76},[66,146610,146611,146613,146615,146617,146619,146621],{"class":68,"line":112},[66,146612,72405],{"class":102},[66,146614,53221],{"class":76},[66,146616,146361],{"class":102},[66,146618,953],{"class":72},[66,146620,132185],{"class":76},[66,146622,146368],{"class":758},[66,146624,146625],{"class":68,"line":129},[66,146626,3407],{"class":76},[66,146628,146629,146631],{"class":68,"line":138},[66,146630,132170],{"class":3793},[66,146632,17375],{"class":76},[66,146634,146635,146637,146639,146641,146643,146645],{"class":68,"line":227},[66,146636,72347],{"class":102},[66,146638,53221],{"class":76},[66,146640,790],{"class":102},[66,146642,146389],{"class":72},[66,146644,132185],{"class":76},[66,146646,146394],{"class":758},[66,146648,146649],{"class":68,"line":236},[66,146650,3407],{"class":76},[19,146652,146336],{},[57,146654,146655],{"className":128322,"code":128726,"language":128324,"meta":62,"style":62},[23,146656,146657,146663,146675],{"__ignoreMap":62},[66,146658,146659,146661],{"class":68,"line":69},[66,146660,53584],{"class":53084},[66,146662,17375],{"class":76},[66,146664,146665,146667,146669,146671,146673],{"class":68,"line":80},[66,146666,72405],{"class":102},[66,146668,53221],{"class":76},[66,146670,2580],{"class":102},[66,146672,53276],{"class":72},[66,146674,3135],{"class":76},[66,146676,146677],{"class":68,"line":112},[66,146678,3407],{"class":76},[14,146680,146682],{"id":146681},"_214-响应式开发","21.4 响应式开发",[19,146684,146685],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[3304,146687],{"style":128178,"src":146688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,146690,146691],{},"做法：",[2982,146693,146694,146697],{},[34,146695,146696],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[34,146698,146699],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[3304,146701],{"style":128178,"src":146702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,146704,146705],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[484,146707,146709],{"id":146708},"_2141-简单代码示范","21.4.1 简单代码示范",[57,146711,146712],{"className":128322,"code":146339,"language":128324,"meta":62,"style":62},[23,146713,146714,146718,146724,146738,146742,146748,146762],{"__ignoreMap":62},[66,146715,146716],{"class":68,"line":69},[66,146717,146346],{"class":758},[66,146719,146720,146722],{"class":68,"line":80},[66,146721,52419],{"class":53084},[66,146723,17375],{"class":76},[66,146725,146726,146728,146730,146732,146734,146736],{"class":68,"line":112},[66,146727,72405],{"class":102},[66,146729,53221],{"class":76},[66,146731,146361],{"class":102},[66,146733,953],{"class":72},[66,146735,132185],{"class":76},[66,146737,146368],{"class":758},[66,146739,146740],{"class":68,"line":129},[66,146741,3407],{"class":76},[66,146743,146744,146746],{"class":68,"line":138},[66,146745,132170],{"class":3793},[66,146747,17375],{"class":76},[66,146749,146750,146752,146754,146756,146758,146760],{"class":68,"line":227},[66,146751,72347],{"class":102},[66,146753,53221],{"class":76},[66,146755,790],{"class":102},[66,146757,146389],{"class":72},[66,146759,132185],{"class":76},[66,146761,146394],{"class":758},[66,146763,146764],{"class":68,"line":236},[66,146765,3407],{"class":76},[19,146767,146768],{},"父盒子一般命名为container",[484,146770,146772],{"id":146771},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,146774,146775,146776],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[2141,146777,146778],{},"使得 Web 开发更加快捷",[2982,146780,146781],{},[34,146782,146783,146784],{},"官网：",[2141,146785,146786],{},[2229,146787,146788],{"href":146788,"rel":146789},"http:\u002F\u002Fgetbootstrap.com\u002F",[25668],[19,146791,146792],{},"可以直接去官网拿现成的东西",[31,146794,146795],{},[34,146796,146797],{},"Bootstrap的使用",[19,146799,146800],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,146802,146803],{},"Bootstrap 使用四步曲：",[19,146805,146806,146809],{},[2141,146807,146808],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[3304,146811],{"style":128178,"src":146812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,146814,146815],{},"打开Bootstrap官网，然后下载",[3304,146817],{"style":128178,"src":146818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[3304,146820],{"style":128178,"src":146821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,146823,146824],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,146826,146827],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,146829,146830],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[3304,146832],{"style":128178,"src":146833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[57,146835,146837],{"className":128322,"code":146836,"language":128324,"meta":62,"style":62},".center {\n  color: red;\n}\n",[23,146838,146839,146845,146855],{"__ignoreMap":62},[66,146840,146841,146843],{"class":68,"line":69},[66,146842,128613],{"class":3793},[66,146844,17375],{"class":76},[66,146846,146847,146849,146851,146853],{"class":68,"line":80},[66,146848,72684],{"class":102},[66,146850,53221],{"class":76},[66,146852,59201],{"class":102},[66,146854,3135],{"class":76},[66,146856,146857],{"class":68,"line":112},[66,146858,3407],{"class":76},[19,146860,146861,146864],{},[23,146862,146863],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[3304,146866],{"style":128178,"src":146867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[3304,146869],{"style":128178,"src":146870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[3304,146872],{"style":128178,"src":146873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,146875,146876],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[3304,146878],{"style":128178,"src":146879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,146881,146882],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[31,146884,146885],{"start":80},[34,146886,146887],{},"布局容器",[3304,146889],{"style":128178,"src":146890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,146892,146893],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,146895,146896],{},"container-fluid用于移动式布局比较方便",[31,146898,146899],{"start":112},[34,146900,146901,146902],{},"bootstrap ",[2141,146903,146904],{},"栅格系统原理",[3304,146906],{"style":128178,"src":146907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[31,146909,146910],{"start":129},[34,146911,146912],{},[2141,146913,146914],{},"栅格选项参数",[3304,146916],{"style":128178,"src":146917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,146919,146920],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,146922,16438],{},[57,146924,146925],{"className":128322,"code":146836,"language":128324,"meta":62,"style":62},[23,146926,146927,146933,146943],{"__ignoreMap":62},[66,146928,146929,146931],{"class":68,"line":69},[66,146930,128613],{"class":3793},[66,146932,17375],{"class":76},[66,146934,146935,146937,146939,146941],{"class":68,"line":80},[66,146936,72684],{"class":102},[66,146938,53221],{"class":76},[66,146940,59201],{"class":102},[66,146942,3135],{"class":76},[66,146944,146945],{"class":68,"line":112},[66,146946,3407],{"class":76},[19,146948,137365],{},[3304,146950],{"style":128178,"src":146951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,146953,146954],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,146956,146957],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,146959,146960],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,146962,146963],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,146965,146966],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,146968,146969],{},"汇总展示说明：",[57,146971,146972],{"className":129069,"code":132426,"language":129071,"meta":62,"style":62},[23,146973,146974,146978,146992,146996],{"__ignoreMap":62},[66,146975,146976],{"class":68,"line":69},[66,146977,132433],{"class":758},[66,146979,146980,146982,146984,146986,146988,146990],{"class":68,"line":80},[66,146981,413],{"class":76},[66,146983,53395],{"class":53084},[66,146985,55268],{"class":3793},[66,146987,99],{"class":76},[66,146989,132446],{"class":356},[66,146991,53091],{"class":76},[66,146993,146994],{"class":68,"line":112},[66,146995,132453],{"class":76},[66,146997,146998,147000,147002],{"class":68,"line":129},[66,146999,53569],{"class":76},[66,147001,53395],{"class":53084},[66,147003,53091],{"class":76},[3304,147005],{"style":128178,"src":147006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,147008,147009],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[57,147011,147012],{"className":129069,"code":132426,"language":129071,"meta":62,"style":62},[23,147013,147014,147018,147032,147036],{"__ignoreMap":62},[66,147015,147016],{"class":68,"line":69},[66,147017,132433],{"class":758},[66,147019,147020,147022,147024,147026,147028,147030],{"class":68,"line":80},[66,147021,413],{"class":76},[66,147023,53395],{"class":53084},[66,147025,55268],{"class":3793},[66,147027,99],{"class":76},[66,147029,132446],{"class":356},[66,147031,53091],{"class":76},[66,147033,147034],{"class":68,"line":112},[66,147035,132453],{"class":76},[66,147037,147038,147040,147042],{"class":68,"line":129},[66,147039,53569],{"class":76},[66,147041,53395],{"class":53084},[66,147043,53091],{"class":76},[31,147045,147046],{"start":138},[34,147047,147048],{},[2141,147049,147050],{},"列嵌套",[3304,147052],{"style":128178,"src":147053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,147055,147056],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,147058,147059],{},"没加row内部这样：",[3304,147061],{"style":128178,"src":147062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,147064,147065],{},"加上row之后内部为：",[3304,147067],{"style":128178,"src":147068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[31,147070,147071],{"start":227},[34,147072,147073],{},[2141,147074,147075],{},"列偏移",[3304,147077],{"style":128178,"src":147078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,147080,147081],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,147083,147084],{},"要加偏移量，即偏移份数",[19,147086,147087],{},"偏移的份数=12-两个盒子的份数",[31,147089,147090],{"start":236},[34,147091,147092],{},[2141,147093,147094],{},"列排序",[3304,147096],{"style":128178,"src":147097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,147099,147100],{},"pull拉左；push推右",[31,147102,147103],{"start":241},[34,147104,147105],{},[2141,147106,147107],{},"响应式工具",[3304,147109],{"style":128178,"src":147110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,147112,147113],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[484,147115,147117],{"id":147116},"_2143-响应式小项目","21.4.3 响应式小项目",[19,147119,147120],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,147122,147123],{},"ul {",[19,147125,147126],{},"list-style: none;",[19,147128,147129],{},"margin:0;",[19,147131,147132],{},"padding:0; }",[3304,147134],{"style":128178,"src":147135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[3304,147137],{"style":128178,"src":147138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,147140,147141],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,147143,70668],{},[57,147145,147146],{"className":128322,"code":140992,"language":128324,"meta":62,"style":62},[23,147147,147148,147154,147164],{"__ignoreMap":62},[66,147149,147150,147152],{"class":68,"line":69},[66,147151,132170],{"class":3793},[66,147153,17375],{"class":76},[66,147155,147156,147158,147160,147162],{"class":68,"line":80},[66,147157,132802],{"class":102},[66,147159,53221],{"class":76},[66,147161,25539],{"class":102},[66,147163,3135],{"class":76},[66,147165,147166],{"class":68,"line":112},[66,147167,3407],{"class":76},[19,147169,72232],{},[57,147171,147172],{"className":128322,"code":140992,"language":128324,"meta":62,"style":62},[23,147173,147174,147180,147190],{"__ignoreMap":62},[66,147175,147176,147178],{"class":68,"line":69},[66,147177,132170],{"class":3793},[66,147179,17375],{"class":76},[66,147181,147182,147184,147186,147188],{"class":68,"line":80},[66,147183,132802],{"class":102},[66,147185,53221],{"class":76},[66,147187,25539],{"class":102},[66,147189,3135],{"class":76},[66,147191,147192],{"class":68,"line":112},[66,147193,3407],{"class":76},[14,147195,147197],{"id":147196},"_215-swiper-插件使用","21.5 swiper 插件使用",[2982,147199,147200,147203,147206],{},[34,147201,147202],{},"下载需要的css和js文件html页面中 引入相关文件",[34,147204,147205],{},"官网找到类似案例，复制html结构，css样式 js 语法",[34,147207,147208],{},"根据需求定制修改模块",[3304,147210],{"style":128178,"src":147211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,147213,147214],{},"解压后将这两部分放到项目中",[3304,147216],{"style":128178,"src":147217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,147219,147220],{},"这个插件可以帮助我们实现轮播图效果",[19,147222,147223],{},"用法：",[3304,147225],{"style":128178,"src":147226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,147228,147229],{},"找到自己喜欢的",[3304,147231],{"style":128178,"src":147232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,147234,147235],{},"右键，查看网页源代码",[3304,147237],{"style":128178,"src":147238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,147240,147241],{},"复制人家的结构内容",[19,147243,147244],{},"然后去看API文档：",[3304,147246],{"style":128178,"src":147247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,147249,147250],{},"可以看看如何修改样式",[19,147252,147253],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[1903,147255,147256],{},"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":62,"searchDepth":80,"depth":80,"links":147258},[147259,147264,147268,147273,147278],{"id":146059,"depth":80,"text":146060,"children":147260},[147261,147262,147263],{"id":146063,"depth":112,"text":146064},{"id":146073,"depth":112,"text":146074},{"id":146168,"depth":112,"text":146169},{"id":146183,"depth":80,"text":146184,"children":147265},[147266,147267],{"id":146205,"depth":112,"text":146206},{"id":146221,"depth":112,"text":146222},{"id":146296,"depth":80,"text":146297,"children":147269},[147270,147271,147272],{"id":146309,"depth":112,"text":146310},{"id":146533,"depth":112,"text":146534},{"id":146540,"depth":112,"text":146541},{"id":146681,"depth":80,"text":146682,"children":147274},[147275,147276,147277],{"id":146708,"depth":112,"text":146709},{"id":146771,"depth":112,"text":146772},{"id":147116,"depth":112,"text":147117},{"id":147196,"depth":80,"text":147197},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":146051,"description":1926},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":147285,"title":147286,"body":147287,"description":1926,"extension":1927,"meta":147507,"navigation":108,"path":147508,"seo":147509,"stem":147510,"__hash__":147511},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":147288,"toc":147503},[147289,147292,147296,147299,147314,147319,147322,147327,147362,147367,147379,147384,147397,147402,147419,147424,147444,147449,147467,147470,147473,147476,147479,147483,147486,147489,147492,147495,147498,147501],[10,147290,147286],{"id":147291},"_22-代码提交与新型相对单位",[14,147293,147295],{"id":147294},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,147297,147298],{},"法1：",[31,147300,147301,147308,147311],{},[34,147302,147303,147304],{},"登录网站注册：",[2229,147305,147306],{"href":147306,"rel":147307},"https:\u002F\u002Fgitee.com\u002F",[25668],[34,147309,147310],{},"码云创建新的仓库",[34,147312,147313],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[2982,147315,147316],{},[34,147317,147318],{},"在网站根目录右键-- Git Bash Here",[3304,147320],{"style":128178,"src":147321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[2982,147323,147324],{},[34,147325,147326],{},"如果是第一次利用git提交，请配置好全局选项",[57,147328,147330],{"className":119067,"code":147329,"language":119069,"meta":62,"style":62},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[23,147331,147332,147348],{"__ignoreMap":62},[66,147333,147334,147337,147339,147342,147345],{"class":68,"line":69},[66,147335,147336],{"class":3793},"git",[66,147338,121490],{"class":356},[66,147340,147341],{"class":102}," --global",[66,147343,147344],{"class":356}," user.name",[66,147346,147347],{"class":356}," \"你的名字\"\n",[66,147349,147350,147352,147354,147356,147359],{"class":68,"line":80},[66,147351,147336],{"class":3793},[66,147353,121490],{"class":356},[66,147355,147341],{"class":102},[66,147357,147358],{"class":356}," user.email",[66,147360,147361],{"class":356}," \"你的邮箱\"\n",[2982,147363,147364],{},[34,147365,147366],{},"初始化仓库",[57,147368,147370],{"className":119067,"code":147369,"language":119069,"meta":62,"style":62},"git init\n",[23,147371,147372],{"__ignoreMap":62},[66,147373,147374,147376],{"class":68,"line":69},[66,147375,147336],{"class":3793},[66,147377,147378],{"class":356}," init\n",[2982,147380,147381],{},[34,147382,147383],{},"把本地文件放到暂存区",[57,147385,147387],{"className":119067,"code":147386,"language":119069,"meta":62,"style":62},"git add .\n",[23,147388,147389],{"__ignoreMap":62},[66,147390,147391,147393,147395],{"class":68,"line":69},[66,147392,147336],{"class":3793},[66,147394,7022],{"class":356},[66,147396,30541],{"class":356},[2982,147398,147399],{},[34,147400,147401],{},"把本地文件放到本地仓库里面",[57,147403,147405],{"className":119067,"code":147404,"language":119069,"meta":62,"style":62},"git commit -m \"first commit\"\n",[23,147406,147407],{"__ignoreMap":62},[66,147408,147409,147411,147414,147416],{"class":68,"line":69},[66,147410,147336],{"class":3793},[66,147412,147413],{"class":356}," commit",[66,147415,102656],{"class":102},[66,147417,147418],{"class":356}," \"first commit\"\n",[2982,147420,147421],{},[34,147422,147423],{},"链接远程仓库",[57,147425,147427],{"className":119067,"code":147426,"language":119069,"meta":62,"style":62},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[23,147428,147429],{"__ignoreMap":62},[66,147430,147431,147433,147436,147438,147441],{"class":68,"line":69},[66,147432,147336],{"class":3793},[66,147434,147435],{"class":356}," remote",[66,147437,7022],{"class":356},[66,147439,147440],{"class":356}," origin",[66,147442,147443],{"class":356}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[2982,147445,147446],{},[34,147447,147448],{},"把本地仓库的文件推送到远程仓库 push",[57,147450,147452],{"className":119067,"code":147451,"language":119069,"meta":62,"style":62},"git push -u origin master\n",[23,147453,147454],{"__ignoreMap":62},[66,147455,147456,147458,147460,147462,147464],{"class":68,"line":69},[66,147457,147336],{"class":3793},[66,147459,30816],{"class":356},[66,147461,30091],{"class":102},[66,147463,147440],{"class":356},[66,147465,147466],{"class":356}," master\n",[3304,147468],{"style":128178,"src":147469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,147471,147472],{},"上方方法暂未实现，后边学完git后在整",[19,147474,147475],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[3304,147477],{"style":128178,"src":147478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,147480,147482],{"id":147481},"_222-新型相对单位","22.2 新型相对单位",[3304,147484],{"style":128178,"src":147485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[3304,147487],{"style":128178,"src":147488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,147490,147491],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,147493,147494],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[3304,147496],{"style":128178,"src":147497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,147499,147500],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[1903,147502,25761],{},{"title":62,"searchDepth":80,"depth":80,"links":147504},[147505,147506],{"id":147294,"depth":80,"text":147295},{"id":147481,"depth":80,"text":147482},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":147286,"description":1926},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":147513,"title":147514,"body":147515,"description":147519,"extension":1927,"meta":147520,"navigation":108,"path":147521,"seo":147522,"stem":147523,"__hash__":147524},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":147516,"toc":147517},[],{"title":62,"searchDepth":80,"depth":80,"links":147518},[],"自己正经开始学编程的第一门语言！",{"category":94615},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":147514,"description":147519},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":147526,"title":147527,"body":147528,"description":1926,"extension":1927,"meta":148671,"navigation":108,"path":148672,"seo":148673,"stem":148674,"__hash__":148675},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":147529,"toc":148647},[147530,147533,147537,147540,147543,147568,147571,147577,147581,147584,147611,147614,147654,147657,147669,147672,147678,147682,147686,147713,147730,147737,147741,147744,147770,147773,147777,147780,147820,147823,147840,147846,147850,147855,147899,147902,147920,147923,147991,147995,148002,148005,148020,148023,148032,148035,148046,148049,148058,148061,148078,148081,148096,148100,148104,148107,148109,148129,148133,148136,148139,148150,148153,148159,148163,148169,148196,148199,148211,148214,148225,148227,148233,148237,148242,148292,148295,148336,148339,148372,148375,148409,148413,148416,148436,148439,148474,148477,148490,148494,148498,148504,148507,148520,148524,148527,148533,148536,148540,148543,148546,148595,148599,148615,148621,148628,148634,148644],[10,147531,147527],{"id":147532},"_1-python环境与第一个程序",[14,147534,147536],{"id":147535},"_11-什么是python","1.1 什么是Python",[19,147538,147539],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,147541,147542],{},"理解 Python 时抓住三个关键词：",[31,147544,147545,147548,147551],{},[34,147546,147547],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[34,147549,147550],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[34,147552,147553,147554,2204,147557,2204,147560,2204,147563,2204,147565,158],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[23,147555,147556],{},"os",[23,147558,147559],{},"sys",[23,147561,147562],{},"json",[23,147564,59640],{},[23,147566,147567],{},"datetime",[19,147569,147570],{},"Python 程序的运行链路：",[57,147572,147575],{"className":147573,"code":147574,"language":555,"meta":62},[553],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[23,147576,147574],{"__ignoreMap":62},[14,147578,147580],{"id":147579},"_12-python解释器","1.2 Python解释器",[19,147582,147583],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[57,147585,147587],{"className":25625,"code":147586,"language":25627,"meta":62,"style":62},"python --version\npython3 --version\npython\npython3\n",[23,147588,147589,147595,147601,147606],{"__ignoreMap":62},[66,147590,147591,147593],{"class":68,"line":69},[66,147592,61],{"class":3793},[66,147594,28094],{"class":102},[66,147596,147597,147599],{"class":68,"line":80},[66,147598,102653],{"class":3793},[66,147600,28094],{"class":102},[66,147602,147603],{"class":68,"line":112},[66,147604,147605],{"class":3793},"python\n",[66,147607,147608],{"class":68,"line":129},[66,147609,147610],{"class":3793},"python3\n",[19,147612,147613],{},"进入交互模式后，可以直接输入表达式：",[57,147615,147617],{"className":59,"code":147616,"language":61,"meta":62,"style":62},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[23,147618,147619,147630,147635,147649],{"__ignoreMap":62},[66,147620,147621,147624,147626,147628],{"class":68,"line":69},[66,147622,147623],{"class":72},">>>",[66,147625,1187],{"class":102},[66,147627,47352],{"class":72},[66,147629,49507],{"class":102},[66,147631,147632],{"class":68,"line":80},[66,147633,147634],{"class":102},"3\n",[66,147636,147637,147639,147642,147644,147647],{"class":68,"line":112},[66,147638,147623],{"class":72},[66,147640,147641],{"class":102}," print",[66,147643,348],{"class":76},[66,147645,147646],{"class":356},"\"hello python\"",[66,147648,313],{"class":76},[66,147650,147651],{"class":68,"line":129},[66,147652,147653],{"class":76},"hello python\n",[19,147655,147656],{},"退出交互模式：",[57,147658,147660],{"className":59,"code":147659,"language":61,"meta":62,"style":62},"exit()\n",[23,147661,147662],{"__ignoreMap":62},[66,147663,147664,147667],{"class":68,"line":69},[66,147665,147666],{"class":102},"exit",[66,147668,1253],{"class":76},[19,147670,147671],{},"或使用快捷键：",[57,147673,147676],{"className":147674,"code":147675,"language":555,"meta":62},[553],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[23,147677,147675],{"__ignoreMap":62},[14,147679,147681],{"id":147680},"_13-安装python","1.3 安装Python",[484,147683,147685],{"id":147684},"_131-windows安装","1.3.1 Windows安装",[31,147687,147688,147695,147698,147704,147710],{},[34,147689,147690,147691],{},"打开 Python 官网：",[2229,147692,147693],{"href":147693,"rel":147694},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[25668],[34,147696,147697],{},"下载 Windows Installer。",[34,147699,147700,147701,158],{},"安装时勾选 ",[23,147702,147703],{},"Add Python to PATH",[34,147705,147706,147707,158],{},"点击 ",[23,147708,147709],{},"Install Now",[34,147711,147712],{},"安装完成后打开命令提示符验证：",[57,147714,147716],{"className":25625,"code":147715,"language":25627,"meta":62,"style":62},"python --version\npip --version\n",[23,147717,147718,147724],{"__ignoreMap":62},[66,147719,147720,147722],{"class":68,"line":69},[66,147721,61],{"class":3793},[66,147723,28094],{"class":102},[66,147725,147726,147728],{"class":68,"line":80},[66,147727,25634],{"class":3793},[66,147729,28094],{"class":102},[19,147731,147732,147733,147736],{},"如果提示 ",[23,147734,147735],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[484,147738,147740],{"id":147739},"_132-macos安装","1.3.2 macOS安装",[19,147742,147743],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[57,147745,147747],{"className":25625,"code":147746,"language":25627,"meta":62,"style":62},"brew install python\npython3 --version\npip3 --version\n",[23,147748,147749,147758,147764],{"__ignoreMap":62},[66,147750,147751,147754,147756],{"class":68,"line":69},[66,147752,147753],{"class":3793},"brew",[66,147755,25637],{"class":356},[66,147757,126088],{"class":356},[66,147759,147760,147762],{"class":68,"line":80},[66,147761,102653],{"class":3793},[66,147763,28094],{"class":102},[66,147765,147766,147768],{"class":68,"line":112},[66,147767,121471],{"class":3793},[66,147769,28094],{"class":102},[19,147771,147772],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[484,147774,147776],{"id":147775},"_133-linux安装","1.3.3 Linux安装",[19,147778,147779],{},"Ubuntu\u002FDebian：",[57,147781,147783],{"className":25625,"code":147782,"language":25627,"meta":62,"style":62},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[23,147784,147785,147793,147808,147814],{"__ignoreMap":62},[66,147786,147787,147789,147791],{"class":68,"line":69},[66,147788,26380],{"class":3793},[66,147790,119088],{"class":356},[66,147792,28043],{"class":356},[66,147794,147795,147797,147799,147801,147803,147805],{"class":68,"line":80},[66,147796,26380],{"class":3793},[66,147798,119088],{"class":356},[66,147800,25637],{"class":356},[66,147802,106176],{"class":356},[66,147804,102572],{"class":356},[66,147806,147807],{"class":356}," python3-venv\n",[66,147809,147810,147812],{"class":68,"line":112},[66,147811,102653],{"class":3793},[66,147813,28094],{"class":102},[66,147815,147816,147818],{"class":68,"line":129},[66,147817,121471],{"class":3793},[66,147819,28094],{"class":102},[19,147821,147822],{},"Fedora：",[57,147824,147826],{"className":25625,"code":147825,"language":25627,"meta":62,"style":62},"sudo dnf install python3 python3-pip\n",[23,147827,147828],{"__ignoreMap":62},[66,147829,147830,147832,147834,147836,147838],{"class":68,"line":69},[66,147831,26380],{"class":3793},[66,147833,28116],{"class":356},[66,147835,25637],{"class":356},[66,147837,106176],{"class":356},[66,147839,121536],{"class":356},[19,147841,147842,147843,147845],{},"Linux 上通常使用 ",[23,147844,102653],{}," 命令，避免和系统旧版本 Python 冲突。",[14,147847,147849],{"id":147848},"_14-pip包管理器","1.4 pip包管理器",[19,147851,147852,147854],{},[23,147853,25634],{}," 用来安装第三方库。",[57,147856,147858],{"className":25625,"code":147857,"language":25627,"meta":62,"style":62},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[23,147859,147860,147869,147878,147886,147892],{"__ignoreMap":62},[66,147861,147862,147864,147866],{"class":68,"line":69},[66,147863,25634],{"class":3793},[66,147865,25637],{"class":356},[66,147867,147868],{"class":356}," requests\n",[66,147870,147871,147873,147876],{"class":68,"line":80},[66,147872,25634],{"class":3793},[66,147874,147875],{"class":356}," uninstall",[66,147877,147868],{"class":356},[66,147879,147880,147882,147884],{"class":68,"line":112},[66,147881,25634],{"class":3793},[66,147883,119345],{"class":356},[66,147885,147868],{"class":356},[66,147887,147888,147890],{"class":68,"line":129},[66,147889,25634],{"class":3793},[66,147891,120726],{"class":356},[66,147893,147894,147896],{"class":68,"line":138},[66,147895,25634],{"class":3793},[66,147897,147898],{"class":356}," freeze\n",[19,147900,147901],{},"国内网络较慢时可以临时使用镜像：",[57,147903,147905],{"className":25625,"code":147904,"language":25627,"meta":62,"style":62},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[23,147906,147907],{"__ignoreMap":62},[66,147908,147909,147911,147913,147916,147918],{"class":68,"line":69},[66,147910,25634],{"class":3793},[66,147912,25637],{"class":356},[66,147914,147915],{"class":356}," requests",[66,147917,28231],{"class":102},[66,147919,121499],{"class":356},[19,147921,147922],{},"常见第三方库：",[2129,147924,147925,147934],{},[2132,147926,147927],{},[2135,147928,147929,147932],{},[2138,147930,147931],{},"库",[2138,147933,104469],{},[2176,147935,147936,147944,147951,147959,147967,147975,147983],{},[2135,147937,147938,147941],{},[2181,147939,147940],{},"requests",[2181,147942,147943],{},"网络请求",[2135,147945,147946,147948],{},[2181,147947,102400],{},[2181,147949,147950],{},"数值计算",[2135,147952,147953,147956],{},[2181,147954,147955],{},"pandas",[2181,147957,147958],{},"表格数据处理",[2135,147960,147961,147964],{},[2181,147962,147963],{},"matplotlib",[2181,147965,147966],{},"绘图",[2135,147968,147969,147972],{},[2181,147970,147971],{},"pyecharts",[2181,147973,147974],{},"ECharts 图表",[2135,147976,147977,147980],{},[2181,147978,147979],{},"flask",[2181,147981,147982],{},"Web 后端",[2135,147984,147985,147988],{},[2181,147986,147987],{},"pytest",[2181,147989,147990],{},"自动化测试",[14,147992,147994],{"id":147993},"_15-虚拟环境","1.5 虚拟环境",[19,147996,147997,147998,148001],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[23,147999,148000],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,148003,148004],{},"创建虚拟环境：",[57,148006,148008],{"className":25625,"code":148007,"language":25627,"meta":62,"style":62},"python -m venv .venv\n",[23,148009,148010],{"__ignoreMap":62},[66,148011,148012,148014,148016,148018],{"class":68,"line":69},[66,148013,61],{"class":3793},[66,148015,102656],{"class":102},[66,148017,102659],{"class":356},[66,148019,102662],{"class":356},[19,148021,148022],{},"Windows 激活：",[57,148024,148026],{"className":25625,"code":148025,"language":25627,"meta":62,"style":62},".venv\\Scripts\\activate\n",[23,148027,148028],{"__ignoreMap":62},[66,148029,148030],{"class":68,"line":69},[66,148031,148025],{"class":3793},[19,148033,148034],{},"macOS\u002FLinux 激活：",[57,148036,148038],{"className":25625,"code":148037,"language":25627,"meta":62,"style":62},"source .venv\u002Fbin\u002Factivate\n",[23,148039,148040],{"__ignoreMap":62},[66,148041,148042,148044],{"class":68,"line":69},[66,148043,102667],{"class":102},[66,148045,102670],{"class":356},[19,148047,148048],{},"退出虚拟环境：",[57,148050,148052],{"className":25625,"code":148051,"language":25627,"meta":62,"style":62},"deactivate\n",[23,148053,148054],{"__ignoreMap":62},[66,148055,148056],{"class":68,"line":69},[66,148057,148051],{"class":3793},[19,148059,148060],{},"保存依赖：",[57,148062,148064],{"className":25625,"code":148063,"language":25627,"meta":62,"style":62},"pip freeze > requirements.txt\n",[23,148065,148066],{"__ignoreMap":62},[66,148067,148068,148070,148073,148075],{"class":68,"line":69},[66,148069,25634],{"class":3793},[66,148071,148072],{"class":356}," freeze",[66,148074,28023],{"class":72},[66,148076,148077],{"class":356}," requirements.txt\n",[19,148079,148080],{},"安装依赖：",[57,148082,148084],{"className":25625,"code":148083,"language":25627,"meta":62,"style":62},"pip install -r requirements.txt\n",[23,148085,148086],{"__ignoreMap":62},[66,148087,148088,148090,148092,148094],{"class":68,"line":69},[66,148089,25634],{"class":3793},[66,148091,25637],{"class":356},[66,148093,121410],{"class":102},[66,148095,148077],{"class":356},[14,148097,148099],{"id":148098},"_16-开发工具","1.6 开发工具",[484,148101,148103],{"id":148102},"_161-pycharm","1.6.1 PyCharm",[19,148105,148106],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,148108,123833],{},[31,148110,148111,148114,148117,148123,148126],{},[34,148112,148113],{},"New Project：创建项目。",[34,148115,148116],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[34,148118,148119,148120,127753],{},"New Python File：创建 ",[23,148121,148122],{},".py",[34,148124,148125],{},"Run：运行当前文件。",[34,148127,148128],{},"Debug：断点调试。",[484,148130,148132],{"id":148131},"_162-vs-code","1.6.2 VS Code",[19,148134,148135],{},"VS Code 轻量，适合后续多语言开发。",[19,148137,148138],{},"建议安装插件：",[31,148140,148141,148144,148147],{},[34,148142,148143],{},"Python。",[34,148145,148146],{},"Pylance。",[34,148148,148149],{},"Jupyter。",[19,148151,148152],{},"选择解释器：",[57,148154,148157],{"className":148155,"code":148156,"language":555,"meta":62},[553],"Ctrl + Shift + P -> Python: Select Interpreter\n",[23,148158,148156],{"__ignoreMap":62},[14,148160,148162],{"id":148161},"_17-第一个python程序","1.7 第一个Python程序",[19,148164,148165,148166,807],{},"创建文件 ",[23,148167,148168],{},"hello.py",[57,148170,148172],{"className":59,"code":148171,"language":61,"meta":62,"style":62},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[23,148173,148174,148185],{"__ignoreMap":62},[66,148175,148176,148178,148180,148183],{"class":68,"line":69},[66,148177,244],{"class":102},[66,148179,348],{"class":76},[66,148181,148182],{"class":356},"\"Hello World\"",[66,148184,313],{"class":76},[66,148186,148187,148189,148191,148194],{"class":68,"line":80},[66,148188,244],{"class":102},[66,148190,348],{"class":76},[66,148192,148193],{"class":356},"\"你好，Python\"",[66,148195,313],{"class":76},[19,148197,148198],{},"在终端运行：",[57,148200,148202],{"className":25625,"code":148201,"language":25627,"meta":62,"style":62},"python hello.py\n",[23,148203,148204],{"__ignoreMap":62},[66,148205,148206,148208],{"class":68,"line":69},[66,148207,61],{"class":3793},[66,148209,148210],{"class":356}," hello.py\n",[19,148212,148213],{},"或：",[57,148215,148217],{"className":25625,"code":148216,"language":25627,"meta":62,"style":62},"python3 hello.py\n",[23,148218,148219],{"__ignoreMap":62},[66,148220,148221,148223],{"class":68,"line":69},[66,148222,102653],{"class":3793},[66,148224,148210],{"class":356},[19,148226,549],{},[57,148228,148231],{"className":148229,"code":148230,"language":555,"meta":62},[553],"Hello World\n你好，Python\n",[23,148232,148230],{"__ignoreMap":62},[14,148234,148236],{"id":148235},"_18-print函数","1.8 print函数",[19,148238,148239,148241],{},[23,148240,25],{}," 用来输出内容。",[57,148243,148245],{"className":59,"code":148244,"language":61,"meta":62,"style":62},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[23,148246,148247,148257,148267,148277],{"__ignoreMap":62},[66,148248,148249,148251,148253,148255],{"class":68,"line":69},[66,148250,244],{"class":102},[66,148252,348],{"class":76},[66,148254,7655],{"class":356},[66,148256,313],{"class":76},[66,148258,148259,148261,148263,148265],{"class":68,"line":80},[66,148260,244],{"class":102},[66,148262,348],{"class":76},[66,148264,310],{"class":102},[66,148266,313],{"class":76},[66,148268,148269,148271,148273,148275],{"class":68,"line":112},[66,148270,244],{"class":102},[66,148272,348],{"class":76},[66,148274,2046],{"class":102},[66,148276,313],{"class":76},[66,148278,148279,148281,148283,148286,148288,148290],{"class":68,"line":129},[66,148280,244],{"class":102},[66,148282,348],{"class":76},[66,148284,148285],{"class":356},"\"年龄:\"",[66,148287,307],{"class":76},[66,148289,2629],{"class":102},[66,148291,313],{"class":76},[19,148293,148294],{},"多个内容用逗号隔开，默认中间加空格：",[57,148296,148298],{"className":59,"code":148297,"language":61,"meta":62,"style":62},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[23,148299,148300,148309,148319],{"__ignoreMap":62},[66,148301,148302,148304,148306],{"class":68,"line":69},[66,148303,642],{"class":76},[66,148305,99],{"class":72},[66,148307,148308],{"class":356}," \"张三\"\n",[66,148310,148311,148314,148316],{"class":68,"line":80},[66,148312,148313],{"class":76},"age ",[66,148315,99],{"class":72},[66,148317,148318],{"class":102}," 18\n",[66,148320,148321,148323,148325,148328,148331,148333],{"class":68,"line":112},[66,148322,244],{"class":102},[66,148324,348],{"class":76},[66,148326,148327],{"class":356},"\"姓名:\"",[66,148329,148330],{"class":76},", name, ",[66,148332,148285],{"class":356},[66,148334,148335],{"class":76},", age)\n",[19,148337,148338],{},"修改分隔符：",[57,148340,148342],{"className":59,"code":148341,"language":61,"meta":62,"style":62},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[23,148343,148344],{"__ignoreMap":62},[66,148345,148346,148348,148350,148353,148355,148357,148359,148361,148363,148366,148368,148370],{"class":68,"line":69},[66,148347,244],{"class":102},[66,148349,348],{"class":76},[66,148351,148352],{"class":356},"\"2024\"",[66,148354,307],{"class":76},[66,148356,56097],{"class":356},[66,148358,307],{"class":76},[66,148360,56097],{"class":356},[66,148362,307],{"class":76},[66,148364,148365],{"class":1234},"sep",[66,148367,99],{"class":72},[66,148369,34273],{"class":356},[66,148371,313],{"class":76},[19,148373,148374],{},"修改结尾符：",[57,148376,148378],{"className":59,"code":148377,"language":61,"meta":62,"style":62},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[23,148379,148380,148398],{"__ignoreMap":62},[66,148381,148382,148384,148386,148388,148390,148392,148394,148396],{"class":68,"line":69},[66,148383,244],{"class":102},[66,148385,348],{"class":76},[66,148387,7655],{"class":356},[66,148389,307],{"class":76},[66,148391,1235],{"class":1234},[66,148393,99],{"class":72},[66,148395,6175],{"class":356},[66,148397,313],{"class":76},[66,148399,148400,148402,148404,148407],{"class":68,"line":80},[66,148401,244],{"class":102},[66,148403,348],{"class":76},[66,148405,148406],{"class":356},"\"python\"",[66,148408,313],{"class":76},[14,148410,148412],{"id":148411},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,148414,148415],{},"交互运行适合临时验证：",[57,148417,148419],{"className":59,"code":148418,"language":61,"meta":62,"style":62},">>> 10 * 3\n30\n",[23,148420,148421,148431],{"__ignoreMap":62},[66,148422,148423,148425,148427,148429],{"class":68,"line":69},[66,148424,147623],{"class":72},[66,148426,1335],{"class":102},[66,148428,8329],{"class":72},[66,148430,121807],{"class":102},[66,148432,148433],{"class":68,"line":80},[66,148434,148435],{"class":102},"30\n",[19,148437,148438],{},"脚本运行适合保存程序：",[57,148440,148442],{"className":59,"code":148441,"language":61,"meta":62,"style":62},"price = 8\ncount = 5\nprint(price * count)\n",[23,148443,148444,148454,148462],{"__ignoreMap":62},[66,148445,148446,148449,148451],{"class":68,"line":69},[66,148447,148448],{"class":76},"price ",[66,148450,99],{"class":72},[66,148452,148453],{"class":102}," 8\n",[66,148455,148456,148458,148460],{"class":68,"line":80},[66,148457,318],{"class":76},[66,148459,99],{"class":72},[66,148461,56208],{"class":102},[66,148463,148464,148466,148469,148471],{"class":68,"line":112},[66,148465,244],{"class":102},[66,148467,148468],{"class":76},"(price ",[66,148470,1208],{"class":72},[66,148472,148473],{"class":76}," count)\n",[19,148475,148476],{},"实际学习中推荐：",[31,148478,148479,148482,148487],{},[34,148480,148481],{},"临时试一个语法，用交互模式。",[34,148483,148484,148485,127753],{},"写完整练习，用 ",[23,148486,148122],{},[34,148488,148489],{},"写项目，用独立目录和虚拟环境。",[14,148491,148493],{"id":148492},"_110-常见错误","1.10 常见错误",[484,148495,148497],{"id":148496},"_1101-命令找不到","1.10.1 命令找不到",[57,148499,148502],{"className":148500,"code":148501,"language":555,"meta":62},[553],"python: command not found\n",[23,148503,148501],{"__ignoreMap":62},[19,148505,148506],{},"原因：",[31,148508,148509,148512,148515],{},[34,148510,148511],{},"没安装 Python。",[34,148513,148514],{},"PATH 没配置。",[34,148516,148517,148518,158],{},"Linux\u002FmacOS 应该使用 ",[23,148519,102653],{},[484,148521,148523],{"id":148522},"_1102-文件名冲突","1.10.2 文件名冲突",[19,148525,148526],{},"不要把文件命名为：",[57,148528,148531],{"className":148529,"code":148530,"language":555,"meta":62},[553],"random.py\njson.py\ntime.py\nrequests.py\n",[23,148532,148530],{"__ignoreMap":62},[19,148534,148535],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[484,148537,148539],{"id":148538},"_1103-中文乱码","1.10.3 中文乱码",[19,148541,148542],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,148544,148545],{},"如果读写文件出现乱码，要明确指定编码：",[57,148547,148549],{"className":59,"code":148548,"language":61,"meta":62,"style":62},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[23,148550,148551,148585],{"__ignoreMap":62},[66,148552,148553,148555,148558,148560,148563,148565,148568,148570,148573,148575,148578,148580,148582],{"class":68,"line":69},[66,148554,109606],{"class":72},[66,148556,148557],{"class":102}," open",[66,148559,348],{"class":76},[66,148561,148562],{"class":356},"\"data.txt\"",[66,148564,307],{"class":76},[66,148566,148567],{"class":356},"\"r\"",[66,148569,307],{"class":76},[66,148571,148572],{"class":1234},"encoding",[66,148574,99],{"class":72},[66,148576,148577],{"class":356},"\"utf-8\"",[66,148579,15519],{"class":76},[66,148581,33176],{"class":72},[66,148583,148584],{"class":76}," f:\n",[66,148586,148587,148590,148592],{"class":68,"line":80},[66,148588,148589],{"class":76},"    content ",[66,148591,99],{"class":72},[66,148593,148594],{"class":76}," f.read()\n",[14,148596,148598],{"id":148597},"_111-本章练习","1.11 本章练习",[31,148600,148601,148604,148610],{},[34,148602,148603],{},"安装 Python，并在终端输出版本号。",[34,148605,148606,148607,148609],{},"新建 ",[23,148608,148168],{},"，输出自己的姓名、年龄、学习目标。",[34,148611,106139,148612,148614],{},[23,148613,25],{}," 输出下面格式：",[57,148616,148619],{"className":148617,"code":148618,"language":555,"meta":62},[553],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[23,148620,148618],{"__ignoreMap":62},[31,148622,148623],{"start":129},[34,148624,106139,148625,148627],{},[23,148626,148365],{}," 输出日期：",[57,148629,148632],{"className":148630,"code":148631,"language":555,"meta":62},[553],"2024-10-10\n",[23,148633,148631],{"__ignoreMap":62},[31,148635,148636],{"start":138},[34,148637,106139,148638,148640,148641,148643],{},[23,148639,1235],{}," 让两次 ",[23,148642,25],{}," 输出在同一行。",[1903,148645,148646],{},"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":62,"searchDepth":80,"depth":80,"links":148648},[148649,148650,148651,148656,148657,148658,148662,148663,148664,148665,148670],{"id":147535,"depth":80,"text":147536},{"id":147579,"depth":80,"text":147580},{"id":147680,"depth":80,"text":147681,"children":148652},[148653,148654,148655],{"id":147684,"depth":112,"text":147685},{"id":147739,"depth":112,"text":147740},{"id":147775,"depth":112,"text":147776},{"id":147848,"depth":80,"text":147849},{"id":147993,"depth":80,"text":147994},{"id":148098,"depth":80,"text":148099,"children":148659},[148660,148661],{"id":148102,"depth":112,"text":148103},{"id":148131,"depth":112,"text":148132},{"id":148161,"depth":80,"text":148162},{"id":148235,"depth":80,"text":148236},{"id":148411,"depth":80,"text":148412},{"id":148492,"depth":80,"text":148493,"children":148666},[148667,148668,148669],{"id":148496,"depth":112,"text":148497},{"id":148522,"depth":112,"text":148523},{"id":148538,"depth":112,"text":148539},{"id":148597,"depth":80,"text":148598},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":147527,"description":1926},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":148677,"title":148678,"body":148679,"description":1926,"extension":1927,"meta":151082,"navigation":108,"path":151083,"seo":151084,"stem":151085,"__hash__":151086},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":148680,"toc":151067},[148681,148684,148688,148691,148694,148711,148714,148756,148759,148763,148766,148769,148806,148809,148843,148846,148938,148942,148956,148959,148986,148989,148993,149096,149103,149106,149123,149127,149134,149323,149326,149399,149403,149406,149490,149493,149525,149529,149733,149736,149740,149746,149848,149851,150107,150111,150114,150117,150131,150133,150318,150322,150684,150690,150694,150697,150821,150824,151003,151006,151010,151043,151047,151064],[10,148682,148678],{"id":148683},"_10-json与pyecharts折线图",[14,148685,148687],{"id":148686},"_101-数据可视化","10.1 数据可视化",[19,148689,148690],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,148692,148693],{},"常见图表：",[31,148695,148696,148699,148702,148705,148708],{},[34,148697,148698],{},"折线图：看趋势。",[34,148700,148701],{},"柱状图：看分类对比。",[34,148703,148704],{},"饼图：看占比。",[34,148706,148707],{},"地图：看地域分布。",[34,148709,148710],{},"散点图：看两个变量之间的关系。",[19,148712,148713],{},"Python 可视化常用库：",[2129,148715,148716,148724],{},[2132,148717,148718],{},[2135,148719,148720,148722],{},[2138,148721,147931],{},[2138,148723,25543],{},[2176,148725,148726,148733,148741,148748],{},[2135,148727,148728,148730],{},[2181,148729,147963],{},[2181,148731,148732],{},"基础、经典、可定制",[2135,148734,148735,148738],{},[2181,148736,148737],{},"seaborn",[2181,148739,148740],{},"统计图表更美观",[2135,148742,148743,148745],{},[2181,148744,147971],{},[2181,148746,148747],{},"生成交互式网页图表",[2135,148749,148750,148753],{},[2181,148751,148752],{},"plotly",[2181,148754,148755],{},"交互图表能力强",[19,148757,148758],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,148760,148762],{"id":148761},"_102-json回顾","10.2 JSON回顾",[19,148764,148765],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,148767,148768],{},"Python 字典：",[57,148770,148772],{"className":59,"code":148771,"language":61,"meta":62,"style":62},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[23,148773,148774,148782,148793,148802],{"__ignoreMap":62},[66,148775,148776,148778,148780],{"class":68,"line":69},[66,148777,103431],{"class":76},[66,148779,99],{"class":72},[66,148781,17375],{"class":76},[66,148783,148784,148787,148789,148791],{"class":68,"line":80},[66,148785,148786],{"class":356},"    \"name\"",[66,148788,53221],{"class":76},[66,148790,71048],{"class":356},[66,148792,33259],{"class":76},[66,148794,148795,148798,148800],{"class":68,"line":112},[66,148796,148797],{"class":356},"    \"value\"",[66,148799,53221],{"class":76},[66,148801,99233],{"class":102},[66,148803,148804],{"class":68,"line":129},[66,148805,3407],{"class":76},[19,148807,148808],{},"JSON 字符串：",[57,148810,148813],{"className":148811,"code":148812,"language":147562,"meta":62,"style":62},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[23,148814,148815,148819,148830,148839],{"__ignoreMap":62},[66,148816,148817],{"class":68,"line":69},[66,148818,3388],{"class":76},[66,148820,148821,148824,148826,148828],{"class":68,"line":80},[66,148822,148823],{"class":102},"  \"name\"",[66,148825,53221],{"class":76},[66,148827,71048],{"class":356},[66,148829,33259],{"class":76},[66,148831,148832,148835,148837],{"class":68,"line":112},[66,148833,148834],{"class":102},"  \"value\"",[66,148836,53221],{"class":76},[66,148838,99233],{"class":102},[66,148840,148841],{"class":68,"line":129},[66,148842,3407],{"class":76},[19,148844,148845],{},"Python 与 JSON 的转换：",[57,148847,148849],{"className":59,"code":148848,"language":61,"meta":62,"style":62},"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",[23,148850,148851,148858,148862,148887,148891,148910,148917,148921,148931],{"__ignoreMap":62},[66,148852,148853,148855],{"class":68,"line":69},[66,148854,284],{"class":72},[66,148856,148857],{"class":76}," json\n",[66,148859,148860],{"class":68,"line":80},[66,148861,109],{"emptyLinePlaceholder":108},[66,148863,148864,148866,148868,148870,148872,148874,148876,148878,148881,148883,148885],{"class":68,"line":112},[66,148865,103431],{"class":76},[66,148867,99],{"class":72},[66,148869,6264],{"class":76},[66,148871,64458],{"class":356},[66,148873,53221],{"class":76},[66,148875,71048],{"class":356},[66,148877,307],{"class":76},[66,148879,148880],{"class":356},"\"value\"",[66,148882,53221],{"class":76},[66,148884,310],{"class":102},[66,148886,3407],{"class":76},[66,148888,148889],{"class":68,"line":129},[66,148890,109],{"emptyLinePlaceholder":108},[66,148892,148893,148896,148898,148901,148904,148906,148908],{"class":68,"line":138},[66,148894,148895],{"class":76},"json_text ",[66,148897,99],{"class":72},[66,148899,148900],{"class":76}," json.dumps(data, ",[66,148902,148903],{"class":1234},"ensure_ascii",[66,148905,99],{"class":72},[66,148907,35775],{"class":102},[66,148909,313],{"class":76},[66,148911,148912,148914],{"class":68,"line":227},[66,148913,244],{"class":102},[66,148915,148916],{"class":76},"(json_text)\n",[66,148918,148919],{"class":68,"line":236},[66,148920,109],{"emptyLinePlaceholder":108},[66,148922,148923,148926,148928],{"class":68,"line":241},[66,148924,148925],{"class":76},"new_data ",[66,148927,99],{"class":72},[66,148929,148930],{"class":76}," json.loads(json_text)\n",[66,148932,148933,148935],{"class":68,"line":372},[66,148934,244],{"class":102},[66,148936,148937],{"class":76},"(new_data)\n",[14,148939,148941],{"id":148940},"_103-安装pyecharts","10.3 安装pyecharts",[57,148943,148945],{"className":25625,"code":148944,"language":25627,"meta":62,"style":62},"pip install pyecharts\n",[23,148946,148947],{"__ignoreMap":62},[66,148948,148949,148951,148953],{"class":68,"line":69},[66,148950,25634],{"class":3793},[66,148952,25637],{"class":356},[66,148954,148955],{"class":356}," pyecharts\n",[19,148957,148958],{},"验证：",[57,148960,148962],{"className":59,"code":148961,"language":61,"meta":62,"style":62},"import pyecharts\n\nprint(pyecharts.__version__)\n",[23,148963,148964,148970,148974],{"__ignoreMap":62},[66,148965,148966,148968],{"class":68,"line":69},[66,148967,284],{"class":72},[66,148969,148955],{"class":76},[66,148971,148972],{"class":68,"line":80},[66,148973,109],{"emptyLinePlaceholder":108},[66,148975,148976,148978,148981,148984],{"class":68,"line":112},[66,148977,244],{"class":102},[66,148979,148980],{"class":76},"(pyecharts.",[66,148982,148983],{"class":102},"__version__",[66,148985,313],{"class":76},[19,148987,148988],{},"如果使用虚拟环境，要先激活环境再安装。",[14,148990,148992],{"id":148991},"_104-第一个折线图","10.4 第一个折线图",[57,148994,148996],{"className":59,"code":148995,"language":61,"meta":62,"style":62},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[23,148997,148998,149010,149014,149024,149054,149086],{"__ignoreMap":62},[66,148999,149000,149002,149005,149007],{"class":68,"line":69},[66,149001,32532],{"class":72},[66,149003,149004],{"class":76}," pyecharts.charts ",[66,149006,284],{"class":72},[66,149008,149009],{"class":76}," Line\n",[66,149011,149012],{"class":68,"line":80},[66,149013,109],{"emptyLinePlaceholder":108},[66,149015,149016,149019,149021],{"class":68,"line":112},[66,149017,149018],{"class":76},"line ",[66,149020,99],{"class":72},[66,149022,149023],{"class":76}," Line()\n",[66,149025,149026,149029,149032,149034,149037,149039,149042,149044,149047,149049,149052],{"class":68,"line":129},[66,149027,149028],{"class":76},"line.add_xaxis([",[66,149030,149031],{"class":356},"\"周一\"",[66,149033,307],{"class":76},[66,149035,149036],{"class":356},"\"周二\"",[66,149038,307],{"class":76},[66,149040,149041],{"class":356},"\"周三\"",[66,149043,307],{"class":76},[66,149045,149046],{"class":356},"\"周四\"",[66,149048,307],{"class":76},[66,149050,149051],{"class":356},"\"周五\"",[66,149053,6473],{"class":76},[66,149055,149056,149059,149062,149064,149066,149068,149070,149072,149074,149076,149079,149081,149084],{"class":68,"line":138},[66,149057,149058],{"class":76},"line.add_yaxis(",[66,149060,149061],{"class":356},"\"销售额\"",[66,149063,79297],{"class":76},[66,149065,310],{"class":102},[66,149067,307],{"class":76},[66,149069,2796],{"class":102},[66,149071,307],{"class":76},[66,149073,2841],{"class":102},[66,149075,307],{"class":76},[66,149077,149078],{"class":102},"150",[66,149080,307],{"class":76},[66,149082,149083],{"class":102},"180",[66,149085,6473],{"class":76},[66,149087,149088,149091,149094],{"class":68,"line":227},[66,149089,149090],{"class":76},"line.render(",[66,149092,149093],{"class":356},"\"line.html\"",[66,149095,313],{"class":76},[19,149097,149098,149099,149102],{},"运行后会生成 ",[23,149100,149101],{},"line.html","，用浏览器打开即可看到图表。",[19,149104,149105],{},"核心步骤：",[31,149107,149108,149111,149114,149117,149120],{},[34,149109,149110],{},"导入图表类。",[34,149112,149113],{},"创建图表对象。",[34,149115,149116],{},"添加 x 轴数据。",[34,149118,149119],{},"添加 y 轴数据。",[34,149121,149122],{},"渲染为 HTML。",[14,149124,149126],{"id":149125},"_105-全局配置","10.5 全局配置",[19,149128,149129,149130,149133],{},"常用配置在 ",[23,149131,149132],{},"pyecharts.options"," 中。",[57,149135,149137],{"className":59,"code":149136,"language":61,"meta":62,"style":62},"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",[23,149138,149139,149156,149166,149170,149178,149202,149230,149235,149254,149273,149291,149311,149315],{"__ignoreMap":62},[66,149140,149141,149143,149146,149148,149151,149153],{"class":68,"line":69},[66,149142,32532],{"class":72},[66,149144,149145],{"class":76}," pyecharts ",[66,149147,284],{"class":72},[66,149149,149150],{"class":76}," options ",[66,149152,33176],{"class":72},[66,149154,149155],{"class":76}," opts\n",[66,149157,149158,149160,149162,149164],{"class":68,"line":80},[66,149159,32532],{"class":72},[66,149161,149004],{"class":76},[66,149163,284],{"class":72},[66,149165,149009],{"class":76},[66,149167,149168],{"class":68,"line":112},[66,149169,109],{"emptyLinePlaceholder":108},[66,149171,149172,149174,149176],{"class":68,"line":129},[66,149173,149018],{"class":76},[66,149175,99],{"class":72},[66,149177,149023],{"class":76},[66,149179,149180,149182,149184,149186,149188,149190,149192,149194,149196,149198,149200],{"class":68,"line":138},[66,149181,149028],{"class":76},[66,149183,149031],{"class":356},[66,149185,307],{"class":76},[66,149187,149036],{"class":356},[66,149189,307],{"class":76},[66,149191,149041],{"class":356},[66,149193,307],{"class":76},[66,149195,149046],{"class":356},[66,149197,307],{"class":76},[66,149199,149051],{"class":356},[66,149201,6473],{"class":76},[66,149203,149204,149206,149208,149210,149212,149214,149216,149218,149220,149222,149224,149226,149228],{"class":68,"line":227},[66,149205,149058],{"class":76},[66,149207,149061],{"class":356},[66,149209,79297],{"class":76},[66,149211,310],{"class":102},[66,149213,307],{"class":76},[66,149215,2796],{"class":102},[66,149217,307],{"class":76},[66,149219,2841],{"class":102},[66,149221,307],{"class":76},[66,149223,149078],{"class":102},[66,149225,307],{"class":76},[66,149227,149083],{"class":102},[66,149229,6473],{"class":76},[66,149231,149232],{"class":68,"line":236},[66,149233,149234],{"class":76},"line.set_global_opts(\n",[66,149236,149237,149240,149242,149245,149247,149249,149252],{"class":68,"line":241},[66,149238,149239],{"class":1234},"    title_opts",[66,149241,99],{"class":72},[66,149243,149244],{"class":76},"opts.TitleOpts(",[66,149246,53191],{"class":1234},[66,149248,99],{"class":72},[66,149250,149251],{"class":356},"\"一周销售额\"",[66,149253,39835],{"class":76},[66,149255,149256,149259,149261,149264,149266,149268,149271],{"class":68,"line":372},[66,149257,149258],{"class":1234},"    xaxis_opts",[66,149260,99],{"class":72},[66,149262,149263],{"class":76},"opts.AxisOpts(",[66,149265,81588],{"class":1234},[66,149267,99],{"class":72},[66,149269,149270],{"class":356},"\"日期\"",[66,149272,39835],{"class":76},[66,149274,149275,149278,149280,149282,149284,149286,149289],{"class":68,"line":377},[66,149276,149277],{"class":1234},"    yaxis_opts",[66,149279,99],{"class":72},[66,149281,149263],{"class":76},[66,149283,81588],{"class":1234},[66,149285,99],{"class":72},[66,149287,149288],{"class":356},"\"金额\"",[66,149290,39835],{"class":76},[66,149292,149293,149296,149298,149301,149304,149306,149309],{"class":68,"line":392},[66,149294,149295],{"class":1234},"    tooltip_opts",[66,149297,99],{"class":72},[66,149299,149300],{"class":76},"opts.TooltipOpts(",[66,149302,149303],{"class":1234},"trigger",[66,149305,99],{"class":72},[66,149307,149308],{"class":356},"\"axis\"",[66,149310,39835],{"class":76},[66,149312,149313],{"class":68,"line":405},[66,149314,313],{"class":76},[66,149316,149317,149319,149321],{"class":68,"line":418},[66,149318,149090],{"class":76},[66,149320,149093],{"class":356},[66,149322,313],{"class":76},[19,149324,149325],{},"常见全局配置：",[2129,149327,149328,149337],{},[2132,149329,149330],{},[2135,149331,149332,149335],{},[2138,149333,149334],{},"配置",[2138,149336,104469],{},[2176,149338,149339,149349,149359,149369,149379,149389],{},[2135,149340,149341,149346],{},[2181,149342,149343],{},[23,149344,149345],{},"TitleOpts",[2181,149347,149348],{},"标题",[2135,149350,149351,149356],{},[2181,149352,149353],{},[23,149354,149355],{},"LegendOpts",[2181,149357,149358],{},"图例",[2135,149360,149361,149366],{},[2181,149362,149363],{},[23,149364,149365],{},"TooltipOpts",[2181,149367,149368],{},"提示框",[2135,149370,149371,149376],{},[2181,149372,149373],{},[23,149374,149375],{},"AxisOpts",[2181,149377,149378],{},"坐标轴",[2135,149380,149381,149386],{},[2181,149382,149383],{},[23,149384,149385],{},"VisualMapOpts",[2181,149387,149388],{},"视觉映射",[2135,149390,149391,149396],{},[2181,149392,149393],{},[23,149394,149395],{},"DataZoomOpts",[2181,149397,149398],{},"区域缩放",[14,149400,149402],{"id":149401},"_106-系列配置","10.6 系列配置",[19,149404,149405],{},"系列配置作用于某一组数据。",[57,149407,149409],{"className":59,"code":149408,"language":61,"meta":62,"style":62},"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",[23,149410,149411,149416,149427,149456,149467,149486],{"__ignoreMap":62},[66,149412,149413],{"class":68,"line":69},[66,149414,149415],{"class":76},"line.add_yaxis(\n",[66,149417,149418,149421,149423,149425],{"class":68,"line":80},[66,149419,149420],{"class":1234},"    series_name",[66,149422,99],{"class":72},[66,149424,149061],{"class":356},[66,149426,33259],{"class":76},[66,149428,149429,149432,149434,149436,149438,149440,149442,149444,149446,149448,149450,149452,149454],{"class":68,"line":112},[66,149430,149431],{"class":1234},"    y_axis",[66,149433,99],{"class":72},[66,149435,2869],{"class":76},[66,149437,310],{"class":102},[66,149439,307],{"class":76},[66,149441,2796],{"class":102},[66,149443,307],{"class":76},[66,149445,2841],{"class":102},[66,149447,307],{"class":76},[66,149449,149078],{"class":102},[66,149451,307],{"class":76},[66,149453,149083],{"class":102},[66,149455,89612],{"class":76},[66,149457,149458,149461,149463,149465],{"class":68,"line":129},[66,149459,149460],{"class":1234},"    is_smooth",[66,149462,99],{"class":72},[66,149464,33269],{"class":102},[66,149466,33259],{"class":76},[66,149468,149469,149472,149474,149477,149480,149482,149484],{"class":68,"line":138},[66,149470,149471],{"class":1234},"    label_opts",[66,149473,99],{"class":72},[66,149475,149476],{"class":76},"opts.LabelOpts(",[66,149478,149479],{"class":1234},"is_show",[66,149481,99],{"class":72},[66,149483,33269],{"class":102},[66,149485,39835],{"class":76},[66,149487,149488],{"class":68,"line":227},[66,149489,313],{"class":76},[19,149491,149492],{},"常用参数：",[31,149494,149495,149501,149507,149513,149519],{},[34,149496,149497,149500],{},[23,149498,149499],{},"series_name","：系列名称。",[34,149502,149503,149506],{},[23,149504,149505],{},"y_axis","：y 轴数据。",[34,149508,149509,149512],{},[23,149510,149511],{},"is_smooth","：是否平滑曲线。",[34,149514,149515,149518],{},[23,149516,149517],{},"label_opts","：标签配置。",[34,149520,149521,149524],{},[23,149522,149523],{},"symbol_size","：标记点大小。",[14,149526,149528],{"id":149527},"_107-多条折线","10.7 多条折线",[57,149530,149532],{"className":59,"code":149531,"language":61,"meta":62,"style":62},"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",[23,149533,149534,149548,149558,149562,149591,149595,149603,149608,149646,149683,149687,149704,149720,149724],{"__ignoreMap":62},[66,149535,149536,149538,149540,149542,149544,149546],{"class":68,"line":69},[66,149537,32532],{"class":72},[66,149539,149145],{"class":76},[66,149541,284],{"class":72},[66,149543,149150],{"class":76},[66,149545,33176],{"class":72},[66,149547,149155],{"class":76},[66,149549,149550,149552,149554,149556],{"class":68,"line":80},[66,149551,32532],{"class":72},[66,149553,149004],{"class":76},[66,149555,284],{"class":72},[66,149557,149009],{"class":76},[66,149559,149560],{"class":68,"line":112},[66,149561,109],{"emptyLinePlaceholder":108},[66,149563,149564,149567,149569,149571,149573,149575,149577,149579,149581,149583,149585,149587,149589],{"class":68,"line":129},[66,149565,149566],{"class":76},"dates ",[66,149568,99],{"class":72},[66,149570,688],{"class":76},[66,149572,149031],{"class":356},[66,149574,307],{"class":76},[66,149576,149036],{"class":356},[66,149578,307],{"class":76},[66,149580,149041],{"class":356},[66,149582,307],{"class":76},[66,149584,149046],{"class":356},[66,149586,307],{"class":76},[66,149588,149051],{"class":356},[66,149590,704],{"class":76},[66,149592,149593],{"class":68,"line":138},[66,149594,109],{"emptyLinePlaceholder":108},[66,149596,149597,149599,149601],{"class":68,"line":227},[66,149598,149018],{"class":76},[66,149600,99],{"class":72},[66,149602,149023],{"class":76},[66,149604,149605],{"class":68,"line":236},[66,149606,149607],{"class":76},"line.add_xaxis(dates)\n",[66,149609,149610,149612,149615,149617,149619,149621,149624,149626,149628,149630,149632,149634,149636,149638,149640,149642,149644],{"class":68,"line":241},[66,149611,149058],{"class":76},[66,149613,149614],{"class":356},"\"线上销售\"",[66,149616,79297],{"class":76},[66,149618,310],{"class":102},[66,149620,307],{"class":76},[66,149622,149623],{"class":102},"130",[66,149625,307],{"class":76},[66,149627,2796],{"class":102},[66,149629,307],{"class":76},[66,149631,22851],{"class":102},[66,149633,307],{"class":76},[66,149635,3552],{"class":102},[66,149637,113973],{"class":76},[66,149639,149511],{"class":1234},[66,149641,99],{"class":72},[66,149643,33269],{"class":102},[66,149645,313],{"class":76},[66,149647,149648,149650,149653,149655,149657,149659,149661,149663,149665,149667,149669,149671,149673,149675,149677,149679,149681],{"class":68,"line":372},[66,149649,149058],{"class":76},[66,149651,149652],{"class":356},"\"线下销售\"",[66,149654,79297],{"class":76},[66,149656,2591],{"class":102},[66,149658,307],{"class":76},[66,149660,2841],{"class":102},[66,149662,307],{"class":76},[66,149664,310],{"class":102},[66,149666,307],{"class":76},[66,149668,2796],{"class":102},[66,149670,307],{"class":76},[66,149672,149078],{"class":102},[66,149674,113973],{"class":76},[66,149676,149511],{"class":1234},[66,149678,99],{"class":72},[66,149680,33269],{"class":102},[66,149682,313],{"class":76},[66,149684,149685],{"class":68,"line":377},[66,149686,149234],{"class":76},[66,149688,149689,149691,149693,149695,149697,149699,149702],{"class":68,"line":392},[66,149690,149239],{"class":1234},[66,149692,99],{"class":72},[66,149694,149244],{"class":76},[66,149696,53191],{"class":1234},[66,149698,99],{"class":72},[66,149700,149701],{"class":356},"\"线上线下销售趋势\"",[66,149703,39835],{"class":76},[66,149705,149706,149708,149710,149712,149714,149716,149718],{"class":68,"line":405},[66,149707,149295],{"class":1234},[66,149709,99],{"class":72},[66,149711,149300],{"class":76},[66,149713,149303],{"class":1234},[66,149715,99],{"class":72},[66,149717,149308],{"class":356},[66,149719,39835],{"class":76},[66,149721,149722],{"class":68,"line":418},[66,149723,313],{"class":76},[66,149725,149726,149728,149731],{"class":68,"line":430},[66,149727,149090],{"class":76},[66,149729,149730],{"class":356},"\"sales.html\"",[66,149732,313],{"class":76},[19,149734,149735],{},"多条折线适合比较不同指标或不同地区。",[14,149737,149739],{"id":149738},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,149741,149742,149743,807],{},"假设 ",[23,149744,149745],{},"sales.json",[57,149747,149749],{"className":148811,"code":149748,"language":147562,"meta":62,"style":62},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[23,149750,149751,149756,149788,149816,149844],{"__ignoreMap":62},[66,149752,149753],{"class":68,"line":69},[66,149754,149755],{"class":76},"[\n",[66,149757,149758,149761,149764,149766,149768,149770,149773,149775,149777,149779,149782,149784,149786],{"class":68,"line":80},[66,149759,149760],{"class":76},"  {",[66,149762,149763],{"class":102},"\"date\"",[66,149765,53221],{"class":76},[66,149767,149031],{"class":356},[66,149769,307],{"class":76},[66,149771,149772],{"class":102},"\"online\"",[66,149774,53221],{"class":76},[66,149776,310],{"class":102},[66,149778,307],{"class":76},[66,149780,149781],{"class":102},"\"offline\"",[66,149783,53221],{"class":76},[66,149785,2591],{"class":102},[66,149787,6746],{"class":76},[66,149789,149790,149792,149794,149796,149798,149800,149802,149804,149806,149808,149810,149812,149814],{"class":68,"line":112},[66,149791,149760],{"class":76},[66,149793,149763],{"class":102},[66,149795,53221],{"class":76},[66,149797,149036],{"class":356},[66,149799,307],{"class":76},[66,149801,149772],{"class":102},[66,149803,53221],{"class":76},[66,149805,149623],{"class":102},[66,149807,307],{"class":76},[66,149809,149781],{"class":102},[66,149811,53221],{"class":76},[66,149813,2841],{"class":102},[66,149815,6746],{"class":76},[66,149817,149818,149820,149822,149824,149826,149828,149830,149832,149834,149836,149838,149840,149842],{"class":68,"line":129},[66,149819,149760],{"class":76},[66,149821,149763],{"class":102},[66,149823,53221],{"class":76},[66,149825,149041],{"class":356},[66,149827,307],{"class":76},[66,149829,149772],{"class":102},[66,149831,53221],{"class":76},[66,149833,2796],{"class":102},[66,149835,307],{"class":76},[66,149837,149781],{"class":102},[66,149839,53221],{"class":76},[66,149841,310],{"class":102},[66,149843,3407],{"class":76},[66,149845,149846],{"class":68,"line":138},[66,149847,704],{"class":76},[19,149849,149850],{},"读取并绘图：",[57,149852,149854],{"className":59,"code":149853,"language":61,"meta":62,"style":62},"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",[23,149855,149856,149862,149876,149886,149890,149922,149935,149939,149947,149956,149965,149969,149981,149990,149999,150008,150012,150020,150024,150041,150058,150062,150079,150095,150099],{"__ignoreMap":62},[66,149857,149858,149860],{"class":68,"line":69},[66,149859,284],{"class":72},[66,149861,148857],{"class":76},[66,149863,149864,149866,149868,149870,149872,149874],{"class":68,"line":80},[66,149865,32532],{"class":72},[66,149867,149145],{"class":76},[66,149869,284],{"class":72},[66,149871,149150],{"class":76},[66,149873,33176],{"class":72},[66,149875,149155],{"class":76},[66,149877,149878,149880,149882,149884],{"class":68,"line":112},[66,149879,32532],{"class":72},[66,149881,149004],{"class":76},[66,149883,284],{"class":72},[66,149885,149009],{"class":76},[66,149887,149888],{"class":68,"line":129},[66,149889,109],{"emptyLinePlaceholder":108},[66,149891,149892,149894,149896,149898,149901,149903,149905,149907,149909,149911,149913,149915,149917,149920],{"class":68,"line":138},[66,149893,109606],{"class":72},[66,149895,148557],{"class":102},[66,149897,348],{"class":76},[66,149899,149900],{"class":356},"\"sales.json\"",[66,149902,307],{"class":76},[66,149904,148567],{"class":356},[66,149906,307],{"class":76},[66,149908,148572],{"class":1234},[66,149910,99],{"class":72},[66,149912,148577],{"class":356},[66,149914,15519],{"class":76},[66,149916,33176],{"class":72},[66,149918,149919],{"class":1234}," file",[66,149921,126],{"class":76},[66,149923,149924,149926,149928,149931,149933],{"class":68,"line":227},[66,149925,103195],{"class":76},[66,149927,99],{"class":72},[66,149929,149930],{"class":76}," json.load(",[66,149932,47140],{"class":1234},[66,149934,313],{"class":76},[66,149936,149937],{"class":68,"line":236},[66,149938,109],{"emptyLinePlaceholder":108},[66,149940,149941,149943,149945],{"class":68,"line":241},[66,149942,149566],{"class":76},[66,149944,99],{"class":72},[66,149946,53622],{"class":76},[66,149948,149949,149952,149954],{"class":68,"line":372},[66,149950,149951],{"class":76},"online_sales ",[66,149953,99],{"class":72},[66,149955,53622],{"class":76},[66,149957,149958,149961,149963],{"class":68,"line":377},[66,149959,149960],{"class":76},"offline_sales ",[66,149962,99],{"class":72},[66,149964,53622],{"class":76},[66,149966,149967],{"class":68,"line":392},[66,149968,109],{"emptyLinePlaceholder":108},[66,149970,149971,149973,149976,149978],{"class":68,"line":405},[66,149972,502],{"class":72},[66,149974,149975],{"class":76}," item ",[66,149977,507],{"class":72},[66,149979,149980],{"class":76}," data:\n",[66,149982,149983,149986,149988],{"class":68,"line":418},[66,149984,149985],{"class":76},"    dates.append(item[",[66,149987,149763],{"class":356},[66,149989,6473],{"class":76},[66,149991,149992,149995,149997],{"class":68,"line":430},[66,149993,149994],{"class":76},"    online_sales.append(item[",[66,149996,149772],{"class":356},[66,149998,6473],{"class":76},[66,150000,150001,150004,150006],{"class":68,"line":438},[66,150002,150003],{"class":76},"    offline_sales.append(item[",[66,150005,149781],{"class":356},[66,150007,6473],{"class":76},[66,150009,150010],{"class":68,"line":465},[66,150011,109],{"emptyLinePlaceholder":108},[66,150013,150014,150016,150018],{"class":68,"line":1805},[66,150015,149018],{"class":76},[66,150017,99],{"class":72},[66,150019,149023],{"class":76},[66,150021,150022],{"class":68,"line":1817},[66,150023,149607],{"class":76},[66,150025,150026,150028,150030,150033,150035,150037,150039],{"class":68,"line":1822},[66,150027,149058],{"class":76},[66,150029,149614],{"class":356},[66,150031,150032],{"class":76},", online_sales, ",[66,150034,149511],{"class":1234},[66,150036,99],{"class":72},[66,150038,33269],{"class":102},[66,150040,313],{"class":76},[66,150042,150043,150045,150047,150050,150052,150054,150056],{"class":68,"line":1829},[66,150044,149058],{"class":76},[66,150046,149652],{"class":356},[66,150048,150049],{"class":76},", offline_sales, ",[66,150051,149511],{"class":1234},[66,150053,99],{"class":72},[66,150055,33269],{"class":102},[66,150057,313],{"class":76},[66,150059,150060],{"class":68,"line":3529},[66,150061,149234],{"class":76},[66,150063,150064,150066,150068,150070,150072,150074,150077],{"class":68,"line":3557},[66,150065,149239],{"class":1234},[66,150067,99],{"class":72},[66,150069,149244],{"class":76},[66,150071,53191],{"class":1234},[66,150073,99],{"class":72},[66,150075,150076],{"class":356},"\"销售趋势\"",[66,150078,39835],{"class":76},[66,150080,150081,150083,150085,150087,150089,150091,150093],{"class":68,"line":3562},[66,150082,149295],{"class":1234},[66,150084,99],{"class":72},[66,150086,149300],{"class":76},[66,150088,149303],{"class":1234},[66,150090,99],{"class":72},[66,150092,149308],{"class":356},[66,150094,39835],{"class":76},[66,150096,150097],{"class":68,"line":3579},[66,150098,313],{"class":76},[66,150100,150101,150103,150105],{"class":68,"line":3584},[66,150102,149090],{"class":76},[66,150104,149730],{"class":356},[66,150106,313],{"class":76},[14,150108,150110],{"id":150109},"_109-数据清洗","10.9 数据清洗",[19,150112,150113],{},"真实数据经常不整齐，需要清洗。",[19,150115,150116],{},"常见问题：",[31,150118,150119,150122,150125,150128],{},[34,150120,150121],{},"数字是字符串。",[34,150123,150124],{},"字段缺失。",[34,150126,150127],{},"空值。",[34,150129,150130],{},"日期格式不统一。",[19,150132,86],{},[57,150134,150136],{"className":59,"code":150135,"language":61,"meta":62,"style":62},"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",[23,150137,150138,150147,150170,150190,150211,150215,150219,150227,150236,150240,150251,150265,150274,150278,150282,150290,150300,150304,150311],{"__ignoreMap":62},[66,150139,150140,150143,150145],{"class":68,"line":69},[66,150141,150142],{"class":76},"raw_data ",[66,150144,99],{"class":72},[66,150146,57228],{"class":76},[66,150148,150149,150152,150154,150156,150158,150160,150163,150165,150168],{"class":68,"line":80},[66,150150,150151],{"class":76},"    {",[66,150153,149763],{"class":356},[66,150155,53221],{"class":76},[66,150157,149031],{"class":356},[66,150159,307],{"class":76},[66,150161,150162],{"class":356},"\"sales\"",[66,150164,53221],{"class":76},[66,150166,150167],{"class":356},"\"100\"",[66,150169,6746],{"class":76},[66,150171,150172,150174,150176,150178,150180,150182,150184,150186,150188],{"class":68,"line":112},[66,150173,150151],{"class":76},[66,150175,149763],{"class":356},[66,150177,53221],{"class":76},[66,150179,149036],{"class":356},[66,150181,307],{"class":76},[66,150183,150162],{"class":356},[66,150185,53221],{"class":76},[66,150187,9463],{"class":356},[66,150189,6746],{"class":76},[66,150191,150192,150194,150196,150198,150200,150202,150204,150206,150209],{"class":68,"line":129},[66,150193,150151],{"class":76},[66,150195,149763],{"class":356},[66,150197,53221],{"class":76},[66,150199,149041],{"class":356},[66,150201,307],{"class":76},[66,150203,150162],{"class":356},[66,150205,53221],{"class":76},[66,150207,150208],{"class":356},"\"120\"",[66,150210,6746],{"class":76},[66,150212,150213],{"class":68,"line":138},[66,150214,704],{"class":76},[66,150216,150217],{"class":68,"line":227},[66,150218,109],{"emptyLinePlaceholder":108},[66,150220,150221,150223,150225],{"class":68,"line":236},[66,150222,149566],{"class":76},[66,150224,99],{"class":72},[66,150226,53622],{"class":76},[66,150228,150229,150232,150234],{"class":68,"line":241},[66,150230,150231],{"class":76},"sales ",[66,150233,99],{"class":72},[66,150235,53622],{"class":76},[66,150237,150238],{"class":68,"line":372},[66,150239,109],{"emptyLinePlaceholder":108},[66,150241,150242,150244,150246,150248],{"class":68,"line":377},[66,150243,502],{"class":72},[66,150245,149975],{"class":76},[66,150247,507],{"class":72},[66,150249,150250],{"class":76}," raw_data:\n",[66,150252,150253,150256,150258,150261,150263],{"class":68,"line":392},[66,150254,150255],{"class":76},"    value ",[66,150257,99],{"class":72},[66,150259,150260],{"class":76}," item.get(",[66,150262,150162],{"class":356},[66,150264,313],{"class":76},[66,150266,150267,150269,150271],{"class":68,"line":405},[66,150268,380],{"class":72},[66,150270,40718],{"class":72},[66,150272,150273],{"class":76}," value:\n",[66,150275,150276],{"class":68,"line":418},[66,150277,609],{"class":72},[66,150279,150280],{"class":68,"line":430},[66,150281,109],{"emptyLinePlaceholder":108},[66,150283,150284,150286,150288],{"class":68,"line":438},[66,150285,149985],{"class":76},[66,150287,149763],{"class":356},[66,150289,6473],{"class":76},[66,150291,150292,150295,150297],{"class":68,"line":465},[66,150293,150294],{"class":76},"    sales.append(",[66,150296,2003],{"class":102},[66,150298,150299],{"class":76},"(value))\n",[66,150301,150302],{"class":68,"line":1805},[66,150303,109],{"emptyLinePlaceholder":108},[66,150305,150306,150308],{"class":68,"line":1817},[66,150307,244],{"class":102},[66,150309,150310],{"class":76},"(dates)\n",[66,150312,150313,150315],{"class":68,"line":1822},[66,150314,244],{"class":102},[66,150316,150317],{"class":76},"(sales)\n",[14,150319,150321],{"id":150320},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[57,150323,150325],{"className":59,"code":150324,"language":61,"meta":62,"style":62},"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",[23,150326,150327,150341,150351,150355,150363,150384,150406,150428,150450,150472,150476,150480,150502,150523,150527,150535,150539,150543,150553,150562,150572,150588,150592,150596,150613,150629,150645,150661,150671,150675],{"__ignoreMap":62},[66,150328,150329,150331,150333,150335,150337,150339],{"class":68,"line":69},[66,150330,32532],{"class":72},[66,150332,149145],{"class":76},[66,150334,284],{"class":72},[66,150336,149150],{"class":76},[66,150338,33176],{"class":72},[66,150340,149155],{"class":76},[66,150342,150343,150345,150347,150349],{"class":68,"line":80},[66,150344,32532],{"class":72},[66,150346,149004],{"class":76},[66,150348,284],{"class":72},[66,150350,149009],{"class":76},[66,150352,150353],{"class":68,"line":112},[66,150354,109],{"emptyLinePlaceholder":108},[66,150356,150357,150359,150361],{"class":68,"line":129},[66,150358,150231],{"class":76},[66,150360,99],{"class":72},[66,150362,57228],{"class":76},[66,150364,150365,150367,150369,150371,150374,150376,150378,150380,150382],{"class":68,"line":138},[66,150366,150151],{"class":76},[66,150368,149763],{"class":356},[66,150370,53221],{"class":76},[66,150372,150373],{"class":356},"\"2024-10-01\"",[66,150375,307],{"class":76},[66,150377,85861],{"class":356},[66,150379,53221],{"class":76},[66,150381,93799],{"class":102},[66,150383,6746],{"class":76},[66,150385,150386,150388,150390,150392,150395,150397,150399,150401,150404],{"class":68,"line":227},[66,150387,150151],{"class":76},[66,150389,149763],{"class":356},[66,150391,53221],{"class":76},[66,150393,150394],{"class":356},"\"2024-10-02\"",[66,150396,307],{"class":76},[66,150398,85861],{"class":356},[66,150400,53221],{"class":76},[66,150402,150403],{"class":102},"1800",[66,150405,6746],{"class":76},[66,150407,150408,150410,150412,150414,150417,150419,150421,150423,150426],{"class":68,"line":236},[66,150409,150151],{"class":76},[66,150411,149763],{"class":356},[66,150413,53221],{"class":76},[66,150415,150416],{"class":356},"\"2024-10-03\"",[66,150418,307],{"class":76},[66,150420,85861],{"class":356},[66,150422,53221],{"class":76},[66,150424,150425],{"class":102},"1500",[66,150427,6746],{"class":76},[66,150429,150430,150432,150434,150436,150439,150441,150443,150445,150448],{"class":68,"line":241},[66,150431,150151],{"class":76},[66,150433,149763],{"class":356},[66,150435,53221],{"class":76},[66,150437,150438],{"class":356},"\"2024-10-04\"",[66,150440,307],{"class":76},[66,150442,85861],{"class":356},[66,150444,53221],{"class":76},[66,150446,150447],{"class":102},"2100",[66,150449,6746],{"class":76},[66,150451,150452,150454,150456,150458,150461,150463,150465,150467,150470],{"class":68,"line":372},[66,150453,150151],{"class":76},[66,150455,149763],{"class":356},[66,150457,53221],{"class":76},[66,150459,150460],{"class":356},"\"2024-10-05\"",[66,150462,307],{"class":76},[66,150464,85861],{"class":356},[66,150466,53221],{"class":76},[66,150468,150469],{"class":102},"2600",[66,150471,6746],{"class":76},[66,150473,150474],{"class":68,"line":377},[66,150475,704],{"class":76},[66,150477,150478],{"class":68,"line":392},[66,150479,109],{"emptyLinePlaceholder":108},[66,150481,150482,150484,150486,150489,150491,150493,150495,150497,150499],{"class":68,"line":405},[66,150483,149566],{"class":76},[66,150485,99],{"class":72},[66,150487,150488],{"class":76}," [item[",[66,150490,149763],{"class":356},[66,150492,6259],{"class":76},[66,150494,502],{"class":72},[66,150496,149975],{"class":76},[66,150498,507],{"class":72},[66,150500,150501],{"class":76}," sales]\n",[66,150503,150504,150507,150509,150511,150513,150515,150517,150519,150521],{"class":68,"line":418},[66,150505,150506],{"class":76},"amounts ",[66,150508,99],{"class":72},[66,150510,150488],{"class":76},[66,150512,85861],{"class":356},[66,150514,6259],{"class":76},[66,150516,502],{"class":72},[66,150518,149975],{"class":76},[66,150520,507],{"class":72},[66,150522,150501],{"class":76},[66,150524,150525],{"class":68,"line":430},[66,150526,109],{"emptyLinePlaceholder":108},[66,150528,150529,150531,150533],{"class":68,"line":438},[66,150530,149018],{"class":76},[66,150532,99],{"class":72},[66,150534,149023],{"class":76},[66,150536,150537],{"class":68,"line":465},[66,150538,149607],{"class":76},[66,150540,150541],{"class":68,"line":1805},[66,150542,149415],{"class":76},[66,150544,150545,150547,150549,150551],{"class":68,"line":1817},[66,150546,149420],{"class":1234},[66,150548,99],{"class":72},[66,150550,149061],{"class":356},[66,150552,33259],{"class":76},[66,150554,150555,150557,150559],{"class":68,"line":1822},[66,150556,149431],{"class":1234},[66,150558,99],{"class":72},[66,150560,150561],{"class":76},"amounts,\n",[66,150563,150564,150566,150568,150570],{"class":68,"line":1829},[66,150565,149460],{"class":1234},[66,150567,99],{"class":72},[66,150569,33269],{"class":102},[66,150571,33259],{"class":76},[66,150573,150574,150576,150578,150580,150582,150584,150586],{"class":68,"line":3529},[66,150575,149471],{"class":1234},[66,150577,99],{"class":72},[66,150579,149476],{"class":76},[66,150581,149479],{"class":1234},[66,150583,99],{"class":72},[66,150585,33269],{"class":102},[66,150587,39835],{"class":76},[66,150589,150590],{"class":68,"line":3557},[66,150591,313],{"class":76},[66,150593,150594],{"class":68,"line":3562},[66,150595,149234],{"class":76},[66,150597,150598,150600,150602,150604,150606,150608,150611],{"class":68,"line":3579},[66,150599,149239],{"class":1234},[66,150601,99],{"class":72},[66,150603,149244],{"class":76},[66,150605,53191],{"class":1234},[66,150607,99],{"class":72},[66,150609,150610],{"class":356},"\"每日销售额\"",[66,150612,39835],{"class":76},[66,150614,150615,150617,150619,150621,150623,150625,150627],{"class":68,"line":3584},[66,150616,149258],{"class":1234},[66,150618,99],{"class":72},[66,150620,149263],{"class":76},[66,150622,81588],{"class":1234},[66,150624,99],{"class":72},[66,150626,149270],{"class":356},[66,150628,39835],{"class":76},[66,150630,150631,150633,150635,150637,150639,150641,150643],{"class":68,"line":3589},[66,150632,149277],{"class":1234},[66,150634,99],{"class":72},[66,150636,149263],{"class":76},[66,150638,81588],{"class":1234},[66,150640,99],{"class":72},[66,150642,149288],{"class":356},[66,150644,39835],{"class":76},[66,150646,150647,150649,150651,150653,150655,150657,150659],{"class":68,"line":3594},[66,150648,149295],{"class":1234},[66,150650,99],{"class":72},[66,150652,149300],{"class":76},[66,150654,149303],{"class":1234},[66,150656,99],{"class":72},[66,150658,149308],{"class":356},[66,150660,39835],{"class":76},[66,150662,150663,150666,150668],{"class":68,"line":3608},[66,150664,150665],{"class":1234},"    datazoom_opts",[66,150667,99],{"class":72},[66,150669,150670],{"class":76},"[opts.DataZoomOpts()],\n",[66,150672,150673],{"class":68,"line":3613},[66,150674,313],{"class":76},[66,150676,150677,150679,150682],{"class":68,"line":4401},[66,150678,149090],{"class":76},[66,150680,150681],{"class":356},"\"daily_sales.html\"",[66,150683,313],{"class":76},[19,150685,150686,150689],{},[23,150687,150688],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,150691,150693],{"id":150692},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,150695,150696],{},"如果数据结构如下：",[57,150698,150700],{"className":59,"code":150699,"language":61,"meta":62,"style":62},"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",[23,150701,150702,150710,150718,150740,150761,150766,150773,150793,150813,150817],{"__ignoreMap":62},[66,150703,150704,150706,150708],{"class":68,"line":69},[66,150705,103431],{"class":76},[66,150707,99],{"class":72},[66,150709,17375],{"class":76},[66,150711,150712,150715],{"class":68,"line":80},[66,150713,150714],{"class":356},"    \"北京\"",[66,150716,150717],{"class":76},": [\n",[66,150719,150720,150722,150724,150726,150729,150731,150734,150736,150738],{"class":68,"line":112},[66,150721,6733],{"class":76},[66,150723,149763],{"class":356},[66,150725,53221],{"class":76},[66,150727,150728],{"class":356},"\"2024-01-01\"",[66,150730,307],{"class":76},[66,150732,150733],{"class":356},"\"confirm\"",[66,150735,53221],{"class":76},[66,150737,790],{"class":102},[66,150739,6746],{"class":76},[66,150741,150742,150744,150746,150748,150751,150753,150755,150757,150759],{"class":68,"line":129},[66,150743,6733],{"class":76},[66,150745,149763],{"class":356},[66,150747,53221],{"class":76},[66,150749,150750],{"class":356},"\"2024-01-02\"",[66,150752,307],{"class":76},[66,150754,150733],{"class":356},[66,150756,53221],{"class":76},[66,150758,2477],{"class":102},[66,150760,6746],{"class":76},[66,150762,150763],{"class":68,"line":138},[66,150764,150765],{"class":76},"    ],\n",[66,150767,150768,150771],{"class":68,"line":227},[66,150769,150770],{"class":356},"    \"上海\"",[66,150772,150717],{"class":76},[66,150774,150775,150777,150779,150781,150783,150785,150787,150789,150791],{"class":68,"line":236},[66,150776,6733],{"class":76},[66,150778,149763],{"class":356},[66,150780,53221],{"class":76},[66,150782,150728],{"class":356},[66,150784,307],{"class":76},[66,150786,150733],{"class":356},[66,150788,53221],{"class":76},[66,150790,2379],{"class":102},[66,150792,6746],{"class":76},[66,150794,150795,150797,150799,150801,150803,150805,150807,150809,150811],{"class":68,"line":241},[66,150796,6733],{"class":76},[66,150798,149763],{"class":356},[66,150800,53221],{"class":76},[66,150802,150750],{"class":356},[66,150804,307],{"class":76},[66,150806,150733],{"class":356},[66,150808,53221],{"class":76},[66,150810,2502],{"class":102},[66,150812,6746],{"class":76},[66,150814,150815],{"class":68,"line":372},[66,150816,150765],{"class":76},[66,150818,150819],{"class":68,"line":377},[66,150820,3407],{"class":76},[19,150822,150823],{},"绘制多地区趋势：",[57,150825,150827],{"className":59,"code":150826,"language":61,"meta":62,"style":62},"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",[23,150828,150829,150843,150853,150857,150882,150886,150894,150898,150902,150914,150936,150949,150953,150957,150974,150990,150994],{"__ignoreMap":62},[66,150830,150831,150833,150835,150837,150839,150841],{"class":68,"line":69},[66,150832,32532],{"class":72},[66,150834,149145],{"class":76},[66,150836,284],{"class":72},[66,150838,149150],{"class":76},[66,150840,33176],{"class":72},[66,150842,149155],{"class":76},[66,150844,150845,150847,150849,150851],{"class":68,"line":80},[66,150846,32532],{"class":72},[66,150848,149004],{"class":76},[66,150850,284],{"class":72},[66,150852,149009],{"class":76},[66,150854,150855],{"class":68,"line":112},[66,150856,109],{"emptyLinePlaceholder":108},[66,150858,150859,150861,150863,150865,150867,150869,150871,150873,150875,150878,150880],{"class":68,"line":129},[66,150860,149566],{"class":76},[66,150862,99],{"class":72},[66,150864,150488],{"class":76},[66,150866,149763],{"class":356},[66,150868,6259],{"class":76},[66,150870,502],{"class":72},[66,150872,149975],{"class":76},[66,150874,507],{"class":72},[66,150876,150877],{"class":76}," data[",[66,150879,71048],{"class":356},[66,150881,79306],{"class":76},[66,150883,150884],{"class":68,"line":138},[66,150885,109],{"emptyLinePlaceholder":108},[66,150887,150888,150890,150892],{"class":68,"line":227},[66,150889,149018],{"class":76},[66,150891,99],{"class":72},[66,150893,149023],{"class":76},[66,150895,150896],{"class":68,"line":236},[66,150897,149607],{"class":76},[66,150899,150900],{"class":68,"line":241},[66,150901,109],{"emptyLinePlaceholder":108},[66,150903,150904,150906,150909,150911],{"class":68,"line":372},[66,150905,502],{"class":72},[66,150907,150908],{"class":76}," city, records ",[66,150910,507],{"class":72},[66,150912,150913],{"class":76}," data.items():\n",[66,150915,150916,150919,150921,150923,150925,150927,150929,150931,150933],{"class":68,"line":377},[66,150917,150918],{"class":76},"    values ",[66,150920,99],{"class":72},[66,150922,150488],{"class":76},[66,150924,150733],{"class":356},[66,150926,6259],{"class":76},[66,150928,502],{"class":72},[66,150930,149975],{"class":76},[66,150932,507],{"class":72},[66,150934,150935],{"class":76}," records]\n",[66,150937,150938,150941,150943,150945,150947],{"class":68,"line":392},[66,150939,150940],{"class":76},"    line.add_yaxis(city, values, ",[66,150942,149511],{"class":1234},[66,150944,99],{"class":72},[66,150946,33269],{"class":102},[66,150948,313],{"class":76},[66,150950,150951],{"class":68,"line":405},[66,150952,109],{"emptyLinePlaceholder":108},[66,150954,150955],{"class":68,"line":418},[66,150956,149234],{"class":76},[66,150958,150959,150961,150963,150965,150967,150969,150972],{"class":68,"line":430},[66,150960,149239],{"class":1234},[66,150962,99],{"class":72},[66,150964,149244],{"class":76},[66,150966,53191],{"class":1234},[66,150968,99],{"class":72},[66,150970,150971],{"class":356},"\"多地区趋势图\"",[66,150973,39835],{"class":76},[66,150975,150976,150978,150980,150982,150984,150986,150988],{"class":68,"line":438},[66,150977,149295],{"class":1234},[66,150979,99],{"class":72},[66,150981,149300],{"class":76},[66,150983,149303],{"class":1234},[66,150985,99],{"class":72},[66,150987,149308],{"class":356},[66,150989,39835],{"class":76},[66,150991,150992],{"class":68,"line":465},[66,150993,313],{"class":76},[66,150995,150996,150998,151001],{"class":68,"line":1805},[66,150997,149090],{"class":76},[66,150999,151000],{"class":356},"\"trend.html\"",[66,151002,313],{"class":76},[19,151004,151005],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,151007,151009],{"id":151008},"_1012-易错点","10.12 易错点",[31,151011,151012,151018,151024,151034,151040],{},[34,151013,151014,151017],{},[23,151015,151016],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[34,151019,151020,151023],{},[23,151021,151022],{},"render()"," 生成的是 HTML，不是图片。",[34,151025,151026,151027,151030,151031,158],{},"JSON 字符串用 ",[23,151028,151029],{},"json.loads()","，JSON 文件用 ",[23,151032,151033],{},"json.load()",[34,151035,151036,151037,158],{},"中文 JSON 保存时加 ",[23,151038,151039],{},"ensure_ascii=False",[34,151041,151042],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,151044,151046],{"id":151045},"_1013-本章练习","10.13 本章练习",[31,151048,151049,151052,151055,151058,151061],{},[34,151050,151051],{},"安装 pyecharts 并生成第一个折线图。",[34,151053,151054],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[34,151056,151057],{},"绘制两条折线，对比线上和线下销售额。",[34,151059,151060],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[34,151062,151063],{},"对含有空值的销售数据进行清洗后再绘图。",[1903,151065,151066],{},"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":62,"searchDepth":80,"depth":80,"links":151068},[151069,151070,151071,151072,151073,151074,151075,151076,151077,151078,151079,151080,151081],{"id":148686,"depth":80,"text":148687},{"id":148761,"depth":80,"text":148762},{"id":148940,"depth":80,"text":148941},{"id":148991,"depth":80,"text":148992},{"id":149125,"depth":80,"text":149126},{"id":149401,"depth":80,"text":149402},{"id":149527,"depth":80,"text":149528},{"id":149738,"depth":80,"text":149739},{"id":150109,"depth":80,"text":150110},{"id":150320,"depth":80,"text":150321},{"id":150692,"depth":80,"text":150693},{"id":151008,"depth":80,"text":151009},{"id":151045,"depth":80,"text":151046},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":148678,"description":1926},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":151088,"title":151089,"body":151090,"description":1926,"extension":1927,"meta":153447,"navigation":108,"path":153448,"seo":153449,"stem":153450,"__hash__":153451},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":151091,"toc":153424},[151092,151095,151099,151102,151105,151181,151184,151275,151278,151282,151285,151329,151342,151346,151349,151416,151419,151423,151426,151510,151518,151522,151527,151667,151670,151681,151687,151693,151806,151810,151813,151816,152069,152072,152076,152079,152183,152186,152190,152341,152345,152352,152465,152469,152472,152578,152581,152585,152588,152619,152622,152726,152729,152733,152737,152747,152815,152819,152826,152890,152893,152897,152903,152999,153008,153012,153336,153345,153349,153377,153381,153421],[10,151093,151089],{"id":151094},"_11-面向对象基础",[14,151096,151098],{"id":151097},"_111-什么是面向对象","11.1 什么是面向对象",[19,151100,151101],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,151103,151104],{},"面向过程：",[57,151106,151108],{"className":59,"code":151107,"language":61,"meta":62,"style":62},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[23,151109,151110,151119,151127,151131,151141,151172,151176],{"__ignoreMap":62},[66,151111,151112,151114,151116],{"class":68,"line":69},[66,151113,642],{"class":76},[66,151115,99],{"class":72},[66,151117,151118],{"class":356}," \"小明\"\n",[66,151120,151121,151123,151125],{"class":68,"line":80},[66,151122,148313],{"class":76},[66,151124,99],{"class":72},[66,151126,148318],{"class":102},[66,151128,151129],{"class":68,"line":112},[66,151130,109],{"emptyLinePlaceholder":108},[66,151132,151133,151135,151138],{"class":68,"line":129},[66,151134,33739],{"class":72},[66,151136,151137],{"class":3793}," introduce",[66,151139,151140],{"class":76},"(name, age):\n",[66,151142,151143,151145,151147,151149,151152,151154,151156,151158,151161,151163,151165,151167,151170],{"class":68,"line":138},[66,151144,132],{"class":102},[66,151146,348],{"class":76},[66,151148,445],{"class":72},[66,151150,151151],{"class":356},"\"我叫",[66,151153,451],{"class":102},[66,151155,81588],{"class":76},[66,151157,457],{"class":102},[66,151159,151160],{"class":356},"，今年",[66,151162,451],{"class":102},[66,151164,72000],{"class":76},[66,151166,457],{"class":102},[66,151168,151169],{"class":356},"岁\"",[66,151171,313],{"class":76},[66,151173,151174],{"class":68,"line":227},[66,151175,109],{"emptyLinePlaceholder":108},[66,151177,151178],{"class":68,"line":236},[66,151179,151180],{"class":76},"introduce(name, age)\n",[19,151182,151183],{},"面向对象：",[57,151185,151187],{"className":59,"code":151186,"language":61,"meta":62,"style":62},"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",[23,151188,151189,151197,151205,151234,151238,151242,151252,151261,151270],{"__ignoreMap":62},[66,151190,151191,151193,151195],{"class":68,"line":69},[66,151192,16499],{"class":72},[66,151194,9709],{"class":3793},[66,151196,126],{"class":76},[66,151198,151199,151201,151203],{"class":68,"line":80},[66,151200,32595],{"class":72},[66,151202,151137],{"class":3793},[66,151204,32601],{"class":76},[66,151206,151207,151209,151211,151213,151215,151218,151220,151222,151224,151226,151228,151230,151232],{"class":68,"line":112},[66,151208,395],{"class":102},[66,151210,348],{"class":76},[66,151212,445],{"class":72},[66,151214,151151],{"class":356},[66,151216,151217],{"class":102},"{self",[66,151219,82079],{"class":76},[66,151221,457],{"class":102},[66,151223,151160],{"class":356},[66,151225,151217],{"class":102},[66,151227,82091],{"class":76},[66,151229,457],{"class":102},[66,151231,151169],{"class":356},[66,151233,313],{"class":76},[66,151235,151236],{"class":68,"line":129},[66,151237,109],{"emptyLinePlaceholder":108},[66,151239,151240],{"class":68,"line":138},[66,151241,109],{"emptyLinePlaceholder":108},[66,151243,151244,151247,151249],{"class":68,"line":227},[66,151245,151246],{"class":76},"student ",[66,151248,99],{"class":72},[66,151250,151251],{"class":76}," Student()\n",[66,151253,151254,151257,151259],{"class":68,"line":236},[66,151255,151256],{"class":76},"student.name ",[66,151258,99],{"class":72},[66,151260,151118],{"class":356},[66,151262,151263,151266,151268],{"class":68,"line":241},[66,151264,151265],{"class":76},"student.age ",[66,151267,99],{"class":72},[66,151269,148318],{"class":102},[66,151271,151272],{"class":68,"line":372},[66,151273,151274],{"class":76},"student.introduce()\n",[19,151276,151277],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,151279,151281],{"id":151280},"_112-类和对象","11.2 类和对象",[19,151283,151284],{},"类是模板，对象是根据模板创建出来的具体实例。",[57,151286,151288],{"className":59,"code":151287,"language":61,"meta":62,"style":62},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[23,151289,151290,151298,151303,151307,151311,151320],{"__ignoreMap":62},[66,151291,151292,151294,151296],{"class":68,"line":69},[66,151293,16499],{"class":72},[66,151295,9709],{"class":3793},[66,151297,126],{"class":76},[66,151299,151300],{"class":68,"line":80},[66,151301,151302],{"class":72},"    pass\n",[66,151304,151305],{"class":68,"line":112},[66,151306,109],{"emptyLinePlaceholder":108},[66,151308,151309],{"class":68,"line":129},[66,151310,109],{"emptyLinePlaceholder":108},[66,151312,151313,151316,151318],{"class":68,"line":138},[66,151314,151315],{"class":76},"student1 ",[66,151317,99],{"class":72},[66,151319,151251],{"class":76},[66,151321,151322,151325,151327],{"class":68,"line":227},[66,151323,151324],{"class":76},"student2 ",[66,151326,99],{"class":72},[66,151328,151251],{"class":76},[19,151330,151331,151334,151335,102792,151338,151341],{},[23,151332,151333],{},"Student"," 是类，",[23,151336,151337],{},"student1",[23,151339,151340],{},"student2"," 是对象。",[14,151343,151345],{"id":151344},"_113-属性","11.3 属性",[19,151347,151348],{},"属性是对象保存的数据。",[57,151350,151352],{"className":59,"code":151351,"language":61,"meta":62,"style":62},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[23,151353,151354,151362,151366,151370,151374,151382,151390,151398,151402,151409],{"__ignoreMap":62},[66,151355,151356,151358,151360],{"class":68,"line":69},[66,151357,16499],{"class":72},[66,151359,9709],{"class":3793},[66,151361,126],{"class":76},[66,151363,151364],{"class":68,"line":80},[66,151365,151302],{"class":72},[66,151367,151368],{"class":68,"line":112},[66,151369,109],{"emptyLinePlaceholder":108},[66,151371,151372],{"class":68,"line":129},[66,151373,109],{"emptyLinePlaceholder":108},[66,151375,151376,151378,151380],{"class":68,"line":138},[66,151377,151246],{"class":76},[66,151379,99],{"class":72},[66,151381,151251],{"class":76},[66,151383,151384,151386,151388],{"class":68,"line":227},[66,151385,151256],{"class":76},[66,151387,99],{"class":72},[66,151389,151118],{"class":356},[66,151391,151392,151394,151396],{"class":68,"line":236},[66,151393,151265],{"class":76},[66,151395,99],{"class":72},[66,151397,148318],{"class":102},[66,151399,151400],{"class":68,"line":241},[66,151401,109],{"emptyLinePlaceholder":108},[66,151403,151404,151406],{"class":68,"line":372},[66,151405,244],{"class":102},[66,151407,151408],{"class":76},"(student.name)\n",[66,151410,151411,151413],{"class":68,"line":377},[66,151412,244],{"class":102},[66,151414,151415],{"class":76},"(student.age)\n",[19,151417,151418],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,151420,151422],{"id":151421},"_114-方法","11.4 方法",[19,151424,151425],{},"类中的函数叫方法。",[57,151427,151428],{"className":59,"code":151186,"language":61,"meta":62,"style":62},[23,151429,151430,151438,151446,151474,151478,151482,151490,151498,151506],{"__ignoreMap":62},[66,151431,151432,151434,151436],{"class":68,"line":69},[66,151433,16499],{"class":72},[66,151435,9709],{"class":3793},[66,151437,126],{"class":76},[66,151439,151440,151442,151444],{"class":68,"line":80},[66,151441,32595],{"class":72},[66,151443,151137],{"class":3793},[66,151445,32601],{"class":76},[66,151447,151448,151450,151452,151454,151456,151458,151460,151462,151464,151466,151468,151470,151472],{"class":68,"line":112},[66,151449,395],{"class":102},[66,151451,348],{"class":76},[66,151453,445],{"class":72},[66,151455,151151],{"class":356},[66,151457,151217],{"class":102},[66,151459,82079],{"class":76},[66,151461,457],{"class":102},[66,151463,151160],{"class":356},[66,151465,151217],{"class":102},[66,151467,82091],{"class":76},[66,151469,457],{"class":102},[66,151471,151169],{"class":356},[66,151473,313],{"class":76},[66,151475,151476],{"class":68,"line":129},[66,151477,109],{"emptyLinePlaceholder":108},[66,151479,151480],{"class":68,"line":138},[66,151481,109],{"emptyLinePlaceholder":108},[66,151483,151484,151486,151488],{"class":68,"line":227},[66,151485,151246],{"class":76},[66,151487,99],{"class":72},[66,151489,151251],{"class":76},[66,151491,151492,151494,151496],{"class":68,"line":236},[66,151493,151256],{"class":76},[66,151495,99],{"class":72},[66,151497,151118],{"class":356},[66,151499,151500,151502,151504],{"class":68,"line":241},[66,151501,151265],{"class":76},[66,151503,99],{"class":72},[66,151505,148318],{"class":102},[66,151507,151508],{"class":68,"line":372},[66,151509,151274],{"class":76},[19,151511,151512,151514,151515,151517],{},[23,151513,32617],{}," 表示当前对象。调用方法时不需要手动传入 ",[23,151516,32617],{},"，Python 会自动传。",[14,151519,151521],{"id":151520},"_115-构造方法__init__","11.5 构造方法__init__",[19,151523,151524,151526],{},[23,151525,32623],{}," 在对象创建时自动执行，用于初始化属性。",[57,151528,151530],{"className":59,"code":151529,"language":61,"meta":62,"style":62},"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",[23,151531,151532,151540,151549,151561,151573,151584,151588,151596,151634,151638,151642,151663],{"__ignoreMap":62},[66,151533,151534,151536,151538],{"class":68,"line":69},[66,151535,16499],{"class":72},[66,151537,9709],{"class":3793},[66,151539,126],{"class":76},[66,151541,151542,151544,151546],{"class":68,"line":80},[66,151543,32595],{"class":72},[66,151545,32598],{"class":102},[66,151547,151548],{"class":76},"(self, name, age, score):\n",[66,151550,151551,151553,151556,151558],{"class":68,"line":112},[66,151552,32639],{"class":102},[66,151554,151555],{"class":76},".name ",[66,151557,99],{"class":72},[66,151559,151560],{"class":76}," name\n",[66,151562,151563,151565,151568,151570],{"class":68,"line":129},[66,151564,32639],{"class":102},[66,151566,151567],{"class":76},".age ",[66,151569,99],{"class":72},[66,151571,151572],{"class":76}," age\n",[66,151574,151575,151577,151580,151582],{"class":68,"line":138},[66,151576,32639],{"class":102},[66,151578,151579],{"class":76},".score ",[66,151581,99],{"class":72},[66,151583,3421],{"class":76},[66,151585,151586],{"class":68,"line":227},[66,151587,109],{"emptyLinePlaceholder":108},[66,151589,151590,151592,151594],{"class":68,"line":236},[66,151591,32595],{"class":72},[66,151593,151137],{"class":3793},[66,151595,32601],{"class":76},[66,151597,151598,151600,151602,151604,151606,151608,151610,151612,151614,151616,151618,151620,151623,151625,151628,151630,151632],{"class":68,"line":241},[66,151599,395],{"class":102},[66,151601,348],{"class":76},[66,151603,445],{"class":72},[66,151605,151151],{"class":356},[66,151607,151217],{"class":102},[66,151609,82079],{"class":76},[66,151611,457],{"class":102},[66,151613,151160],{"class":356},[66,151615,151217],{"class":102},[66,151617,82091],{"class":76},[66,151619,457],{"class":102},[66,151621,151622],{"class":356},"岁，成绩",[66,151624,151217],{"class":102},[66,151626,151627],{"class":76},".score",[66,151629,457],{"class":102},[66,151631,1130],{"class":356},[66,151633,313],{"class":76},[66,151635,151636],{"class":68,"line":372},[66,151637,109],{"emptyLinePlaceholder":108},[66,151639,151640],{"class":68,"line":377},[66,151641,109],{"emptyLinePlaceholder":108},[66,151643,151644,151646,151648,151651,151653,151655,151657,151659,151661],{"class":68,"line":392},[66,151645,151246],{"class":76},[66,151647,99],{"class":72},[66,151649,151650],{"class":76}," Student(",[66,151652,691],{"class":356},[66,151654,307],{"class":76},[66,151656,2629],{"class":102},[66,151658,307],{"class":76},[66,151660,2964],{"class":102},[66,151662,313],{"class":76},[66,151664,151665],{"class":68,"line":405},[66,151666,151274],{"class":76},[19,151668,151669],{},"构造方法的好处：",[31,151671,151672,151675,151678],{},[34,151673,151674],{},"创建对象时必须提供必要数据。",[34,151676,151677],{},"属性初始化集中，不容易漏。",[34,151679,151680],{},"对象状态更完整。",[14,151682,151684,151685],{"id":151683},"_116-str","11.6 ",[2141,151686,3144],{},[19,151688,151689,151690,158],{},"直接打印对象时，默认输出不直观。可以定义 ",[23,151691,151692],{},"__str__",[57,151694,151696],{"className":59,"code":151695,"language":61,"meta":62,"style":62},"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",[23,151697,151698,151706,151715,151725,151735,151739,151748,151776,151780,151784,151800],{"__ignoreMap":62},[66,151699,151700,151702,151704],{"class":68,"line":69},[66,151701,16499],{"class":72},[66,151703,9709],{"class":3793},[66,151705,126],{"class":76},[66,151707,151708,151710,151712],{"class":68,"line":80},[66,151709,32595],{"class":72},[66,151711,32598],{"class":102},[66,151713,151714],{"class":76},"(self, name, age):\n",[66,151716,151717,151719,151721,151723],{"class":68,"line":112},[66,151718,32639],{"class":102},[66,151720,151555],{"class":76},[66,151722,99],{"class":72},[66,151724,151560],{"class":76},[66,151726,151727,151729,151731,151733],{"class":68,"line":129},[66,151728,32639],{"class":102},[66,151730,151567],{"class":76},[66,151732,99],{"class":72},[66,151734,151572],{"class":76},[66,151736,151737],{"class":68,"line":138},[66,151738,109],{"emptyLinePlaceholder":108},[66,151740,151741,151743,151746],{"class":68,"line":227},[66,151742,32595],{"class":72},[66,151744,151745],{"class":102}," __str__",[66,151747,32601],{"class":76},[66,151749,151750,151752,151755,151758,151760,151762,151764,151767,151769,151771,151773],{"class":68,"line":236},[66,151751,16557],{"class":72},[66,151753,151754],{"class":72}," f",[66,151756,151757],{"class":356},"\"Student(name=",[66,151759,151217],{"class":102},[66,151761,82079],{"class":76},[66,151763,457],{"class":102},[66,151765,151766],{"class":356},", age=",[66,151768,151217],{"class":102},[66,151770,82091],{"class":76},[66,151772,457],{"class":102},[66,151774,151775],{"class":356},")\"\n",[66,151777,151778],{"class":68,"line":241},[66,151779,109],{"emptyLinePlaceholder":108},[66,151781,151782],{"class":68,"line":372},[66,151783,109],{"emptyLinePlaceholder":108},[66,151785,151786,151788,151790,151792,151794,151796,151798],{"class":68,"line":377},[66,151787,151246],{"class":76},[66,151789,99],{"class":72},[66,151791,151650],{"class":76},[66,151793,691],{"class":356},[66,151795,307],{"class":76},[66,151797,2629],{"class":102},[66,151799,313],{"class":76},[66,151801,151802,151804],{"class":68,"line":392},[66,151803,244],{"class":102},[66,151805,727],{"class":76},[14,151807,151809],{"id":151808},"_117-封装","11.7 封装",[19,151811,151812],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,151814,151815],{},"Python 中以双下划线开头的属性通常视为私有属性。",[57,151817,151819],{"className":59,"code":151818,"language":61,"meta":62,"style":62},"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",[23,151820,151821,151830,151839,151851,151863,151867,151876,151885,151889,151899,151912,151923,151928,151939,151943,151952,151964,151975,151979,151992,152003,152007,152018,152022,152026,152044,152053,152062],{"__ignoreMap":62},[66,151822,151823,151825,151828],{"class":68,"line":69},[66,151824,16499],{"class":72},[66,151826,151827],{"class":3793}," Account",[66,151829,126],{"class":76},[66,151831,151832,151834,151836],{"class":68,"line":80},[66,151833,32595],{"class":72},[66,151835,32598],{"class":102},[66,151837,151838],{"class":76},"(self, owner, balance):\n",[66,151840,151841,151843,151846,151848],{"class":68,"line":112},[66,151842,32639],{"class":102},[66,151844,151845],{"class":76},".owner ",[66,151847,99],{"class":72},[66,151849,151850],{"class":76}," owner\n",[66,151852,151853,151855,151858,151860],{"class":68,"line":129},[66,151854,32639],{"class":102},[66,151856,151857],{"class":76},".__balance ",[66,151859,99],{"class":72},[66,151861,151862],{"class":76}," balance\n",[66,151864,151865],{"class":68,"line":138},[66,151866,109],{"emptyLinePlaceholder":108},[66,151868,151869,151871,151874],{"class":68,"line":227},[66,151870,32595],{"class":72},[66,151872,151873],{"class":3793}," get_balance",[66,151875,32601],{"class":76},[66,151877,151878,151880,151882],{"class":68,"line":236},[66,151879,16557],{"class":72},[66,151881,40661],{"class":102},[66,151883,151884],{"class":76},".__balance\n",[66,151886,151887],{"class":68,"line":241},[66,151888,109],{"emptyLinePlaceholder":108},[66,151890,151891,151893,151896],{"class":68,"line":372},[66,151892,32595],{"class":72},[66,151894,151895],{"class":3793}," deposit",[66,151897,151898],{"class":76},"(self, money):\n",[66,151900,151901,151903,151906,151908,151910],{"class":68,"line":377},[66,151902,4321],{"class":72},[66,151904,151905],{"class":76}," money ",[66,151907,120],{"class":72},[66,151909,962],{"class":102},[66,151911,126],{"class":76},[66,151913,151914,151916,151918,151921],{"class":68,"line":392},[66,151915,36438],{"class":102},[66,151917,348],{"class":76},[66,151919,151920],{"class":356},"\"存款金额必须大于0\"",[66,151922,313],{"class":76},[66,151924,151925],{"class":68,"line":405},[66,151926,151927],{"class":72},"            return\n",[66,151929,151930,151932,151934,151936],{"class":68,"line":418},[66,151931,32639],{"class":102},[66,151933,151857],{"class":76},[66,151935,144],{"class":72},[66,151937,151938],{"class":76}," money\n",[66,151940,151941],{"class":68,"line":430},[66,151942,109],{"emptyLinePlaceholder":108},[66,151944,151945,151947,151950],{"class":68,"line":438},[66,151946,32595],{"class":72},[66,151948,151949],{"class":3793}," withdraw",[66,151951,151898],{"class":76},[66,151953,151954,151956,151958,151960,151962],{"class":68,"line":465},[66,151955,4321],{"class":72},[66,151957,151905],{"class":76},[66,151959,120],{"class":72},[66,151961,962],{"class":102},[66,151963,126],{"class":76},[66,151965,151966,151968,151970,151973],{"class":68,"line":1805},[66,151967,36438],{"class":102},[66,151969,348],{"class":76},[66,151971,151972],{"class":356},"\"取款金额必须大于0\"",[66,151974,313],{"class":76},[66,151976,151977],{"class":68,"line":1817},[66,151978,151927],{"class":72},[66,151980,151981,151983,151985,151987,151989],{"class":68,"line":1822},[66,151982,4321],{"class":72},[66,151984,151905],{"class":76},[66,151986,386],{"class":72},[66,151988,40661],{"class":102},[66,151990,151991],{"class":76},".__balance:\n",[66,151993,151994,151996,151998,152001],{"class":68,"line":1829},[66,151995,36438],{"class":102},[66,151997,348],{"class":76},[66,151999,152000],{"class":356},"\"余额不足\"",[66,152002,313],{"class":76},[66,152004,152005],{"class":68,"line":3529},[66,152006,151927],{"class":72},[66,152008,152009,152011,152013,152016],{"class":68,"line":3557},[66,152010,32639],{"class":102},[66,152012,151857],{"class":76},[66,152014,152015],{"class":72},"-=",[66,152017,151938],{"class":76},[66,152019,152020],{"class":68,"line":3562},[66,152021,109],{"emptyLinePlaceholder":108},[66,152023,152024],{"class":68,"line":3579},[66,152025,109],{"emptyLinePlaceholder":108},[66,152027,152028,152031,152033,152036,152038,152040,152042],{"class":68,"line":3584},[66,152029,152030],{"class":76},"account ",[66,152032,99],{"class":72},[66,152034,152035],{"class":76}," Account(",[66,152037,691],{"class":356},[66,152039,307],{"class":76},[66,152041,8221],{"class":102},[66,152043,313],{"class":76},[66,152045,152046,152049,152051],{"class":68,"line":3589},[66,152047,152048],{"class":76},"account.deposit(",[66,152050,3552],{"class":102},[66,152052,313],{"class":76},[66,152054,152055,152058,152060],{"class":68,"line":3594},[66,152056,152057],{"class":76},"account.withdraw(",[66,152059,310],{"class":102},[66,152061,313],{"class":76},[66,152063,152064,152066],{"class":68,"line":3608},[66,152065,244],{"class":102},[66,152067,152068],{"class":76},"(account.get_balance())\n",[19,152070,152071],{},"封装的意义是避免外部随意修改内部状态。",[14,152073,152075],{"id":152074},"_118-继承","11.8 继承",[19,152077,152078],{},"继承可以让子类复用父类的属性和方法。",[57,152080,152082],{"className":59,"code":152081,"language":61,"meta":62,"style":62},"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",[23,152083,152084,152093,152102,152113,152117,152121,152135,152144,152155,152159,152163,152173,152178],{"__ignoreMap":62},[66,152085,152086,152088,152091],{"class":68,"line":69},[66,152087,16499],{"class":72},[66,152089,152090],{"class":3793}," Animal",[66,152092,126],{"class":76},[66,152094,152095,152097,152100],{"class":68,"line":80},[66,152096,32595],{"class":72},[66,152098,152099],{"class":3793}," eat",[66,152101,32601],{"class":76},[66,152103,152104,152106,152108,152111],{"class":68,"line":112},[66,152105,395],{"class":102},[66,152107,348],{"class":76},[66,152109,152110],{"class":356},"\"吃东西\"",[66,152112,313],{"class":76},[66,152114,152115],{"class":68,"line":129},[66,152116,109],{"emptyLinePlaceholder":108},[66,152118,152119],{"class":68,"line":138},[66,152120,109],{"emptyLinePlaceholder":108},[66,152122,152123,152125,152128,152130,152133],{"class":68,"line":227},[66,152124,16499],{"class":72},[66,152126,152127],{"class":3793}," Dog",[66,152129,348],{"class":76},[66,152131,152132],{"class":3793},"Animal",[66,152134,522],{"class":76},[66,152136,152137,152139,152142],{"class":68,"line":236},[66,152138,32595],{"class":72},[66,152140,152141],{"class":3793}," bark",[66,152143,32601],{"class":76},[66,152145,152146,152148,152150,152153],{"class":68,"line":241},[66,152147,395],{"class":102},[66,152149,348],{"class":76},[66,152151,152152],{"class":356},"\"汪汪\"",[66,152154,313],{"class":76},[66,152156,152157],{"class":68,"line":372},[66,152158,109],{"emptyLinePlaceholder":108},[66,152160,152161],{"class":68,"line":377},[66,152162,109],{"emptyLinePlaceholder":108},[66,152164,152165,152168,152170],{"class":68,"line":392},[66,152166,152167],{"class":76},"dog ",[66,152169,99],{"class":72},[66,152171,152172],{"class":76}," Dog()\n",[66,152174,152175],{"class":68,"line":405},[66,152176,152177],{"class":76},"dog.eat()\n",[66,152179,152180],{"class":68,"line":418},[66,152181,152182],{"class":76},"dog.bark()\n",[19,152184,152185],{},"子类可以扩展新方法，也可以重写父类方法。",[14,152187,152189],{"id":152188},"_119-方法重写","11.9 方法重写",[57,152191,152193],{"className":59,"code":152192,"language":61,"meta":62,"style":62},"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",[23,152194,152195,152203,152212,152223,152227,152231,152243,152251,152261,152265,152269,152282,152290,152301,152305,152309,152317,152327,152331,152336],{"__ignoreMap":62},[66,152196,152197,152199,152201],{"class":68,"line":69},[66,152198,16499],{"class":72},[66,152200,152090],{"class":3793},[66,152202,126],{"class":76},[66,152204,152205,152207,152210],{"class":68,"line":80},[66,152206,32595],{"class":72},[66,152208,152209],{"class":3793}," speak",[66,152211,32601],{"class":76},[66,152213,152214,152216,152218,152221],{"class":68,"line":112},[66,152215,395],{"class":102},[66,152217,348],{"class":76},[66,152219,152220],{"class":356},"\"动物叫\"",[66,152222,313],{"class":76},[66,152224,152225],{"class":68,"line":129},[66,152226,109],{"emptyLinePlaceholder":108},[66,152228,152229],{"class":68,"line":138},[66,152230,109],{"emptyLinePlaceholder":108},[66,152232,152233,152235,152237,152239,152241],{"class":68,"line":227},[66,152234,16499],{"class":72},[66,152236,152127],{"class":3793},[66,152238,348],{"class":76},[66,152240,152132],{"class":3793},[66,152242,522],{"class":76},[66,152244,152245,152247,152249],{"class":68,"line":236},[66,152246,32595],{"class":72},[66,152248,152209],{"class":3793},[66,152250,32601],{"class":76},[66,152252,152253,152255,152257,152259],{"class":68,"line":241},[66,152254,395],{"class":102},[66,152256,348],{"class":76},[66,152258,152152],{"class":356},[66,152260,313],{"class":76},[66,152262,152263],{"class":68,"line":372},[66,152264,109],{"emptyLinePlaceholder":108},[66,152266,152267],{"class":68,"line":377},[66,152268,109],{"emptyLinePlaceholder":108},[66,152270,152271,152273,152276,152278,152280],{"class":68,"line":392},[66,152272,16499],{"class":72},[66,152274,152275],{"class":3793}," Cat",[66,152277,348],{"class":76},[66,152279,152132],{"class":3793},[66,152281,522],{"class":76},[66,152283,152284,152286,152288],{"class":68,"line":405},[66,152285,32595],{"class":72},[66,152287,152209],{"class":3793},[66,152289,32601],{"class":76},[66,152291,152292,152294,152296,152299],{"class":68,"line":418},[66,152293,395],{"class":102},[66,152295,348],{"class":76},[66,152297,152298],{"class":356},"\"喵喵\"",[66,152300,313],{"class":76},[66,152302,152303],{"class":68,"line":430},[66,152304,109],{"emptyLinePlaceholder":108},[66,152306,152307],{"class":68,"line":438},[66,152308,109],{"emptyLinePlaceholder":108},[66,152310,152311,152313,152315],{"class":68,"line":465},[66,152312,152167],{"class":76},[66,152314,99],{"class":72},[66,152316,152172],{"class":76},[66,152318,152319,152322,152324],{"class":68,"line":1805},[66,152320,152321],{"class":76},"cat ",[66,152323,99],{"class":72},[66,152325,152326],{"class":76}," Cat()\n",[66,152328,152329],{"class":68,"line":1817},[66,152330,109],{"emptyLinePlaceholder":108},[66,152332,152333],{"class":68,"line":1822},[66,152334,152335],{"class":76},"dog.speak()\n",[66,152337,152338],{"class":68,"line":1829},[66,152339,152340],{"class":76},"cat.speak()\n",[14,152342,152344],{"id":152343},"_1110-super","11.10 super",[19,152346,152347,152348,152351],{},"子类可以通过 ",[23,152349,152350],{},"super()"," 调用父类方法。",[57,152353,152355],{"className":59,"code":152354,"language":61,"meta":62,"style":62},"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",[23,152356,152357,152365,152374,152384,152388,152392,152404,152413,152424,152434,152438,152442,152458],{"__ignoreMap":62},[66,152358,152359,152361,152363],{"class":68,"line":69},[66,152360,16499],{"class":72},[66,152362,17372],{"class":3793},[66,152364,126],{"class":76},[66,152366,152367,152369,152371],{"class":68,"line":80},[66,152368,32595],{"class":72},[66,152370,32598],{"class":102},[66,152372,152373],{"class":76},"(self, name):\n",[66,152375,152376,152378,152380,152382],{"class":68,"line":112},[66,152377,32639],{"class":102},[66,152379,151555],{"class":76},[66,152381,99],{"class":72},[66,152383,151560],{"class":76},[66,152385,152386],{"class":68,"line":129},[66,152387,109],{"emptyLinePlaceholder":108},[66,152389,152390],{"class":68,"line":138},[66,152391,109],{"emptyLinePlaceholder":108},[66,152393,152394,152396,152398,152400,152402],{"class":68,"line":227},[66,152395,16499],{"class":72},[66,152397,9709],{"class":3793},[66,152399,348],{"class":76},[66,152401,20849],{"class":3793},[66,152403,522],{"class":76},[66,152405,152406,152408,152410],{"class":68,"line":236},[66,152407,32595],{"class":72},[66,152409,32598],{"class":102},[66,152411,152412],{"class":76},"(self, name, score):\n",[66,152414,152415,152417,152419,152421],{"class":68,"line":241},[66,152416,32611],{"class":102},[66,152418,19064],{"class":76},[66,152420,32623],{"class":102},[66,152422,152423],{"class":76},"(name)\n",[66,152425,152426,152428,152430,152432],{"class":68,"line":372},[66,152427,32639],{"class":102},[66,152429,151579],{"class":76},[66,152431,99],{"class":72},[66,152433,3421],{"class":76},[66,152435,152436],{"class":68,"line":377},[66,152437,109],{"emptyLinePlaceholder":108},[66,152439,152440],{"class":68,"line":392},[66,152441,109],{"emptyLinePlaceholder":108},[66,152443,152444,152446,152448,152450,152452,152454,152456],{"class":68,"line":405},[66,152445,151246],{"class":76},[66,152447,99],{"class":72},[66,152449,151650],{"class":76},[66,152451,691],{"class":356},[66,152453,307],{"class":76},[66,152455,2964],{"class":102},[66,152457,313],{"class":76},[66,152459,152460,152462],{"class":68,"line":418},[66,152461,244],{"class":102},[66,152463,152464],{"class":76},"(student.name, student.score)\n",[14,152466,152468],{"id":152467},"_1111-多态","11.11 多态",[19,152470,152471],{},"多态指不同对象响应同一个方法，表现出不同结果。",[57,152473,152475],{"className":59,"code":152474,"language":61,"meta":62,"style":62},"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",[23,152476,152477,152485,152493,152503,152507,152511,152519,152527,152537,152541,152545,152555,152560,152564,152568,152573],{"__ignoreMap":62},[66,152478,152479,152481,152483],{"class":68,"line":69},[66,152480,16499],{"class":72},[66,152482,152127],{"class":3793},[66,152484,126],{"class":76},[66,152486,152487,152489,152491],{"class":68,"line":80},[66,152488,32595],{"class":72},[66,152490,152209],{"class":3793},[66,152492,32601],{"class":76},[66,152494,152495,152497,152499,152501],{"class":68,"line":112},[66,152496,395],{"class":102},[66,152498,348],{"class":76},[66,152500,152152],{"class":356},[66,152502,313],{"class":76},[66,152504,152505],{"class":68,"line":129},[66,152506,109],{"emptyLinePlaceholder":108},[66,152508,152509],{"class":68,"line":138},[66,152510,109],{"emptyLinePlaceholder":108},[66,152512,152513,152515,152517],{"class":68,"line":227},[66,152514,16499],{"class":72},[66,152516,152275],{"class":3793},[66,152518,126],{"class":76},[66,152520,152521,152523,152525],{"class":68,"line":236},[66,152522,32595],{"class":72},[66,152524,152209],{"class":3793},[66,152526,32601],{"class":76},[66,152528,152529,152531,152533,152535],{"class":68,"line":241},[66,152530,395],{"class":102},[66,152532,348],{"class":76},[66,152534,152298],{"class":356},[66,152536,313],{"class":76},[66,152538,152539],{"class":68,"line":372},[66,152540,109],{"emptyLinePlaceholder":108},[66,152542,152543],{"class":68,"line":377},[66,152544,109],{"emptyLinePlaceholder":108},[66,152546,152547,152549,152552],{"class":68,"line":392},[66,152548,33739],{"class":72},[66,152550,152551],{"class":3793}," make_sound",[66,152553,152554],{"class":76},"(animal):\n",[66,152556,152557],{"class":68,"line":405},[66,152558,152559],{"class":76},"    animal.speak()\n",[66,152561,152562],{"class":68,"line":418},[66,152563,109],{"emptyLinePlaceholder":108},[66,152565,152566],{"class":68,"line":430},[66,152567,109],{"emptyLinePlaceholder":108},[66,152569,152570],{"class":68,"line":438},[66,152571,152572],{"class":76},"make_sound(Dog())\n",[66,152574,152575],{"class":68,"line":465},[66,152576,152577],{"class":76},"make_sound(Cat())\n",[19,152579,152580],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,152582,152584],{"id":152583},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,152586,152587],{},"实例属性属于对象：",[57,152589,152591],{"className":59,"code":152590,"language":61,"meta":62,"style":62},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[23,152592,152593,152601,152609],{"__ignoreMap":62},[66,152594,152595,152597,152599],{"class":68,"line":69},[66,152596,16499],{"class":72},[66,152598,9709],{"class":3793},[66,152600,126],{"class":76},[66,152602,152603,152605,152607],{"class":68,"line":80},[66,152604,32595],{"class":72},[66,152606,32598],{"class":102},[66,152608,152373],{"class":76},[66,152610,152611,152613,152615,152617],{"class":68,"line":112},[66,152612,32639],{"class":102},[66,152614,151555],{"class":76},[66,152616,99],{"class":72},[66,152618,151560],{"class":76},[19,152620,152621],{},"类属性属于类，所有对象共享：",[57,152623,152625],{"className":59,"code":152624,"language":61,"meta":62,"style":62},"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",[23,152626,152627,152635,152645,152649,152657,152667,152671,152675,152688,152701,152705,152712,152719],{"__ignoreMap":62},[66,152628,152629,152631,152633],{"class":68,"line":69},[66,152630,16499],{"class":72},[66,152632,9709],{"class":3793},[66,152634,126],{"class":76},[66,152636,152637,152640,152642],{"class":68,"line":80},[66,152638,152639],{"class":76},"    school ",[66,152641,99],{"class":72},[66,152643,152644],{"class":356}," \"黑马学校\"\n",[66,152646,152647],{"class":68,"line":112},[66,152648,109],{"emptyLinePlaceholder":108},[66,152650,152651,152653,152655],{"class":68,"line":129},[66,152652,32595],{"class":72},[66,152654,32598],{"class":102},[66,152656,152373],{"class":76},[66,152658,152659,152661,152663,152665],{"class":68,"line":138},[66,152660,32639],{"class":102},[66,152662,151555],{"class":76},[66,152664,99],{"class":72},[66,152666,151560],{"class":76},[66,152668,152669],{"class":68,"line":227},[66,152670,109],{"emptyLinePlaceholder":108},[66,152672,152673],{"class":68,"line":236},[66,152674,109],{"emptyLinePlaceholder":108},[66,152676,152677,152680,152682,152684,152686],{"class":68,"line":241},[66,152678,152679],{"class":76},"s1 ",[66,152681,99],{"class":72},[66,152683,151650],{"class":76},[66,152685,691],{"class":356},[66,152687,313],{"class":76},[66,152689,152690,152693,152695,152697,152699],{"class":68,"line":372},[66,152691,152692],{"class":76},"s2 ",[66,152694,99],{"class":72},[66,152696,151650],{"class":76},[66,152698,696],{"class":356},[66,152700,313],{"class":76},[66,152702,152703],{"class":68,"line":377},[66,152704,109],{"emptyLinePlaceholder":108},[66,152706,152707,152709],{"class":68,"line":392},[66,152708,244],{"class":102},[66,152710,152711],{"class":76},"(s1.school)\n",[66,152713,152714,152716],{"class":68,"line":405},[66,152715,244],{"class":102},[66,152717,152718],{"class":76},"(s2.school)\n",[66,152720,152721,152723],{"class":68,"line":418},[66,152722,244],{"class":102},[66,152724,152725],{"class":76},"(Student.school)\n",[19,152727,152728],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,152730,152732],{"id":152731},"_1113-类方法和静态方法","11.13 类方法和静态方法",[484,152734,152736],{"id":152735},"_11131-类方法","11.13.1 类方法",[19,152738,152739,152740,152743,152744,158],{},"类方法使用 ",[23,152741,152742],{},"@classmethod","，第一个参数通常是 ",[23,152745,152746],{},"cls",[57,152748,152750],{"className":59,"code":152749,"language":61,"meta":62,"style":62},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[23,152751,152752,152760,152768,152772,152780,152790,152800,152804,152808],{"__ignoreMap":62},[66,152753,152754,152756,152758],{"class":68,"line":69},[66,152755,16499],{"class":72},[66,152757,9709],{"class":3793},[66,152759,126],{"class":76},[66,152761,152762,152764,152766],{"class":68,"line":80},[66,152763,152639],{"class":76},[66,152765,99],{"class":72},[66,152767,152644],{"class":356},[66,152769,152770],{"class":68,"line":112},[66,152771,109],{"emptyLinePlaceholder":108},[66,152773,152774,152777],{"class":68,"line":129},[66,152775,152776],{"class":3793},"    @",[66,152778,152779],{"class":102},"classmethod\n",[66,152781,152782,152784,152787],{"class":68,"line":138},[66,152783,32595],{"class":72},[66,152785,152786],{"class":3793}," get_school",[66,152788,152789],{"class":76},"(cls):\n",[66,152791,152792,152794,152797],{"class":68,"line":227},[66,152793,16557],{"class":72},[66,152795,152796],{"class":102}," cls",[66,152798,152799],{"class":76},".school\n",[66,152801,152802],{"class":68,"line":236},[66,152803,109],{"emptyLinePlaceholder":108},[66,152805,152806],{"class":68,"line":241},[66,152807,109],{"emptyLinePlaceholder":108},[66,152809,152810,152812],{"class":68,"line":372},[66,152811,244],{"class":102},[66,152813,152814],{"class":76},"(Student.get_school())\n",[484,152816,152818],{"id":152817},"_11132-静态方法","11.13.2 静态方法",[19,152820,152821,152822,152825],{},"静态方法使用 ",[23,152823,152824],{},"@staticmethod","，不需要访问实例和类。",[57,152827,152829],{"className":59,"code":152828,"language":61,"meta":62,"style":62},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[23,152830,152831,152840,152847,152856,152867,152871,152875],{"__ignoreMap":62},[66,152832,152833,152835,152838],{"class":68,"line":69},[66,152834,16499],{"class":72},[66,152836,152837],{"class":3793}," MathUtils",[66,152839,126],{"class":76},[66,152841,152842,152844],{"class":68,"line":80},[66,152843,152776],{"class":3793},[66,152845,152846],{"class":102},"staticmethod\n",[66,152848,152849,152851,152853],{"class":68,"line":112},[66,152850,32595],{"class":72},[66,152852,7022],{"class":3793},[66,152854,152855],{"class":76},"(a, b):\n",[66,152857,152858,152860,152862,152864],{"class":68,"line":129},[66,152859,16557],{"class":72},[66,152861,12675],{"class":76},[66,152863,1184],{"class":72},[66,152865,152866],{"class":76}," b\n",[66,152868,152869],{"class":68,"line":138},[66,152870,109],{"emptyLinePlaceholder":108},[66,152872,152873],{"class":68,"line":227},[66,152874,109],{"emptyLinePlaceholder":108},[66,152876,152877,152879,152882,152884,152886,152888],{"class":68,"line":236},[66,152878,244],{"class":102},[66,152880,152881],{"class":76},"(MathUtils.add(",[66,152883,304],{"class":102},[66,152885,307],{"class":76},[66,152887,795],{"class":102},[66,152889,360],{"class":76},[19,152891,152892],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,152894,152896],{"id":152895},"_1114-dataclass","11.14 dataclass",[19,152898,152899,152902],{},[23,152900,152901],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[57,152904,152906],{"className":59,"code":152905,"language":61,"meta":62,"style":62},"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",[23,152907,152908,152920,152924,152928,152933,152941,152949,152957,152965,152969,152973,152993],{"__ignoreMap":62},[66,152909,152910,152912,152915,152917],{"class":68,"line":69},[66,152911,32532],{"class":72},[66,152913,152914],{"class":76}," dataclasses ",[66,152916,284],{"class":72},[66,152918,152919],{"class":76}," dataclass\n",[66,152921,152922],{"class":68,"line":80},[66,152923,109],{"emptyLinePlaceholder":108},[66,152925,152926],{"class":68,"line":112},[66,152927,109],{"emptyLinePlaceholder":108},[66,152929,152930],{"class":68,"line":129},[66,152931,152932],{"class":3793},"@dataclass\n",[66,152934,152935,152937,152939],{"class":68,"line":138},[66,152936,16499],{"class":72},[66,152938,9709],{"class":3793},[66,152940,126],{"class":76},[66,152942,152943,152946],{"class":68,"line":227},[66,152944,152945],{"class":76},"    name: ",[66,152947,152948],{"class":102},"str\n",[66,152950,152951,152954],{"class":68,"line":236},[66,152952,152953],{"class":76},"    age: ",[66,152955,152956],{"class":102},"int\n",[66,152958,152959,152962],{"class":68,"line":241},[66,152960,152961],{"class":76},"    score: ",[66,152963,152964],{"class":102},"float\n",[66,152966,152967],{"class":68,"line":372},[66,152968,109],{"emptyLinePlaceholder":108},[66,152970,152971],{"class":68,"line":377},[66,152972,109],{"emptyLinePlaceholder":108},[66,152974,152975,152977,152979,152981,152983,152985,152987,152989,152991],{"class":68,"line":392},[66,152976,151246],{"class":76},[66,152978,99],{"class":72},[66,152980,151650],{"class":76},[66,152982,691],{"class":356},[66,152984,307],{"class":76},[66,152986,2629],{"class":102},[66,152988,307],{"class":76},[66,152990,2964],{"class":102},[66,152992,313],{"class":76},[66,152994,152995,152997],{"class":68,"line":405},[66,152996,244],{"class":102},[66,152998,727],{"class":76},[19,153000,153001,153002,2204,153004,153007],{},"它会自动生成 ",[23,153003,32623],{},[23,153005,153006],{},"__repr__"," 等方法。适合数据模型类。",[14,153009,153011],{"id":153010},"_1115-小案例学生类","11.15 小案例：学生类",[57,153013,153015],{"className":59,"code":153014,"language":61,"meta":62,"style":62},"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",[23,153016,153017,153025,153034,153046,153056,153066,153076,153080,153089,153102,153106,153115,153121,153133,153145,153157,153169,153173,153177,153183,153193,153202,153212,153220,153228,153237,153241,153245,153253,153289,153293,153297,153322,153329],{"__ignoreMap":62},[66,153018,153019,153021,153023],{"class":68,"line":69},[66,153020,16499],{"class":72},[66,153022,9709],{"class":3793},[66,153024,126],{"class":76},[66,153026,153027,153029,153031],{"class":68,"line":80},[66,153028,32595],{"class":72},[66,153030,32598],{"class":102},[66,153032,153033],{"class":76},"(self, student_id, name, age, score):\n",[66,153035,153036,153038,153041,153043],{"class":68,"line":112},[66,153037,32639],{"class":102},[66,153039,153040],{"class":76},".student_id ",[66,153042,99],{"class":72},[66,153044,153045],{"class":76}," student_id\n",[66,153047,153048,153050,153052,153054],{"class":68,"line":129},[66,153049,32639],{"class":102},[66,153051,151555],{"class":76},[66,153053,99],{"class":72},[66,153055,151560],{"class":76},[66,153057,153058,153060,153062,153064],{"class":68,"line":138},[66,153059,32639],{"class":102},[66,153061,151567],{"class":76},[66,153063,99],{"class":72},[66,153065,151572],{"class":76},[66,153067,153068,153070,153072,153074],{"class":68,"line":227},[66,153069,32639],{"class":102},[66,153071,151579],{"class":76},[66,153073,99],{"class":72},[66,153075,3421],{"class":76},[66,153077,153078],{"class":68,"line":236},[66,153079,109],{"emptyLinePlaceholder":108},[66,153081,153082,153084,153087],{"class":68,"line":241},[66,153083,32595],{"class":72},[66,153085,153086],{"class":3793}," is_passed",[66,153088,32601],{"class":76},[66,153090,153091,153093,153095,153097,153099],{"class":68,"line":372},[66,153092,16557],{"class":72},[66,153094,40661],{"class":102},[66,153096,151579],{"class":76},[66,153098,3540],{"class":72},[66,153100,153101],{"class":102}," 60\n",[66,153103,153104],{"class":68,"line":377},[66,153105,109],{"emptyLinePlaceholder":108},[66,153107,153108,153110,153113],{"class":68,"line":392},[66,153109,32595],{"class":72},[66,153111,153112],{"class":3793}," to_dict",[66,153114,32601],{"class":76},[66,153116,153117,153119],{"class":68,"line":405},[66,153118,16557],{"class":72},[66,153120,17375],{"class":76},[66,153122,153123,153126,153128,153130],{"class":68,"line":418},[66,153124,153125],{"class":356},"            \"student_id\"",[66,153127,53221],{"class":76},[66,153129,32617],{"class":102},[66,153131,153132],{"class":76},".student_id,\n",[66,153134,153135,153138,153140,153142],{"class":68,"line":430},[66,153136,153137],{"class":356},"            \"name\"",[66,153139,53221],{"class":76},[66,153141,32617],{"class":102},[66,153143,153144],{"class":76},".name,\n",[66,153146,153147,153150,153152,153154],{"class":68,"line":438},[66,153148,153149],{"class":356},"            \"age\"",[66,153151,53221],{"class":76},[66,153153,32617],{"class":102},[66,153155,153156],{"class":76},".age,\n",[66,153158,153159,153162,153164,153166],{"class":68,"line":465},[66,153160,153161],{"class":356},"            \"score\"",[66,153163,53221],{"class":76},[66,153165,32617],{"class":102},[66,153167,153168],{"class":76},".score,\n",[66,153170,153171],{"class":68,"line":1805},[66,153172,4353],{"class":76},[66,153174,153175],{"class":68,"line":1817},[66,153176,109],{"emptyLinePlaceholder":108},[66,153178,153179,153181],{"class":68,"line":1822},[66,153180,152776],{"class":3793},[66,153182,152779],{"class":102},[66,153184,153185,153187,153190],{"class":68,"line":1829},[66,153186,32595],{"class":72},[66,153188,153189],{"class":3793}," from_dict",[66,153191,153192],{"class":76},"(cls, data):\n",[66,153194,153195,153197,153199],{"class":68,"line":3529},[66,153196,16557],{"class":72},[66,153198,152796],{"class":102},[66,153200,153201],{"class":76},"(\n",[66,153203,153204,153207,153210],{"class":68,"line":3557},[66,153205,153206],{"class":76},"            data[",[66,153208,153209],{"class":356},"\"student_id\"",[66,153211,89612],{"class":76},[66,153213,153214,153216,153218],{"class":68,"line":3562},[66,153215,153206],{"class":76},[66,153217,64458],{"class":356},[66,153219,89612],{"class":76},[66,153221,153222,153224,153226],{"class":68,"line":3579},[66,153223,153206],{"class":76},[66,153225,70903],{"class":356},[66,153227,89612],{"class":76},[66,153229,153230,153232,153235],{"class":68,"line":3584},[66,153231,153206],{"class":76},[66,153233,153234],{"class":356},"\"score\"",[66,153236,89612],{"class":76},[66,153238,153239],{"class":68,"line":3589},[66,153240,39914],{"class":76},[66,153242,153243],{"class":68,"line":3594},[66,153244,109],{"emptyLinePlaceholder":108},[66,153246,153247,153249,153251],{"class":68,"line":3608},[66,153248,32595],{"class":72},[66,153250,151745],{"class":102},[66,153252,32601],{"class":76},[66,153254,153255,153257,153259,153261,153263,153266,153268,153271,153273,153275,153277,153279,153281,153283,153285,153287],{"class":68,"line":3613},[66,153256,16557],{"class":72},[66,153258,151754],{"class":72},[66,153260,1130],{"class":356},[66,153262,151217],{"class":102},[66,153264,153265],{"class":76},".student_id",[66,153267,457],{"class":102},[66,153269,153270],{"class":102}," {self",[66,153272,82079],{"class":76},[66,153274,457],{"class":102},[66,153276,153270],{"class":102},[66,153278,82091],{"class":76},[66,153280,457],{"class":102},[66,153282,153270],{"class":102},[66,153284,151627],{"class":76},[66,153286,457],{"class":102},[66,153288,26935],{"class":356},[66,153290,153291],{"class":68,"line":4401},[66,153292,109],{"emptyLinePlaceholder":108},[66,153294,153295],{"class":68,"line":4415},[66,153296,109],{"emptyLinePlaceholder":108},[66,153298,153299,153301,153303,153305,153308,153310,153312,153314,153316,153318,153320],{"class":68,"line":4423},[66,153300,151246],{"class":76},[66,153302,99],{"class":72},[66,153304,151650],{"class":76},[66,153306,153307],{"class":356},"\"001\"",[66,153309,307],{"class":76},[66,153311,691],{"class":356},[66,153313,307],{"class":76},[66,153315,2629],{"class":102},[66,153317,307],{"class":76},[66,153319,2964],{"class":102},[66,153321,313],{"class":76},[66,153323,153324,153326],{"class":68,"line":4428},[66,153325,244],{"class":102},[66,153327,153328],{"class":76},"(student.is_passed())\n",[66,153330,153331,153333],{"class":68,"line":4434},[66,153332,244],{"class":102},[66,153334,153335],{"class":76},"(student.to_dict())\n",[19,153337,153338,102792,153341,153344],{},[23,153339,153340],{},"to_dict()",[23,153342,153343],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,153346,153348],{"id":153347},"_1116-易错点","11.16 易错点",[31,153350,153351,153357,153363,153368,153371,153374],{},[34,153352,153353,153354,158],{},"类名推荐使用大驼峰，如 ",[23,153355,153356],{},"StudentManager",[34,153358,153359,153360,153362],{},"方法第一个参数必须写 ",[23,153361,32617],{},"，调用时不用传。",[34,153364,153365,153367],{},[23,153366,32623],{}," 不是普通方法，它在创建对象时自动执行。",[34,153369,153370],{},"私有属性不是绝对安全，只是约定和名称改写。",[34,153372,153373],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[34,153375,153376],{},"类中方法太多时，说明职责可能过重。",[14,153378,153380],{"id":153379},"_1117-本章练习","11.17 本章练习",[31,153382,153383,153389,153395,153400,153413],{},[34,153384,153385,153386,153388],{},"定义 ",[23,153387,151333],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[34,153390,153385,153391,153394],{},[23,153392,153393],{},"Account"," 类，实现存款、取款、查询余额。",[34,153396,153385,153397,153399],{},[23,153398,19029],{}," 类，计算圆的周长和面积。",[34,153401,153385,153402,2204,153405,153408,153409,153412],{},[23,153403,153404],{},"Dog",[23,153406,153407],{},"Cat"," 类，并用同一个函数调用它们的 ",[23,153410,153411],{},"speak()"," 方法。",[34,153414,106139,153415,153417,153418,158],{},[23,153416,152901],{}," 定义一个商品类 ",[23,153419,153420],{},"Product",[1903,153422,153423],{},"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":62,"searchDepth":80,"depth":80,"links":153425},[153426,153427,153428,153429,153430,153431,153433,153434,153435,153436,153437,153438,153439,153443,153444,153445,153446],{"id":151097,"depth":80,"text":151098},{"id":151280,"depth":80,"text":151281},{"id":151344,"depth":80,"text":151345},{"id":151421,"depth":80,"text":151422},{"id":151520,"depth":80,"text":151521},{"id":151683,"depth":80,"text":153432},"11.6 str",{"id":151808,"depth":80,"text":151809},{"id":152074,"depth":80,"text":152075},{"id":152188,"depth":80,"text":152189},{"id":152343,"depth":80,"text":152344},{"id":152467,"depth":80,"text":152468},{"id":152583,"depth":80,"text":152584},{"id":152731,"depth":80,"text":152732,"children":153440},[153441,153442],{"id":152735,"depth":112,"text":152736},{"id":152817,"depth":112,"text":152818},{"id":152895,"depth":80,"text":152896},{"id":153010,"depth":80,"text":153011},{"id":153347,"depth":80,"text":153348},{"id":153379,"depth":80,"text":153380},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":151089,"description":1926},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":153453,"title":153454,"body":153455,"description":1926,"extension":1927,"meta":156757,"navigation":108,"path":156758,"seo":156759,"stem":156760,"__hash__":156761},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":153456,"toc":156733},[153457,153460,153464,153467,153470,153499,153502,153510,153514,153518,153521,153544,153547,153553,153557,154993,154996,155017,155021,155024,155036,155039,155223,155226,155352,155355,155359,155363,155499,155503,155589,155593,155675,155679,155716,155720,155909,155913,155916,156146,156150,156153,156334,156337,156341,156344,156350,156353,156379,156383,156386,156400,156403,156427,156430,156444,156447,156464,156467,156484,156487,156504,156508,156534,156538,156561,156565,156568,156570,156576,156578,156599,156602,156608,156614,156618,156621,156697,156700,156704,156730],[10,153458,153454],{"id":153459},"_12-综合案例与复习路线",[14,153461,153463],{"id":153462},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,153465,153466],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,153468,153469],{},"一个合格的入门综合项目最好覆盖：",[31,153471,153472,153475,153478,153481,153484,153487,153490,153493,153496],{},[34,153473,153474],{},"输入输出。",[34,153476,153477],{},"判断和循环。",[34,153479,153480],{},"函数拆分。",[34,153482,153483],{},"列表、字典等容器。",[34,153485,153486],{},"文件持久化。",[34,153488,153489],{},"异常处理。",[34,153491,153492],{},"模块拆分。",[34,153494,153495],{},"可选：面向对象。",[34,153497,153498],{},"可选：数据可视化。",[19,153500,153501],{},"本章整理两个方向：",[31,153503,153504,153507],{},[34,153505,153506],{},"学生管理系统。",[34,153508,153509],{},"销售数据统计和可视化。",[14,153511,153513],{"id":153512},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[484,153515,153517],{"id":153516},"_1221-需求","12.2.1 需求",[19,153519,153520],{},"实现一个命令行学生管理系统：",[31,153522,153523,153526,153529,153532,153535,153538,153541],{},[34,153524,153525],{},"添加学生。",[34,153527,153528],{},"删除学生。",[34,153530,153531],{},"修改学生。",[34,153533,153534],{},"查询学生。",[34,153536,153537],{},"显示所有学生。",[34,153539,153540],{},"保存到 JSON 文件。",[34,153542,153543],{},"程序启动时自动读取 JSON 文件。",[19,153545,153546],{},"学生字段：",[57,153548,153551],{"className":153549,"code":153550,"language":555,"meta":62},[553],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[23,153552,153550],{"__ignoreMap":62},[14,153554,153556],{"id":153555},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[57,153558,153560],{"className":59,"code":153559,"language":61,"meta":62,"style":62},"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",[23,153561,153562,153568,153578,153582,153596,153600,153604,153613,153625,153631,153635,153641,153672,153682,153689,153700,153706,153710,153714,153724,153755,153781,153785,153789,153798,153809,153820,153831,153842,153853,153864,153875,153879,153883,153893,153903,153919,153926,153933,153937,153941,153951,153959,153966,153979,153989,154000,154004,154008,154017,154025,154031,154043,154051,154062,154066,154070,154079,154095,154099,154106,154117,154122,154126,154142,154157,154172,154176,154181,154189,154197,154205,154213,154217,154222,154233,154237,154241,154250,154265,154275,154279,154291,154302,154306,154310,154315,154319,154330,154334,154338,154347,154362,154370,154374,154386,154396,154400,154404,154419,154432,154445,154449,154462,154474,154486,154490,154494,154505,154509,154513,154522,154537,154545,154549,154561,154571,154575,154579,154584,154588,154592,154602,154608,154630,154649,154668,154687,154692,154696,154700,154709,154717,154728,154732,154736,154762,154772,154777,154781,154785,154793,154803,154807,154815,154820,154835,154839,154851,154856,154869,154874,154886,154891,154904,154909,154922,154927,154939,154949,154953,154959,154969,154973,154977,154989],{"__ignoreMap":62},[66,153563,153564,153566],{"class":68,"line":69},[66,153565,284],{"class":72},[66,153567,148857],{"class":76},[66,153569,153570,153572,153574,153576],{"class":68,"line":80},[66,153571,32532],{"class":72},[66,153573,110084],{"class":76},[66,153575,284],{"class":72},[66,153577,110089],{"class":76},[66,153579,153580],{"class":68,"line":112},[66,153581,109],{"emptyLinePlaceholder":108},[66,153583,153584,153587,153589,153591,153594],{"class":68,"line":129},[66,153585,153586],{"class":102},"DATA_FILE",[66,153588,15369],{"class":72},[66,153590,110318],{"class":76},[66,153592,153593],{"class":356},"\"students.json\"",[66,153595,313],{"class":76},[66,153597,153598],{"class":68,"line":138},[66,153599,109],{"emptyLinePlaceholder":108},[66,153601,153602],{"class":68,"line":227},[66,153603,109],{"emptyLinePlaceholder":108},[66,153605,153606,153608,153611],{"class":68,"line":236},[66,153607,33739],{"class":72},[66,153609,153610],{"class":3793}," load_students",[66,153612,33745],{"class":76},[66,153614,153615,153617,153619,153622],{"class":68,"line":241},[66,153616,380],{"class":72},[66,153618,40718],{"class":72},[66,153620,153621],{"class":102}," DATA_FILE",[66,153623,153624],{"class":76},".exists():\n",[66,153626,153627,153629],{"class":68,"line":372},[66,153628,16557],{"class":72},[66,153630,53622],{"class":76},[66,153632,153633],{"class":68,"line":377},[66,153634,109],{"emptyLinePlaceholder":108},[66,153636,153637,153639],{"class":68,"line":392},[66,153638,127554],{"class":72},[66,153640,126],{"class":76},[66,153642,153643,153646,153648,153650,153652,153654,153656,153658,153660,153662,153664,153666,153668,153670],{"class":68,"line":405},[66,153644,153645],{"class":72},"        with",[66,153647,148557],{"class":102},[66,153649,348],{"class":76},[66,153651,153586],{"class":102},[66,153653,307],{"class":76},[66,153655,148567],{"class":356},[66,153657,307],{"class":76},[66,153659,148572],{"class":1234},[66,153661,99],{"class":72},[66,153663,148577],{"class":356},[66,153665,15519],{"class":76},[66,153667,33176],{"class":72},[66,153669,149919],{"class":1234},[66,153671,126],{"class":76},[66,153673,153674,153676,153678,153680],{"class":68,"line":418},[66,153675,17535],{"class":72},[66,153677,149930],{"class":76},[66,153679,47140],{"class":1234},[66,153681,313],{"class":76},[66,153683,153684,153686],{"class":68,"line":430},[66,153685,127582],{"class":72},[66,153687,153688],{"class":76}," json.JSONDecodeError:\n",[66,153690,153691,153693,153695,153698],{"class":68,"line":438},[66,153692,395],{"class":102},[66,153694,348],{"class":76},[66,153696,153697],{"class":356},"\"数据文件格式错误，已使用空数据启动\"",[66,153699,313],{"class":76},[66,153701,153702,153704],{"class":68,"line":465},[66,153703,16557],{"class":72},[66,153705,53622],{"class":76},[66,153707,153708],{"class":68,"line":1805},[66,153709,109],{"emptyLinePlaceholder":108},[66,153711,153712],{"class":68,"line":1817},[66,153713,109],{"emptyLinePlaceholder":108},[66,153715,153716,153718,153721],{"class":68,"line":1822},[66,153717,33739],{"class":72},[66,153719,153720],{"class":3793}," save_students",[66,153722,153723],{"class":76},"(students):\n",[66,153725,153726,153728,153730,153732,153734,153736,153739,153741,153743,153745,153747,153749,153751,153753],{"class":68,"line":1829},[66,153727,35966],{"class":72},[66,153729,148557],{"class":102},[66,153731,348],{"class":76},[66,153733,153586],{"class":102},[66,153735,307],{"class":76},[66,153737,153738],{"class":356},"\"w\"",[66,153740,307],{"class":76},[66,153742,148572],{"class":1234},[66,153744,99],{"class":72},[66,153746,148577],{"class":356},[66,153748,15519],{"class":76},[66,153750,33176],{"class":72},[66,153752,149919],{"class":1234},[66,153754,126],{"class":76},[66,153756,153757,153760,153762,153764,153766,153768,153770,153772,153775,153777,153779],{"class":68,"line":3529},[66,153758,153759],{"class":76},"        json.dump(students, ",[66,153761,47140],{"class":1234},[66,153763,307],{"class":76},[66,153765,148903],{"class":1234},[66,153767,99],{"class":72},[66,153769,35775],{"class":102},[66,153771,307],{"class":76},[66,153773,153774],{"class":1234},"indent",[66,153776,99],{"class":72},[66,153778,795],{"class":102},[66,153780,313],{"class":76},[66,153782,153783],{"class":68,"line":3557},[66,153784,109],{"emptyLinePlaceholder":108},[66,153786,153787],{"class":68,"line":3562},[66,153788,109],{"emptyLinePlaceholder":108},[66,153790,153791,153793,153796],{"class":68,"line":3579},[66,153792,33739],{"class":72},[66,153794,153795],{"class":3793}," show_menu",[66,153797,33745],{"class":76},[66,153799,153800,153802,153804,153807],{"class":68,"line":3584},[66,153801,132],{"class":102},[66,153803,348],{"class":76},[66,153805,153806],{"class":356},"\"====== 学生管理系统 ======\"",[66,153808,313],{"class":76},[66,153810,153811,153813,153815,153818],{"class":68,"line":3589},[66,153812,132],{"class":102},[66,153814,348],{"class":76},[66,153816,153817],{"class":356},"\"1. 添加学生\"",[66,153819,313],{"class":76},[66,153821,153822,153824,153826,153829],{"class":68,"line":3594},[66,153823,132],{"class":102},[66,153825,348],{"class":76},[66,153827,153828],{"class":356},"\"2. 删除学生\"",[66,153830,313],{"class":76},[66,153832,153833,153835,153837,153840],{"class":68,"line":3608},[66,153834,132],{"class":102},[66,153836,348],{"class":76},[66,153838,153839],{"class":356},"\"3. 修改学生\"",[66,153841,313],{"class":76},[66,153843,153844,153846,153848,153851],{"class":68,"line":3613},[66,153845,132],{"class":102},[66,153847,348],{"class":76},[66,153849,153850],{"class":356},"\"4. 查询学生\"",[66,153852,313],{"class":76},[66,153854,153855,153857,153859,153862],{"class":68,"line":4401},[66,153856,132],{"class":102},[66,153858,348],{"class":76},[66,153860,153861],{"class":356},"\"5. 显示所有学生\"",[66,153863,313],{"class":76},[66,153865,153866,153868,153870,153873],{"class":68,"line":4415},[66,153867,132],{"class":102},[66,153869,348],{"class":76},[66,153871,153872],{"class":356},"\"0. 退出系统\"",[66,153874,313],{"class":76},[66,153876,153877],{"class":68,"line":4423},[66,153878,109],{"emptyLinePlaceholder":108},[66,153880,153881],{"class":68,"line":4428},[66,153882,109],{"emptyLinePlaceholder":108},[66,153884,153885,153887,153890],{"class":68,"line":4434},[66,153886,33739],{"class":72},[66,153888,153889],{"class":3793}," find_student",[66,153891,153892],{"class":76},"(students, student_id):\n",[66,153894,153895,153897,153899,153901],{"class":68,"line":4440},[66,153896,1083],{"class":72},[66,153898,715],{"class":76},[66,153900,507],{"class":72},[66,153902,720],{"class":76},[66,153904,153905,153907,153910,153912,153914,153916],{"class":68,"line":4445},[66,153906,4321],{"class":72},[66,153908,153909],{"class":76}," student[",[66,153911,153209],{"class":356},[66,153913,6259],{"class":76},[66,153915,531],{"class":72},[66,153917,153918],{"class":76}," student_id:\n",[66,153920,153921,153923],{"class":68,"line":9759},[66,153922,17535],{"class":72},[66,153924,153925],{"class":76}," student\n",[66,153927,153928,153930],{"class":68,"line":9783},[66,153929,5907],{"class":72},[66,153931,153932],{"class":102}," None\n",[66,153934,153935],{"class":68,"line":9788},[66,153936,109],{"emptyLinePlaceholder":108},[66,153938,153939],{"class":68,"line":9794},[66,153940,109],{"emptyLinePlaceholder":108},[66,153942,153943,153945,153948],{"class":68,"line":9821},[66,153944,33739],{"class":72},[66,153946,153947],{"class":3793}," input_int",[66,153949,153950],{"class":76},"(prompt):\n",[66,153952,153953,153955,153957],{"class":68,"line":9826},[66,153954,4077],{"class":72},[66,153956,333],{"class":102},[66,153958,126],{"class":76},[66,153960,153961,153964],{"class":68,"line":9832},[66,153962,153963],{"class":72},"        try",[66,153965,126],{"class":76},[66,153967,153968,153970,153972,153974,153976],{"class":68,"line":9844},[66,153969,17535],{"class":72},[66,153971,345],{"class":102},[66,153973,348],{"class":76},[66,153975,351],{"class":102},[66,153977,153978],{"class":76},"(prompt))\n",[66,153980,153981,153984,153987],{"class":68,"line":9856},[66,153982,153983],{"class":72},"        except",[66,153985,153986],{"class":102}," ValueError",[66,153988,126],{"class":76},[66,153990,153991,153993,153995,153998],{"class":68,"line":9868},[66,153992,36438],{"class":102},[66,153994,348],{"class":76},[66,153996,153997],{"class":356},"\"请输入整数\"",[66,153999,313],{"class":76},[66,154001,154002],{"class":68,"line":11523},[66,154003,109],{"emptyLinePlaceholder":108},[66,154005,154006],{"class":68,"line":11548},[66,154007,109],{"emptyLinePlaceholder":108},[66,154009,154010,154012,154015],{"class":68,"line":11571},[66,154011,33739],{"class":72},[66,154013,154014],{"class":3793}," input_float",[66,154016,153950],{"class":76},[66,154018,154019,154021,154023],{"class":68,"line":11595},[66,154020,4077],{"class":72},[66,154022,333],{"class":102},[66,154024,126],{"class":76},[66,154026,154027,154029],{"class":68,"line":11600},[66,154028,153963],{"class":72},[66,154030,126],{"class":76},[66,154032,154033,154035,154037,154039,154041],{"class":68,"line":11605},[66,154034,17535],{"class":72},[66,154036,111569],{"class":102},[66,154038,348],{"class":76},[66,154040,351],{"class":102},[66,154042,153978],{"class":76},[66,154044,154045,154047,154049],{"class":68,"line":11610},[66,154046,153983],{"class":72},[66,154048,153986],{"class":102},[66,154050,126],{"class":76},[66,154052,154053,154055,154057,154060],{"class":68,"line":11619},[66,154054,36438],{"class":102},[66,154056,348],{"class":76},[66,154058,154059],{"class":356},"\"请输入数字\"",[66,154061,313],{"class":76},[66,154063,154064],{"class":68,"line":11624},[66,154065,109],{"emptyLinePlaceholder":108},[66,154067,154068],{"class":68,"line":11630},[66,154069,109],{"emptyLinePlaceholder":108},[66,154071,154072,154074,154077],{"class":68,"line":11651},[66,154073,33739],{"class":72},[66,154075,154076],{"class":3793}," add_student",[66,154078,153723],{"class":76},[66,154080,154081,154084,154086,154088,154090,154093],{"class":68,"line":11657},[66,154082,154083],{"class":76},"    student_id ",[66,154085,99],{"class":72},[66,154087,1532],{"class":102},[66,154089,348],{"class":76},[66,154091,154092],{"class":356},"\"请输入学号:\"",[66,154094,313],{"class":76},[66,154096,154097],{"class":68,"line":11671},[66,154098,109],{"emptyLinePlaceholder":108},[66,154100,154101,154103],{"class":68,"line":11677},[66,154102,380],{"class":72},[66,154104,154105],{"class":76}," find_student(students, student_id):\n",[66,154107,154108,154110,154112,154115],{"class":68,"line":11704},[66,154109,395],{"class":102},[66,154111,348],{"class":76},[66,154113,154114],{"class":356},"\"学号已存在\"",[66,154116,313],{"class":76},[66,154118,154119],{"class":68,"line":11713},[66,154120,154121],{"class":72},"        return\n",[66,154123,154124],{"class":68,"line":11719},[66,154125,109],{"emptyLinePlaceholder":108},[66,154127,154128,154131,154133,154135,154137,154140],{"class":68,"line":11727},[66,154129,154130],{"class":76},"    name ",[66,154132,99],{"class":72},[66,154134,1532],{"class":102},[66,154136,348],{"class":76},[66,154138,154139],{"class":356},"\"请输入姓名:\"",[66,154141,313],{"class":76},[66,154143,154144,154147,154149,154152,154155],{"class":68,"line":11732},[66,154145,154146],{"class":76},"    age ",[66,154148,99],{"class":72},[66,154150,154151],{"class":76}," input_int(",[66,154153,154154],{"class":356},"\"请输入年龄:\"",[66,154156,313],{"class":76},[66,154158,154159,154162,154164,154167,154170],{"class":68,"line":18407},[66,154160,154161],{"class":76},"    score ",[66,154163,99],{"class":72},[66,154165,154166],{"class":76}," input_float(",[66,154168,154169],{"class":356},"\"请输入成绩:\"",[66,154171,313],{"class":76},[66,154173,154174],{"class":68,"line":18413},[66,154175,109],{"emptyLinePlaceholder":108},[66,154177,154178],{"class":68,"line":18436},[66,154179,154180],{"class":76},"    students.append({\n",[66,154182,154183,154186],{"class":68,"line":18442},[66,154184,154185],{"class":356},"        \"student_id\"",[66,154187,154188],{"class":76},": student_id,\n",[66,154190,154191,154194],{"class":68,"line":18465},[66,154192,154193],{"class":356},"        \"name\"",[66,154195,154196],{"class":76},": name,\n",[66,154198,154199,154202],{"class":68,"line":18479},[66,154200,154201],{"class":356},"        \"age\"",[66,154203,154204],{"class":76},": age,\n",[66,154206,154207,154210],{"class":68,"line":18499},[66,154208,154209],{"class":356},"        \"score\"",[66,154211,154212],{"class":76},": score,\n",[66,154214,154215],{"class":68,"line":18505},[66,154216,35249],{"class":76},[66,154218,154219],{"class":68,"line":18516},[66,154220,154221],{"class":76},"    save_students(students)\n",[66,154223,154224,154226,154228,154231],{"class":68,"line":18539},[66,154225,132],{"class":102},[66,154227,348],{"class":76},[66,154229,154230],{"class":356},"\"添加成功\"",[66,154232,313],{"class":76},[66,154234,154235],{"class":68,"line":18561},[66,154236,109],{"emptyLinePlaceholder":108},[66,154238,154239],{"class":68,"line":18566},[66,154240,109],{"emptyLinePlaceholder":108},[66,154242,154243,154245,154248],{"class":68,"line":18572},[66,154244,33739],{"class":72},[66,154246,154247],{"class":3793}," delete_student",[66,154249,153723],{"class":76},[66,154251,154252,154254,154256,154258,154260,154263],{"class":68,"line":18586},[66,154253,154083],{"class":76},[66,154255,99],{"class":72},[66,154257,1532],{"class":102},[66,154259,348],{"class":76},[66,154261,154262],{"class":356},"\"请输入要删除的学号:\"",[66,154264,313],{"class":76},[66,154266,154267,154270,154272],{"class":68,"line":18599},[66,154268,154269],{"class":76},"    student ",[66,154271,99],{"class":72},[66,154273,154274],{"class":76}," find_student(students, student_id)\n",[66,154276,154277],{"class":68,"line":18604},[66,154278,109],{"emptyLinePlaceholder":108},[66,154280,154281,154283,154285,154287,154289],{"class":68,"line":18618},[66,154282,380],{"class":72},[66,154284,715],{"class":76},[66,154286,40715],{"class":72},[66,154288,40721],{"class":102},[66,154290,126],{"class":76},[66,154292,154293,154295,154297,154300],{"class":68,"line":18623},[66,154294,395],{"class":102},[66,154296,348],{"class":76},[66,154298,154299],{"class":356},"\"学生不存在\"",[66,154301,313],{"class":76},[66,154303,154304],{"class":68,"line":18629},[66,154305,154121],{"class":72},[66,154307,154308],{"class":68,"line":18634},[66,154309,109],{"emptyLinePlaceholder":108},[66,154311,154312],{"class":68,"line":18648},[66,154313,154314],{"class":76},"    students.remove(student)\n",[66,154316,154317],{"class":68,"line":18653},[66,154318,154221],{"class":76},[66,154320,154321,154323,154325,154328],{"class":68,"line":18658},[66,154322,132],{"class":102},[66,154324,348],{"class":76},[66,154326,154327],{"class":356},"\"删除成功\"",[66,154329,313],{"class":76},[66,154331,154332],{"class":68,"line":18672},[66,154333,109],{"emptyLinePlaceholder":108},[66,154335,154336],{"class":68,"line":18684},[66,154337,109],{"emptyLinePlaceholder":108},[66,154339,154340,154342,154345],{"class":68,"line":18689},[66,154341,33739],{"class":72},[66,154343,154344],{"class":3793}," update_student",[66,154346,153723],{"class":76},[66,154348,154349,154351,154353,154355,154357,154360],{"class":68,"line":18702},[66,154350,154083],{"class":76},[66,154352,99],{"class":72},[66,154354,1532],{"class":102},[66,154356,348],{"class":76},[66,154358,154359],{"class":356},"\"请输入要修改的学号:\"",[66,154361,313],{"class":76},[66,154363,154364,154366,154368],{"class":68,"line":18707},[66,154365,154269],{"class":76},[66,154367,99],{"class":72},[66,154369,154274],{"class":76},[66,154371,154372],{"class":68,"line":18712},[66,154373,109],{"emptyLinePlaceholder":108},[66,154375,154376,154378,154380,154382,154384],{"class":68,"line":18717},[66,154377,380],{"class":72},[66,154379,715],{"class":76},[66,154381,40715],{"class":72},[66,154383,40721],{"class":102},[66,154385,126],{"class":76},[66,154387,154388,154390,154392,154394],{"class":68,"line":18730},[66,154389,395],{"class":102},[66,154391,348],{"class":76},[66,154393,154299],{"class":356},[66,154395,313],{"class":76},[66,154397,154398],{"class":68,"line":18735},[66,154399,154121],{"class":72},[66,154401,154402],{"class":68,"line":34423},[66,154403,109],{"emptyLinePlaceholder":108},[66,154405,154406,154408,154410,154412,154414,154417],{"class":68,"line":34429},[66,154407,154130],{"class":76},[66,154409,99],{"class":72},[66,154411,1532],{"class":102},[66,154413,348],{"class":76},[66,154415,154416],{"class":356},"\"请输入新姓名:\"",[66,154418,313],{"class":76},[66,154420,154421,154423,154425,154427,154430],{"class":68,"line":34435},[66,154422,154146],{"class":76},[66,154424,99],{"class":72},[66,154426,154151],{"class":76},[66,154428,154429],{"class":356},"\"请输入新年龄:\"",[66,154431,313],{"class":76},[66,154433,154434,154436,154438,154440,154443],{"class":68,"line":34441},[66,154435,154161],{"class":76},[66,154437,99],{"class":72},[66,154439,154166],{"class":76},[66,154441,154442],{"class":356},"\"请输入新成绩:\"",[66,154444,313],{"class":76},[66,154446,154447],{"class":68,"line":34447},[66,154448,109],{"emptyLinePlaceholder":108},[66,154450,154451,154454,154456,154458,154460],{"class":68,"line":34458},[66,154452,154453],{"class":76},"    student[",[66,154455,64458],{"class":356},[66,154457,6259],{"class":76},[66,154459,99],{"class":72},[66,154461,151560],{"class":76},[66,154463,154464,154466,154468,154470,154472],{"class":68,"line":34464},[66,154465,154453],{"class":76},[66,154467,70903],{"class":356},[66,154469,6259],{"class":76},[66,154471,99],{"class":72},[66,154473,151572],{"class":76},[66,154475,154476,154478,154480,154482,154484],{"class":68,"line":34484},[66,154477,154453],{"class":76},[66,154479,153234],{"class":356},[66,154481,6259],{"class":76},[66,154483,99],{"class":72},[66,154485,3421],{"class":76},[66,154487,154488],{"class":68,"line":34490},[66,154489,109],{"emptyLinePlaceholder":108},[66,154491,154492],{"class":68,"line":34501},[66,154493,154221],{"class":76},[66,154495,154496,154498,154500,154503],{"class":68,"line":34507},[66,154497,132],{"class":102},[66,154499,348],{"class":76},[66,154501,154502],{"class":356},"\"修改成功\"",[66,154504,313],{"class":76},[66,154506,154507],{"class":68,"line":34513},[66,154508,109],{"emptyLinePlaceholder":108},[66,154510,154511],{"class":68,"line":34519},[66,154512,109],{"emptyLinePlaceholder":108},[66,154514,154515,154517,154520],{"class":68,"line":34525},[66,154516,33739],{"class":72},[66,154518,154519],{"class":3793}," query_student",[66,154521,153723],{"class":76},[66,154523,154524,154526,154528,154530,154532,154535],{"class":68,"line":34531},[66,154525,154083],{"class":76},[66,154527,99],{"class":72},[66,154529,1532],{"class":102},[66,154531,348],{"class":76},[66,154533,154534],{"class":356},"\"请输入要查询的学号:\"",[66,154536,313],{"class":76},[66,154538,154539,154541,154543],{"class":68,"line":34537},[66,154540,154269],{"class":76},[66,154542,99],{"class":72},[66,154544,154274],{"class":76},[66,154546,154547],{"class":68,"line":34543},[66,154548,109],{"emptyLinePlaceholder":108},[66,154550,154551,154553,154555,154557,154559],{"class":68,"line":34563},[66,154552,380],{"class":72},[66,154554,715],{"class":76},[66,154556,40715],{"class":72},[66,154558,40721],{"class":102},[66,154560,126],{"class":76},[66,154562,154563,154565,154567,154569],{"class":68,"line":34569},[66,154564,395],{"class":102},[66,154566,348],{"class":76},[66,154568,154299],{"class":356},[66,154570,313],{"class":76},[66,154572,154573],{"class":68,"line":34585},[66,154574,154121],{"class":72},[66,154576,154577],{"class":68,"line":34591},[66,154578,109],{"emptyLinePlaceholder":108},[66,154580,154581],{"class":68,"line":34605},[66,154582,154583],{"class":76},"    print_student(student)\n",[66,154585,154586],{"class":68,"line":34611},[66,154587,109],{"emptyLinePlaceholder":108},[66,154589,154590],{"class":68,"line":34626},[66,154591,109],{"emptyLinePlaceholder":108},[66,154593,154594,154596,154599],{"class":68,"line":34632},[66,154595,33739],{"class":72},[66,154597,154598],{"class":3793}," print_student",[66,154600,154601],{"class":76},"(student):\n",[66,154603,154604,154606],{"class":68,"line":34641},[66,154605,132],{"class":102},[66,154607,153201],{"class":76},[66,154609,154610,154613,154615,154617,154620,154623,154625,154628],{"class":68,"line":34647},[66,154611,154612],{"class":72},"        f",[66,154614,1130],{"class":356},[66,154616,451],{"class":102},[66,154618,154619],{"class":76},"student[",[66,154621,154622],{"class":356},"'student_id'",[66,154624,2917],{"class":76},[66,154626,154627],{"class":102},"}\\t",[66,154629,26935],{"class":356},[66,154631,154632,154634,154636,154638,154640,154643,154645,154647],{"class":68,"line":34656},[66,154633,154612],{"class":72},[66,154635,1130],{"class":356},[66,154637,451],{"class":102},[66,154639,154619],{"class":76},[66,154641,154642],{"class":356},"'name'",[66,154644,2917],{"class":76},[66,154646,154627],{"class":102},[66,154648,26935],{"class":356},[66,154650,154651,154653,154655,154657,154659,154662,154664,154666],{"class":68,"line":34662},[66,154652,154612],{"class":72},[66,154654,1130],{"class":356},[66,154656,451],{"class":102},[66,154658,154619],{"class":76},[66,154660,154661],{"class":356},"'age'",[66,154663,2917],{"class":76},[66,154665,154627],{"class":102},[66,154667,26935],{"class":356},[66,154669,154670,154672,154674,154676,154678,154681,154683,154685],{"class":68,"line":34668},[66,154671,154612],{"class":72},[66,154673,1130],{"class":356},[66,154675,451],{"class":102},[66,154677,154619],{"class":76},[66,154679,154680],{"class":356},"'score'",[66,154682,2917],{"class":76},[66,154684,457],{"class":102},[66,154686,26935],{"class":356},[66,154688,154689],{"class":68,"line":34677},[66,154690,154691],{"class":76},"    )\n",[66,154693,154694],{"class":68,"line":34683},[66,154695,109],{"emptyLinePlaceholder":108},[66,154697,154698],{"class":68,"line":34694},[66,154699,109],{"emptyLinePlaceholder":108},[66,154701,154702,154704,154707],{"class":68,"line":34700},[66,154703,33739],{"class":72},[66,154705,154706],{"class":3793}," show_all_students",[66,154708,153723],{"class":76},[66,154710,154711,154713,154715],{"class":68,"line":34719},[66,154712,380],{"class":72},[66,154714,40718],{"class":72},[66,154716,720],{"class":76},[66,154718,154719,154721,154723,154726],{"class":68,"line":34725},[66,154720,395],{"class":102},[66,154722,348],{"class":76},[66,154724,154725],{"class":356},"\"暂无学生\"",[66,154727,313],{"class":76},[66,154729,154730],{"class":68,"line":34736},[66,154731,154121],{"class":72},[66,154733,154734],{"class":68,"line":34742},[66,154735,109],{"emptyLinePlaceholder":108},[66,154737,154738,154740,154742,154745,154747,154750,154752,154755,154757,154760],{"class":68,"line":34762},[66,154739,132],{"class":102},[66,154741,348],{"class":76},[66,154743,154744],{"class":356},"\"学号",[66,154746,1242],{"class":102},[66,154748,154749],{"class":356},"姓名",[66,154751,1242],{"class":102},[66,154753,154754],{"class":356},"年龄",[66,154756,1242],{"class":102},[66,154758,154759],{"class":356},"成绩\"",[66,154761,313],{"class":76},[66,154763,154764,154766,154768,154770],{"class":68,"line":34778},[66,154765,1083],{"class":72},[66,154767,715],{"class":76},[66,154769,507],{"class":72},[66,154771,720],{"class":76},[66,154773,154774],{"class":68,"line":34784},[66,154775,154776],{"class":76},"        print_student(student)\n",[66,154778,154779],{"class":68,"line":34798},[66,154780,109],{"emptyLinePlaceholder":108},[66,154782,154783],{"class":68,"line":34804},[66,154784,109],{"emptyLinePlaceholder":108},[66,154786,154787,154789,154791],{"class":68,"line":34810},[66,154788,33739],{"class":72},[66,154790,3803],{"class":3793},[66,154792,33745],{"class":76},[66,154794,154795,154798,154800],{"class":68,"line":34821},[66,154796,154797],{"class":76},"    students ",[66,154799,99],{"class":72},[66,154801,154802],{"class":76}," load_students()\n",[66,154804,154805],{"class":68,"line":34827},[66,154806,109],{"emptyLinePlaceholder":108},[66,154808,154809,154811,154813],{"class":68,"line":34833},[66,154810,4077],{"class":72},[66,154812,333],{"class":102},[66,154814,126],{"class":76},[66,154816,154817],{"class":68,"line":34843},[66,154818,154819],{"class":76},"        show_menu()\n",[66,154821,154822,154825,154827,154829,154831,154833],{"class":68,"line":34849},[66,154823,154824],{"class":76},"        choice ",[66,154826,99],{"class":72},[66,154828,1532],{"class":102},[66,154830,348],{"class":76},[66,154832,1710],{"class":356},[66,154834,313],{"class":76},[66,154836,154837],{"class":68,"line":34860},[66,154838,109],{"emptyLinePlaceholder":108},[66,154840,154841,154843,154845,154847,154849],{"class":68,"line":34866},[66,154842,4321],{"class":72},[66,154844,1723],{"class":76},[66,154846,531],{"class":72},[66,154848,1728],{"class":356},[66,154850,126],{"class":76},[66,154852,154853],{"class":68,"line":34876},[66,154854,154855],{"class":76},"            add_student(students)\n",[66,154857,154858,154861,154863,154865,154867],{"class":68,"line":34881},[66,154859,154860],{"class":72},"        elif",[66,154862,1723],{"class":76},[66,154864,531],{"class":72},[66,154866,1752],{"class":356},[66,154868,126],{"class":76},[66,154870,154871],{"class":68,"line":34887},[66,154872,154873],{"class":76},"            delete_student(students)\n",[66,154875,154876,154878,154880,154882,154884],{"class":68,"line":34936},[66,154877,154860],{"class":72},[66,154879,1723],{"class":76},[66,154881,531],{"class":72},[66,154883,1776],{"class":356},[66,154885,126],{"class":76},[66,154887,154888],{"class":68,"line":34983},[66,154889,154890],{"class":76},"            update_student(students)\n",[66,154892,154893,154895,154897,154899,154902],{"class":68,"line":34988},[66,154894,154860],{"class":72},[66,154896,1723],{"class":76},[66,154898,531],{"class":72},[66,154900,154901],{"class":356}," \"4\"",[66,154903,126],{"class":76},[66,154905,154906],{"class":68,"line":34994},[66,154907,154908],{"class":76},"            query_student(students)\n",[66,154910,154911,154913,154915,154917,154920],{"class":68,"line":35013},[66,154912,154860],{"class":72},[66,154914,1723],{"class":76},[66,154916,531],{"class":72},[66,154918,154919],{"class":356}," \"5\"",[66,154921,126],{"class":76},[66,154923,154924],{"class":68,"line":35019},[66,154925,154926],{"class":76},"            show_all_students(students)\n",[66,154928,154929,154931,154933,154935,154937],{"class":68,"line":35038},[66,154930,154860],{"class":72},[66,154932,1723],{"class":76},[66,154934,531],{"class":72},[66,154936,1800],{"class":356},[66,154938,126],{"class":76},[66,154940,154941,154943,154945,154947],{"class":68,"line":35044},[66,154942,36438],{"class":102},[66,154944,348],{"class":76},[66,154946,1812],{"class":356},[66,154948,313],{"class":76},[66,154950,154951],{"class":68,"line":35050},[66,154952,116869],{"class":72},[66,154954,154955,154957],{"class":68,"line":35060},[66,154956,4358],{"class":72},[66,154958,126],{"class":76},[66,154960,154961,154963,154965,154967],{"class":68,"line":35065},[66,154962,36438],{"class":102},[66,154964,348],{"class":76},[66,154966,1836],{"class":356},[66,154968,313],{"class":76},[66,154970,154971],{"class":68,"line":35071},[66,154972,109],{"emptyLinePlaceholder":108},[66,154974,154975],{"class":68,"line":35087},[66,154976,109],{"emptyLinePlaceholder":108},[66,154978,154979,154981,154983,154985,154987],{"class":68,"line":35132},[66,154980,3373],{"class":72},[66,154982,33014],{"class":102},[66,154984,959],{"class":72},[66,154986,103335],{"class":356},[66,154988,126],{"class":76},[66,154990,154991],{"class":68,"line":35138},[66,154992,103342],{"class":76},[19,154994,154995],{},"这个项目串联了：",[31,154997,154998,155001,155004,155007,155010,155012],{},[34,154999,155000],{},"菜单循环。",[34,155002,155003],{},"函数封装。",[34,155005,155006],{},"列表字典。",[34,155008,155009],{},"JSON 读写。",[34,155011,153489],{},[34,155013,155014,158],{},[23,155015,155016],{},"if __name__ == \"__main__\"",[14,155018,155020],{"id":155019},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,155022,155023],{},"可以进一步拆成两个类：",[31,155025,155026,155031],{},[34,155027,155028,155030],{},[23,155029,151333],{},"：表示单个学生。",[34,155032,155033,155035],{},[23,155034,153356],{},"：负责学生增删改查和文件保存。",[19,155037,155038],{},"示意代码：",[57,155040,155042],{"className":59,"code":155041,"language":61,"meta":62,"style":62},"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",[23,155043,155044,155054,155058,155062,155066,155074,155081,155087,155093,155099,155103,155111,155117,155127,155137,155147,155157,155161,155165,155171,155179,155187,155195,155203,155211,155219],{"__ignoreMap":62},[66,155045,155046,155048,155050,155052],{"class":68,"line":69},[66,155047,32532],{"class":72},[66,155049,152914],{"class":76},[66,155051,284],{"class":72},[66,155053,152919],{"class":76},[66,155055,155056],{"class":68,"line":80},[66,155057,109],{"emptyLinePlaceholder":108},[66,155059,155060],{"class":68,"line":112},[66,155061,109],{"emptyLinePlaceholder":108},[66,155063,155064],{"class":68,"line":129},[66,155065,152932],{"class":3793},[66,155067,155068,155070,155072],{"class":68,"line":138},[66,155069,16499],{"class":72},[66,155071,9709],{"class":3793},[66,155073,126],{"class":76},[66,155075,155076,155079],{"class":68,"line":227},[66,155077,155078],{"class":76},"    student_id: ",[66,155080,152948],{"class":102},[66,155082,155083,155085],{"class":68,"line":236},[66,155084,152945],{"class":76},[66,155086,152948],{"class":102},[66,155088,155089,155091],{"class":68,"line":241},[66,155090,152953],{"class":76},[66,155092,152956],{"class":102},[66,155094,155095,155097],{"class":68,"line":372},[66,155096,152961],{"class":76},[66,155098,152964],{"class":102},[66,155100,155101],{"class":68,"line":377},[66,155102,109],{"emptyLinePlaceholder":108},[66,155104,155105,155107,155109],{"class":68,"line":392},[66,155106,32595],{"class":72},[66,155108,153112],{"class":3793},[66,155110,32601],{"class":76},[66,155112,155113,155115],{"class":68,"line":405},[66,155114,16557],{"class":72},[66,155116,17375],{"class":76},[66,155118,155119,155121,155123,155125],{"class":68,"line":418},[66,155120,153125],{"class":356},[66,155122,53221],{"class":76},[66,155124,32617],{"class":102},[66,155126,153132],{"class":76},[66,155128,155129,155131,155133,155135],{"class":68,"line":430},[66,155130,153137],{"class":356},[66,155132,53221],{"class":76},[66,155134,32617],{"class":102},[66,155136,153144],{"class":76},[66,155138,155139,155141,155143,155145],{"class":68,"line":438},[66,155140,153149],{"class":356},[66,155142,53221],{"class":76},[66,155144,32617],{"class":102},[66,155146,153156],{"class":76},[66,155148,155149,155151,155153,155155],{"class":68,"line":465},[66,155150,153161],{"class":356},[66,155152,53221],{"class":76},[66,155154,32617],{"class":102},[66,155156,153168],{"class":76},[66,155158,155159],{"class":68,"line":1805},[66,155160,4353],{"class":76},[66,155162,155163],{"class":68,"line":1817},[66,155164,109],{"emptyLinePlaceholder":108},[66,155166,155167,155169],{"class":68,"line":1822},[66,155168,152776],{"class":3793},[66,155170,152779],{"class":102},[66,155172,155173,155175,155177],{"class":68,"line":1829},[66,155174,32595],{"class":72},[66,155176,153189],{"class":3793},[66,155178,153192],{"class":76},[66,155180,155181,155183,155185],{"class":68,"line":3529},[66,155182,16557],{"class":72},[66,155184,152796],{"class":102},[66,155186,153201],{"class":76},[66,155188,155189,155191,155193],{"class":68,"line":3557},[66,155190,153206],{"class":76},[66,155192,153209],{"class":356},[66,155194,89612],{"class":76},[66,155196,155197,155199,155201],{"class":68,"line":3562},[66,155198,153206],{"class":76},[66,155200,64458],{"class":356},[66,155202,89612],{"class":76},[66,155204,155205,155207,155209],{"class":68,"line":3579},[66,155206,153206],{"class":76},[66,155208,70903],{"class":356},[66,155210,89612],{"class":76},[66,155212,155213,155215,155217],{"class":68,"line":3584},[66,155214,153206],{"class":76},[66,155216,153234],{"class":356},[66,155218,89612],{"class":76},[66,155220,155221],{"class":68,"line":3589},[66,155222,39914],{"class":76},[19,155224,155225],{},"管理器示意：",[57,155227,155229],{"className":59,"code":155228,"language":61,"meta":62,"style":62},"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",[23,155230,155231,155240,155248,155259,155263,155273,155286,155297,155304,155310,155314,155323,155332,155338,155345],{"__ignoreMap":62},[66,155232,155233,155235,155238],{"class":68,"line":69},[66,155234,16499],{"class":72},[66,155236,155237],{"class":3793}," StudentManager",[66,155239,126],{"class":76},[66,155241,155242,155244,155246],{"class":68,"line":80},[66,155243,32595],{"class":72},[66,155245,32598],{"class":102},[66,155247,32601],{"class":76},[66,155249,155250,155252,155255,155257],{"class":68,"line":112},[66,155251,32639],{"class":102},[66,155253,155254],{"class":76},".students ",[66,155256,99],{"class":72},[66,155258,53622],{"class":76},[66,155260,155261],{"class":68,"line":129},[66,155262,109],{"emptyLinePlaceholder":108},[66,155264,155265,155267,155270],{"class":68,"line":138},[66,155266,32595],{"class":72},[66,155268,155269],{"class":3793}," find_by_id",[66,155271,155272],{"class":76},"(self, student_id):\n",[66,155274,155275,155277,155279,155281,155283],{"class":68,"line":227},[66,155276,5222],{"class":72},[66,155278,715],{"class":76},[66,155280,507],{"class":72},[66,155282,40661],{"class":102},[66,155284,155285],{"class":76},".students:\n",[66,155287,155288,155290,155293,155295],{"class":68,"line":236},[66,155289,6458],{"class":72},[66,155291,155292],{"class":76}," student.student_id ",[66,155294,531],{"class":72},[66,155296,153918],{"class":76},[66,155298,155299,155302],{"class":68,"line":241},[66,155300,155301],{"class":72},"                return",[66,155303,153925],{"class":76},[66,155305,155306,155308],{"class":68,"line":372},[66,155307,16557],{"class":72},[66,155309,153932],{"class":102},[66,155311,155312],{"class":68,"line":377},[66,155313,109],{"emptyLinePlaceholder":108},[66,155315,155316,155318,155320],{"class":68,"line":392},[66,155317,32595],{"class":72},[66,155319,7022],{"class":3793},[66,155321,155322],{"class":76},"(self, student):\n",[66,155324,155325,155327,155329],{"class":68,"line":405},[66,155326,4321],{"class":72},[66,155328,40661],{"class":102},[66,155330,155331],{"class":76},".find_by_id(student.student_id):\n",[66,155333,155334,155336],{"class":68,"line":418},[66,155335,17535],{"class":72},[66,155337,127577],{"class":102},[66,155339,155340,155342],{"class":68,"line":430},[66,155341,32639],{"class":102},[66,155343,155344],{"class":76},".students.append(student)\n",[66,155346,155347,155349],{"class":68,"line":438},[66,155348,16557],{"class":72},[66,155350,155351],{"class":102}," True\n",[19,155353,155354],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,155356,155358],{"id":155357},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[484,155360,155362],{"id":155361},"_1251-数据结构","12.5.1 数据结构",[57,155364,155366],{"className":59,"code":155365,"language":61,"meta":62,"style":62},"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",[23,155367,155368,155376,155407,155437,155466,155495],{"__ignoreMap":62},[66,155369,155370,155372,155374],{"class":68,"line":69},[66,155371,150231],{"class":76},[66,155373,99],{"class":72},[66,155375,57228],{"class":76},[66,155377,155378,155380,155382,155384,155386,155388,155391,155393,155396,155398,155400,155402,155405],{"class":68,"line":80},[66,155379,150151],{"class":76},[66,155381,149763],{"class":356},[66,155383,53221],{"class":76},[66,155385,150373],{"class":356},[66,155387,307],{"class":76},[66,155389,155390],{"class":356},"\"category\"",[66,155392,53221],{"class":76},[66,155394,155395],{"class":356},"\"手机\"",[66,155397,307],{"class":76},[66,155399,85861],{"class":356},[66,155401,53221],{"class":76},[66,155403,155404],{"class":102},"12000",[66,155406,6746],{"class":76},[66,155408,155409,155411,155413,155415,155417,155419,155421,155423,155426,155428,155430,155432,155435],{"class":68,"line":112},[66,155410,150151],{"class":76},[66,155412,149763],{"class":356},[66,155414,53221],{"class":76},[66,155416,150373],{"class":356},[66,155418,307],{"class":76},[66,155420,155390],{"class":356},[66,155422,53221],{"class":76},[66,155424,155425],{"class":356},"\"电脑\"",[66,155427,307],{"class":76},[66,155429,85861],{"class":356},[66,155431,53221],{"class":76},[66,155433,155434],{"class":102},"18000",[66,155436,6746],{"class":76},[66,155438,155439,155441,155443,155445,155447,155449,155451,155453,155455,155457,155459,155461,155464],{"class":68,"line":129},[66,155440,150151],{"class":76},[66,155442,149763],{"class":356},[66,155444,53221],{"class":76},[66,155446,150394],{"class":356},[66,155448,307],{"class":76},[66,155450,155390],{"class":356},[66,155452,53221],{"class":76},[66,155454,155395],{"class":356},[66,155456,307],{"class":76},[66,155458,85861],{"class":356},[66,155460,53221],{"class":76},[66,155462,155463],{"class":102},"15000",[66,155465,6746],{"class":76},[66,155467,155468,155470,155472,155474,155476,155478,155480,155482,155484,155486,155488,155490,155493],{"class":68,"line":138},[66,155469,150151],{"class":76},[66,155471,149763],{"class":356},[66,155473,53221],{"class":76},[66,155475,150394],{"class":356},[66,155477,307],{"class":76},[66,155479,155390],{"class":356},[66,155481,53221],{"class":76},[66,155483,155425],{"class":356},[66,155485,307],{"class":76},[66,155487,85861],{"class":356},[66,155489,53221],{"class":76},[66,155491,155492],{"class":102},"16000",[66,155494,6746],{"class":76},[66,155496,155497],{"class":68,"line":227},[66,155498,704],{"class":76},[484,155500,155502],{"id":155501},"_1252-按日期统计","12.5.2 按日期统计",[57,155504,155506],{"className":59,"code":155505,"language":61,"meta":62,"style":62},"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",[23,155507,155508,155517,155521,155532,155546,155559,155578,155582],{"__ignoreMap":62},[66,155509,155510,155513,155515],{"class":68,"line":69},[66,155511,155512],{"class":76},"daily_total ",[66,155514,99],{"class":72},[66,155516,89644],{"class":76},[66,155518,155519],{"class":68,"line":80},[66,155520,109],{"emptyLinePlaceholder":108},[66,155522,155523,155525,155527,155529],{"class":68,"line":112},[66,155524,502],{"class":72},[66,155526,149975],{"class":76},[66,155528,507],{"class":72},[66,155530,155531],{"class":76}," sales:\n",[66,155533,155534,155537,155539,155542,155544],{"class":68,"line":129},[66,155535,155536],{"class":76},"    date ",[66,155538,99],{"class":72},[66,155540,155541],{"class":76}," item[",[66,155543,149763],{"class":356},[66,155545,704],{"class":76},[66,155547,155548,155551,155553,155555,155557],{"class":68,"line":138},[66,155549,155550],{"class":76},"    amount ",[66,155552,99],{"class":72},[66,155554,155541],{"class":76},[66,155556,85861],{"class":356},[66,155558,704],{"class":76},[66,155560,155561,155564,155566,155569,155571,155573,155575],{"class":68,"line":227},[66,155562,155563],{"class":76},"    daily_total[date] ",[66,155565,99],{"class":72},[66,155567,155568],{"class":76}," daily_total.get(date, ",[66,155570,2183],{"class":102},[66,155572,15519],{"class":76},[66,155574,1184],{"class":72},[66,155576,155577],{"class":76}," amount\n",[66,155579,155580],{"class":68,"line":236},[66,155581,109],{"emptyLinePlaceholder":108},[66,155583,155584,155586],{"class":68,"line":241},[66,155585,244],{"class":102},[66,155587,155588],{"class":76},"(daily_total)\n",[484,155590,155592],{"id":155591},"_1253-按类别统计","12.5.3 按类别统计",[57,155594,155596],{"className":59,"code":155595,"language":61,"meta":62,"style":62},"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",[23,155597,155598,155607,155611,155621,155634,155646,155664,155668],{"__ignoreMap":62},[66,155599,155600,155603,155605],{"class":68,"line":69},[66,155601,155602],{"class":76},"category_total ",[66,155604,99],{"class":72},[66,155606,89644],{"class":76},[66,155608,155609],{"class":68,"line":80},[66,155610,109],{"emptyLinePlaceholder":108},[66,155612,155613,155615,155617,155619],{"class":68,"line":112},[66,155614,502],{"class":72},[66,155616,149975],{"class":76},[66,155618,507],{"class":72},[66,155620,155531],{"class":76},[66,155622,155623,155626,155628,155630,155632],{"class":68,"line":129},[66,155624,155625],{"class":76},"    category ",[66,155627,99],{"class":72},[66,155629,155541],{"class":76},[66,155631,155390],{"class":356},[66,155633,704],{"class":76},[66,155635,155636,155638,155640,155642,155644],{"class":68,"line":138},[66,155637,155550],{"class":76},[66,155639,99],{"class":72},[66,155641,155541],{"class":76},[66,155643,85861],{"class":356},[66,155645,704],{"class":76},[66,155647,155648,155651,155653,155656,155658,155660,155662],{"class":68,"line":227},[66,155649,155650],{"class":76},"    category_total[category] ",[66,155652,99],{"class":72},[66,155654,155655],{"class":76}," category_total.get(category, ",[66,155657,2183],{"class":102},[66,155659,15519],{"class":76},[66,155661,1184],{"class":72},[66,155663,155577],{"class":76},[66,155665,155666],{"class":68,"line":236},[66,155667,109],{"emptyLinePlaceholder":108},[66,155669,155670,155672],{"class":68,"line":241},[66,155671,244],{"class":102},[66,155673,155674],{"class":76},"(category_total)\n",[484,155676,155678],{"id":155677},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[57,155680,155682],{"className":59,"code":155681,"language":61,"meta":62,"style":62},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[23,155683,155684,155709],{"__ignoreMap":62},[66,155685,155686,155689,155691,155693,155696,155699,155702,155705,155707],{"class":68,"line":69},[66,155687,155688],{"class":76},"top_date, top_amount ",[66,155690,99],{"class":72},[66,155692,7762],{"class":102},[66,155694,155695],{"class":76},"(daily_total.items(), ",[66,155697,155698],{"class":1234},"key",[66,155700,155701],{"class":72},"=lambda",[66,155703,155704],{"class":76}," item: item[",[66,155706,304],{"class":102},[66,155708,6473],{"class":76},[66,155710,155711,155713],{"class":68,"line":80},[66,155712,244],{"class":102},[66,155714,155715],{"class":76},"(top_date, top_amount)\n",[14,155717,155719],{"id":155718},"_126-绘制柱状图","12.6 绘制柱状图",[57,155721,155723],{"className":59,"code":155722,"language":61,"meta":62,"style":62},"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",[23,155724,155725,155739,155750,155754,155762,155774,155786,155797,155801,155805,155815,155826,155840,155845,155862,155879,155895,155899],{"__ignoreMap":62},[66,155726,155727,155729,155731,155733,155735,155737],{"class":68,"line":69},[66,155728,32532],{"class":72},[66,155730,149145],{"class":76},[66,155732,284],{"class":72},[66,155734,149150],{"class":76},[66,155736,33176],{"class":72},[66,155738,149155],{"class":76},[66,155740,155741,155743,155745,155747],{"class":68,"line":80},[66,155742,32532],{"class":72},[66,155744,149004],{"class":76},[66,155746,284],{"class":72},[66,155748,155749],{"class":76}," Bar\n",[66,155751,155752],{"class":68,"line":112},[66,155753,109],{"emptyLinePlaceholder":108},[66,155755,155756,155758,155760],{"class":68,"line":129},[66,155757,155602],{"class":76},[66,155759,99],{"class":72},[66,155761,17375],{"class":76},[66,155763,155764,155767,155769,155772],{"class":68,"line":138},[66,155765,155766],{"class":356},"    \"手机\"",[66,155768,53221],{"class":76},[66,155770,155771],{"class":102},"27000",[66,155773,33259],{"class":76},[66,155775,155776,155779,155781,155784],{"class":68,"line":227},[66,155777,155778],{"class":356},"    \"电脑\"",[66,155780,53221],{"class":76},[66,155782,155783],{"class":102},"34000",[66,155785,33259],{"class":76},[66,155787,155788,155791,155793,155795],{"class":68,"line":236},[66,155789,155790],{"class":356},"    \"耳机\"",[66,155792,53221],{"class":76},[66,155794,126169],{"class":102},[66,155796,33259],{"class":76},[66,155798,155799],{"class":68,"line":241},[66,155800,3407],{"class":76},[66,155802,155803],{"class":68,"line":372},[66,155804,109],{"emptyLinePlaceholder":108},[66,155806,155807,155810,155812],{"class":68,"line":377},[66,155808,155809],{"class":76},"bar ",[66,155811,99],{"class":72},[66,155813,155814],{"class":76}," Bar()\n",[66,155816,155817,155820,155823],{"class":68,"line":392},[66,155818,155819],{"class":76},"bar.add_xaxis(",[66,155821,155822],{"class":102},"list",[66,155824,155825],{"class":76},"(category_total.keys()))\n",[66,155827,155828,155831,155833,155835,155837],{"class":68,"line":405},[66,155829,155830],{"class":76},"bar.add_yaxis(",[66,155832,149061],{"class":356},[66,155834,307],{"class":76},[66,155836,155822],{"class":102},[66,155838,155839],{"class":76},"(category_total.values()))\n",[66,155841,155842],{"class":68,"line":418},[66,155843,155844],{"class":76},"bar.set_global_opts(\n",[66,155846,155847,155849,155851,155853,155855,155857,155860],{"class":68,"line":430},[66,155848,149239],{"class":1234},[66,155850,99],{"class":72},[66,155852,149244],{"class":76},[66,155854,53191],{"class":1234},[66,155856,99],{"class":72},[66,155858,155859],{"class":356},"\"品类销售额\"",[66,155861,39835],{"class":76},[66,155863,155864,155866,155868,155870,155872,155874,155877],{"class":68,"line":438},[66,155865,149258],{"class":1234},[66,155867,99],{"class":72},[66,155869,149263],{"class":76},[66,155871,81588],{"class":1234},[66,155873,99],{"class":72},[66,155875,155876],{"class":356},"\"品类\"",[66,155878,39835],{"class":76},[66,155880,155881,155883,155885,155887,155889,155891,155893],{"class":68,"line":465},[66,155882,149277],{"class":1234},[66,155884,99],{"class":72},[66,155886,149263],{"class":76},[66,155888,81588],{"class":1234},[66,155890,99],{"class":72},[66,155892,149061],{"class":356},[66,155894,39835],{"class":76},[66,155896,155897],{"class":68,"line":1805},[66,155898,313],{"class":76},[66,155900,155901,155904,155907],{"class":68,"line":1817},[66,155902,155903],{"class":76},"bar.render(",[66,155905,155906],{"class":356},"\"category_sales.html\"",[66,155908,313],{"class":76},[14,155910,155912],{"id":155911},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,155914,155915],{},"时间线适合展示不同日期、月份、年份的数据变化。",[57,155917,155919],{"className":59,"code":155918,"language":61,"meta":62,"style":62},"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",[23,155920,155921,155935,155946,155950,155958,155982,156005,156030,156034,156038,156048,156052,156063,156072,156082,156096,156127,156132,156136],{"__ignoreMap":62},[66,155922,155923,155925,155927,155929,155931,155933],{"class":68,"line":69},[66,155924,32532],{"class":72},[66,155926,149145],{"class":76},[66,155928,284],{"class":72},[66,155930,149150],{"class":76},[66,155932,33176],{"class":72},[66,155934,149155],{"class":76},[66,155936,155937,155939,155941,155943],{"class":68,"line":80},[66,155938,32532],{"class":72},[66,155940,149004],{"class":76},[66,155942,284],{"class":72},[66,155944,155945],{"class":76}," Bar, Timeline\n",[66,155947,155948],{"class":68,"line":112},[66,155949,109],{"emptyLinePlaceholder":108},[66,155951,155952,155954,155956],{"class":68,"line":129},[66,155953,103431],{"class":76},[66,155955,99],{"class":72},[66,155957,17375],{"class":76},[66,155959,155960,155963,155966,155968,155970,155972,155974,155976,155978,155980],{"class":68,"line":138},[66,155961,155962],{"class":356},"    \"2024-10-01\"",[66,155964,155965],{"class":76},": {",[66,155967,155395],{"class":356},[66,155969,53221],{"class":76},[66,155971,155404],{"class":102},[66,155973,307],{"class":76},[66,155975,155425],{"class":356},[66,155977,53221],{"class":76},[66,155979,155434],{"class":102},[66,155981,6746],{"class":76},[66,155983,155984,155987,155989,155991,155993,155995,155997,155999,156001,156003],{"class":68,"line":227},[66,155985,155986],{"class":356},"    \"2024-10-02\"",[66,155988,155965],{"class":76},[66,155990,155395],{"class":356},[66,155992,53221],{"class":76},[66,155994,155463],{"class":102},[66,155996,307],{"class":76},[66,155998,155425],{"class":356},[66,156000,53221],{"class":76},[66,156002,155492],{"class":102},[66,156004,6746],{"class":76},[66,156006,156007,156010,156012,156014,156016,156019,156021,156023,156025,156028],{"class":68,"line":236},[66,156008,156009],{"class":356},"    \"2024-10-03\"",[66,156011,155965],{"class":76},[66,156013,155395],{"class":356},[66,156015,53221],{"class":76},[66,156017,156018],{"class":102},"17000",[66,156020,307],{"class":76},[66,156022,155425],{"class":356},[66,156024,53221],{"class":76},[66,156026,156027],{"class":102},"19000",[66,156029,6746],{"class":76},[66,156031,156032],{"class":68,"line":241},[66,156033,3407],{"class":76},[66,156035,156036],{"class":68,"line":372},[66,156037,109],{"emptyLinePlaceholder":108},[66,156039,156040,156043,156045],{"class":68,"line":377},[66,156041,156042],{"class":76},"timeline ",[66,156044,99],{"class":72},[66,156046,156047],{"class":76}," Timeline()\n",[66,156049,156050],{"class":68,"line":392},[66,156051,109],{"emptyLinePlaceholder":108},[66,156053,156054,156056,156059,156061],{"class":68,"line":405},[66,156055,502],{"class":72},[66,156057,156058],{"class":76}," date, category_data ",[66,156060,507],{"class":72},[66,156062,150913],{"class":76},[66,156064,156065,156068,156070],{"class":68,"line":418},[66,156066,156067],{"class":76},"    bar ",[66,156069,99],{"class":72},[66,156071,155814],{"class":76},[66,156073,156074,156077,156079],{"class":68,"line":430},[66,156075,156076],{"class":76},"    bar.add_xaxis(",[66,156078,155822],{"class":102},[66,156080,156081],{"class":76},"(category_data.keys()))\n",[66,156083,156084,156087,156089,156091,156093],{"class":68,"line":438},[66,156085,156086],{"class":76},"    bar.add_yaxis(",[66,156088,149061],{"class":356},[66,156090,307],{"class":76},[66,156092,155822],{"class":102},[66,156094,156095],{"class":76},"(category_data.values()))\n",[66,156097,156098,156101,156104,156106,156108,156110,156112,156114,156116,156118,156120,156122,156125],{"class":68,"line":465},[66,156099,156100],{"class":76},"    bar.set_global_opts(",[66,156102,156103],{"class":1234},"title_opts",[66,156105,99],{"class":72},[66,156107,149244],{"class":76},[66,156109,53191],{"class":1234},[66,156111,99],{"class":72},[66,156113,445],{"class":72},[66,156115,1130],{"class":356},[66,156117,451],{"class":102},[66,156119,75705],{"class":76},[66,156121,457],{"class":102},[66,156123,156124],{"class":356},"销售额\"",[66,156126,360],{"class":76},[66,156128,156129],{"class":68,"line":1805},[66,156130,156131],{"class":76},"    timeline.add(bar, date)\n",[66,156133,156134],{"class":68,"line":1817},[66,156135,109],{"emptyLinePlaceholder":108},[66,156137,156138,156141,156144],{"class":68,"line":1822},[66,156139,156140],{"class":76},"timeline.render(",[66,156142,156143],{"class":356},"\"timeline_sales.html\"",[66,156145,313],{"class":76},[14,156147,156149],{"id":156148},"_128-绘制地图","12.8 绘制地图",[19,156151,156152],{},"地图适合展示地区数据。",[57,156154,156156],{"className":59,"code":156155,"language":61,"meta":62,"style":62},"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",[23,156157,156158,156172,156183,156187,156195,156208,156220,156233,156246,156250,156254,156264,156279,156284,156301,156320,156324],{"__ignoreMap":62},[66,156159,156160,156162,156164,156166,156168,156170],{"class":68,"line":69},[66,156161,32532],{"class":72},[66,156163,149145],{"class":76},[66,156165,284],{"class":72},[66,156167,149150],{"class":76},[66,156169,33176],{"class":72},[66,156171,149155],{"class":76},[66,156173,156174,156176,156178,156180],{"class":68,"line":80},[66,156175,32532],{"class":72},[66,156177,149004],{"class":76},[66,156179,284],{"class":72},[66,156181,156182],{"class":76}," Map\n",[66,156184,156185],{"class":68,"line":112},[66,156186,109],{"emptyLinePlaceholder":108},[66,156188,156189,156191,156193],{"class":68,"line":129},[66,156190,103431],{"class":76},[66,156192,99],{"class":72},[66,156194,57228],{"class":76},[66,156196,156197,156200,156202,156204,156206],{"class":68,"line":138},[66,156198,156199],{"class":76},"    (",[66,156201,71048],{"class":356},[66,156203,307],{"class":76},[66,156205,2796],{"class":102},[66,156207,39835],{"class":76},[66,156209,156210,156212,156214,156216,156218],{"class":68,"line":227},[66,156211,156199],{"class":76},[66,156213,71068],{"class":356},[66,156215,307],{"class":76},[66,156217,149078],{"class":102},[66,156219,39835],{"class":76},[66,156221,156222,156224,156227,156229,156231],{"class":68,"line":236},[66,156223,156199],{"class":76},[66,156225,156226],{"class":356},"\"广东\"",[66,156228,307],{"class":76},[66,156230,3552],{"class":102},[66,156232,39835],{"class":76},[66,156234,156235,156237,156240,156242,156244],{"class":68,"line":241},[66,156236,156199],{"class":76},[66,156238,156239],{"class":356},"\"浙江\"",[66,156241,307],{"class":76},[66,156243,149083],{"class":102},[66,156245,39835],{"class":76},[66,156247,156248],{"class":68,"line":372},[66,156249,704],{"class":76},[66,156251,156252],{"class":68,"line":377},[66,156253,109],{"emptyLinePlaceholder":108},[66,156255,156256,156259,156261],{"class":68,"line":392},[66,156257,156258],{"class":76},"map_chart ",[66,156260,99],{"class":72},[66,156262,156263],{"class":76}," Map()\n",[66,156265,156266,156269,156271,156274,156277],{"class":68,"line":405},[66,156267,156268],{"class":76},"map_chart.add(",[66,156270,149061],{"class":356},[66,156272,156273],{"class":76},", data, ",[66,156275,156276],{"class":356},"\"china\"",[66,156278,313],{"class":76},[66,156280,156281],{"class":68,"line":418},[66,156282,156283],{"class":76},"map_chart.set_global_opts(\n",[66,156285,156286,156288,156290,156292,156294,156296,156299],{"class":68,"line":430},[66,156287,149239],{"class":1234},[66,156289,99],{"class":72},[66,156291,149244],{"class":76},[66,156293,53191],{"class":1234},[66,156295,99],{"class":72},[66,156297,156298],{"class":356},"\"地区销售额\"",[66,156300,39835],{"class":76},[66,156302,156303,156306,156308,156311,156314,156316,156318],{"class":68,"line":438},[66,156304,156305],{"class":1234},"    visualmap_opts",[66,156307,99],{"class":72},[66,156309,156310],{"class":76},"opts.VisualMapOpts(",[66,156312,156313],{"class":1234},"max_",[66,156315,99],{"class":72},[66,156317,3552],{"class":102},[66,156319,39835],{"class":76},[66,156321,156322],{"class":68,"line":465},[66,156323,313],{"class":76},[66,156325,156326,156329,156332],{"class":68,"line":1805},[66,156327,156328],{"class":76},"map_chart.render(",[66,156330,156331],{"class":356},"\"map_sales.html\"",[66,156333,313],{"class":76},[19,156335,156336],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,156338,156340],{"id":156339},"_129-项目拆分建议","12.9 项目拆分建议",[19,156342,156343],{},"当代码超过一个文件时，可以这样组织：",[57,156345,156348],{"className":156346,"code":156347,"language":555,"meta":62},[553],"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",[23,156349,156347],{"__ignoreMap":62},[19,156351,156352],{},"职责：",[31,156354,156355,156361,156367,156373],{},[34,156356,156357,156360],{},[23,156358,156359],{},"main.py","：程序入口。",[34,156362,156363,156366],{},[23,156364,156365],{},"file_utils.py","：读写 JSON。",[34,156368,156369,156372],{},[23,156370,156371],{},"sales_service.py","：统计销售数据。",[34,156374,156375,156378],{},[23,156376,156377],{},"chart_builder.py","：生成图表。",[14,156380,156382],{"id":156381},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,156384,156385],{},"语法基础：",[31,156387,156388,156391,156394,156397],{},[34,156389,156390],{},"会写变量、注释、输入输出。",[34,156392,156393],{},"会使用 int、float、str、bool。",[34,156395,156396],{},"会做类型转换。",[34,156398,156399],{},"会使用 f-string 格式化输出。",[19,156401,156402],{},"流程控制：",[31,156404,156405,156411,156417,156424],{},[34,156406,156407,156408,158],{},"会写 ",[23,156409,156410],{},"if elif else",[34,156412,156407,156413,102792,156415,158],{},[23,156414,73],{},[23,156416,502],{},[34,156418,156419,156420,102792,156422,158],{},"理解 ",[23,156421,477],{},[23,156423,566],{},[34,156425,156426],{},"能写嵌套循环。",[19,156428,156429],{},"函数：",[31,156431,156432,156435,156438,156441],{},[34,156433,156434],{},"会定义和调用函数。",[34,156436,156437],{},"理解参数和返回值。",[34,156439,156440],{},"知道局部变量和全局变量。",[34,156442,156443],{},"会使用默认参数、关键字参数、不定长参数。",[19,156445,156446],{},"容器：",[31,156448,156449,156452,156455,156458,156461],{},[34,156450,156451],{},"会使用列表增删改查。",[34,156453,156454],{},"会遍历列表、字典。",[34,156456,156457],{},"会使用切片。",[34,156459,156460],{},"会用集合去重。",[34,156462,156463],{},"会处理列表嵌套字典。",[19,156465,156466],{},"文件和模块：",[31,156468,156469,156472,156475,156478,156481],{},[34,156470,156471],{},"会读写文本文件。",[34,156473,156474],{},"会读写 JSON。",[34,156476,156477],{},"会捕获常见异常。",[34,156479,156480],{},"会导入模块和第三方包。",[34,156482,156483],{},"会创建简单包结构。",[19,156485,156486],{},"项目能力：",[31,156488,156489,156492,156495,156498,156501],{},[34,156490,156491],{},"能把代码拆成函数。",[34,156493,156494],{},"能把数据保存到文件。",[34,156496,156497],{},"能处理用户输入错误。",[34,156499,156500],{},"能写一个完整菜单程序。",[34,156502,156503],{},"能用 pyecharts 生成图表。",[14,156505,156507],{"id":156506},"_1211-推荐练习顺序","12.11 推荐练习顺序",[31,156509,156510,156513,156516,156519,156522,156525,156528,156531],{},[34,156511,156512],{},"猜数字游戏。",[34,156514,156515],{},"ATM 菜单程序。",[34,156517,156518],{},"学生成绩统计。",[34,156520,156521],{},"学生管理系统函数版。",[34,156523,156524],{},"学生管理系统文件持久化版。",[34,156526,156527],{},"学生管理系统面向对象版。",[34,156529,156530],{},"销售数据统计。",[34,156532,156533],{},"销售数据可视化。",[14,156535,156537],{"id":156536},"_1212-常见学习误区","12.12 常见学习误区",[31,156539,156540,156543,156546,156549,156552,156555,156558],{},[34,156541,156542],{},"只看视频不敲代码。",[34,156544,156545],{},"一报错就复制错误去搜，不先读报错位置。",[34,156547,156548],{},"变量名随便写，后续自己看不懂。",[34,156550,156551],{},"所有代码都写在一个文件一个函数里。",[34,156553,156554],{},"不保存练习代码，复习时没有材料。",[34,156556,156557],{},"还没掌握列表字典就急着学框架。",[34,156559,156560],{},"不会读官方文档，只依赖教程。",[14,156562,156564],{"id":156563},"_1213-如何读报错","12.13 如何读报错",[19,156566,156567],{},"报错通常从下往上看最后几行。",[19,156569,86],{},[57,156571,156574],{"className":156572,"code":156573,"language":555,"meta":62},[553],"ValueError: invalid literal for int() with base 10: 'abc'\n",[23,156575,156573],{"__ignoreMap":62},[19,156577,26403],{},[31,156579,156580,156586,156596],{},[34,156581,156582,156583,158],{},"异常类型是 ",[23,156584,156585],{},"ValueError",[34,156587,109118,156588,156591,156592,156595],{},[23,156589,156590],{},"int()"," 无法把 ",[23,156593,156594],{},"'abc'"," 转成整数。",[34,156597,156598],{},"应该检查输入内容或增加异常处理。",[19,156600,156601],{},"再看文件名和行号：",[57,156603,156606],{"className":156604,"code":156605,"language":555,"meta":62},[553],"File \"main.py\", line 10, in \u003Cmodule>\n",[23,156607,156605],{"__ignoreMap":62},[19,156609,156610,156611,156613],{},"表示错误发生在 ",[23,156612,156359],{}," 第 10 行。",[14,156615,156617],{"id":156616},"_1214-后续学习方向","12.14 后续学习方向",[19,156619,156620],{},"Python 基础完成后，可以按兴趣选择方向：",[31,156622,156623,156635,156644,156656,156667,156676,156686],{},[34,156624,156625,156626,2204,156629,2204,156632,158],{},"自动化办公：",[23,156627,156628],{},"openpyxl",[23,156630,156631],{},"python-docx",[23,156633,156634],{},"pdfplumber",[34,156636,156637,156638,2204,156640,2204,156642,158],{},"数据分析：",[23,156639,102400],{},[23,156641,147955],{},[23,156643,147963],{},[34,156645,156646,156647,2204,156650,2204,156653,158],{},"Web 后端：",[23,156648,156649],{},"Flask",[23,156651,156652],{},"FastAPI",[23,156654,156655],{},"Django",[34,156657,156658,156659,2204,156661,2204,156664,158],{},"爬虫：",[23,156660,147940],{},[23,156662,156663],{},"BeautifulSoup",[23,156665,156666],{},"Scrapy",[34,156668,156669,156670,2204,156672,156675],{},"测试开发：",[23,156671,147987],{},[23,156673,156674],{},"selenium","、接口测试。",[34,156677,156678,156679,2204,156681,2204,156683,158],{},"人工智能：",[23,156680,102400],{},[23,156682,147955],{},[23,156684,156685],{},"pytorch",[34,156687,156688,156689,2204,156691,2204,156694,158],{},"运维脚本：",[23,156690,147556],{},[23,156692,156693],{},"subprocess",[23,156695,156696],{},"paramiko",[19,156698,156699],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,156701,156703],{"id":156702},"_1215-结课练习","12.15 结课练习",[31,156705,156706,156709,156712,156715,156718,156721,156724,156727],{},[34,156707,156708],{},"完成函数版学生管理系统。",[34,156710,156711],{},"给学生管理系统增加 JSON 持久化。",[34,156713,156714],{},"给学生管理系统增加异常处理。",[34,156716,156717],{},"把学生管理系统改成面向对象版。",[34,156719,156720],{},"使用 pyecharts 绘制学生成绩柱状图。",[34,156722,156723],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[34,156725,156726],{},"按品类统计销售额并绘制柱状图。",[34,156728,156729],{},"写一份自己的 Python 学习路线图。",[1903,156731,156732],{},"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":62,"searchDepth":80,"depth":80,"links":156734},[156735,156736,156739,156740,156741,156747,156748,156749,156750,156751,156752,156753,156754,156755,156756],{"id":153462,"depth":80,"text":153463},{"id":153512,"depth":80,"text":153513,"children":156737},[156738],{"id":153516,"depth":112,"text":153517},{"id":153555,"depth":80,"text":153556},{"id":155019,"depth":80,"text":155020},{"id":155357,"depth":80,"text":155358,"children":156742},[156743,156744,156745,156746],{"id":155361,"depth":112,"text":155362},{"id":155501,"depth":112,"text":155502},{"id":155591,"depth":112,"text":155592},{"id":155677,"depth":112,"text":155678},{"id":155718,"depth":80,"text":155719},{"id":155911,"depth":80,"text":155912},{"id":156148,"depth":80,"text":156149},{"id":156339,"depth":80,"text":156340},{"id":156381,"depth":80,"text":156382},{"id":156506,"depth":80,"text":156507},{"id":156536,"depth":80,"text":156537},{"id":156563,"depth":80,"text":156564},{"id":156616,"depth":80,"text":156617},{"id":156702,"depth":80,"text":156703},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":153454,"description":1926},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":156763,"title":156764,"body":156765,"description":1926,"extension":1927,"meta":159231,"navigation":108,"path":159232,"seo":159233,"stem":159234,"__hash__":159235},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":156766,"toc":159206},[156767,156770,156774,156777,156780,156800,156803,156826,156829,156832,156854,156857,156879,156883,156886,156926,156929,157050,157054,157057,157097,157100,157124,157127,157131,157134,157148,157181,157184,157219,157222,157245,157248,157281,157284,157286,157292,157367,157370,157376,157393,157432,157436,157439,157485,157487,157525,157528,157563,157566,157601,157604,157636,157639,157658,157662,157666,157779,157781,157856,157860,157906,157909,157935,157944,157948,157951,158014,158022,158050,158054,158094,158159,158163,158166,158205,158208,158253,158256,158317,158321,158348,158351,158379,158382,158386,158390,158455,158458,158496,158499,158531,158535,158634,158638,158641,158714,158717,158765,158769,158775,158815,158818,158865,158868,158917,158921,158923,158937,158939,159118,159122,159149,159169,159176,159180,159197,159203],[10,156768,156764],{"id":156769},"_2-基础语法变量与字符串",[14,156771,156773],{"id":156772},"_21-注释","2.1 注释",[19,156775,156776],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,156778,156779],{},"单行注释：",[57,156781,156783],{"className":59,"code":156782,"language":61,"meta":62,"style":62},"# 这是单行注释\nprint(\"hello\")\n",[23,156784,156785,156790],{"__ignoreMap":62},[66,156786,156787],{"class":68,"line":69},[66,156788,156789],{"class":758},"# 这是单行注释\n",[66,156791,156792,156794,156796,156798],{"class":68,"line":80},[66,156793,244],{"class":102},[66,156795,348],{"class":76},[66,156797,7655],{"class":356},[66,156799,313],{"class":76},[19,156801,156802],{},"多行说明常用三引号：",[57,156804,156806],{"className":59,"code":156805,"language":61,"meta":62,"style":62},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[23,156807,156808,156812,156817,156822],{"__ignoreMap":62},[66,156809,156810],{"class":68,"line":69},[66,156811,97473],{"class":356},[66,156813,156814],{"class":68,"line":80},[66,156815,156816],{"class":356},"这是多行说明。\n",[66,156818,156819],{"class":68,"line":112},[66,156820,156821],{"class":356},"常用于文件顶部说明、函数说明等。\n",[66,156823,156824],{"class":68,"line":129},[66,156825,97473],{"class":356},[19,156827,156828],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,156830,156831],{},"不好：",[57,156833,156835],{"className":59,"code":156834,"language":61,"meta":62,"style":62},"# age 加 1\nage = age + 1\n",[23,156836,156837,156842],{"__ignoreMap":62},[66,156838,156839],{"class":68,"line":69},[66,156840,156841],{"class":758},"# age 加 1\n",[66,156843,156844,156846,156848,156850,156852],{"class":68,"line":80},[66,156845,148313],{"class":76},[66,156847,99],{"class":72},[66,156849,17510],{"class":76},[66,156851,1184],{"class":72},[66,156853,103],{"class":102},[19,156855,156856],{},"较好：",[57,156858,156860],{"className":59,"code":156859,"language":61,"meta":62,"style":62},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[23,156861,156862,156867],{"__ignoreMap":62},[66,156863,156864],{"class":68,"line":69},[66,156865,156866],{"class":758},"# 用户过完生日后，年龄增加一岁\n",[66,156868,156869,156871,156873,156875,156877],{"class":68,"line":80},[66,156870,148313],{"class":76},[66,156872,99],{"class":72},[66,156874,17510],{"class":76},[66,156876,1184],{"class":72},[66,156878,103],{"class":102},[14,156880,156882],{"id":156881},"_22-字面量","2.2 字面量",[19,156884,156885],{},"字面量就是代码中直接写出来的数据。",[57,156887,156889],{"className":59,"code":156888,"language":61,"meta":62,"style":62},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[23,156890,156891,156898,156905,156912,156919],{"__ignoreMap":62},[66,156892,156893,156895],{"class":68,"line":69},[66,156894,310],{"class":102},[66,156896,156897],{"class":758},"          # 整数\n",[66,156899,156900,156902],{"class":68,"line":80},[66,156901,2046],{"class":102},[66,156903,156904],{"class":758},"         # 小数\n",[66,156906,156907,156909],{"class":68,"line":112},[66,156908,7655],{"class":356},[66,156910,156911],{"class":758},"      # 字符串\n",[66,156913,156914,156916],{"class":68,"line":129},[66,156915,33269],{"class":102},[66,156917,156918],{"class":758},"         # 布尔值\n",[66,156920,156921,156923],{"class":68,"line":138},[66,156922,97461],{"class":102},[66,156924,156925],{"class":758},"         # 空值\n",[19,156927,156928],{},"常见字面量类型：",[2129,156930,156931,156941],{},[2132,156932,156933],{},[2135,156934,156935,156937,156939],{},[2138,156936,25540],{},[2138,156938,29293],{},[2138,156940,27671],{},[2176,156942,156943,156954,156965,156976,156988,157000,157012,157025,157037],{},[2135,156944,156945,156947,156951],{},[2181,156946,2003],{},[2181,156948,156949],{},[23,156950,310],{},[2181,156952,156953],{},"整数",[2135,156955,156956,156958,156962],{},[2181,156957,2038],{},[2181,156959,156960],{},[23,156961,2046],{},[2181,156963,156964],{},"浮点数",[2135,156966,156967,156969,156973],{},[2181,156968,3144],{},[2181,156970,156971],{},[23,156972,7655],{},[2181,156974,156975],{},"字符串",[2135,156977,156978,156980,156986],{},[2181,156979,3196],{},[2181,156981,156982,2204,156984],{},[23,156983,33269],{},[23,156985,35775],{},[2181,156987,67794],{},[2135,156989,156990,156993,156997],{},[2181,156991,156992],{},"NoneType",[2181,156994,156995],{},[23,156996,97461],{},[2181,156998,156999],{},"空值",[2135,157001,157002,157004,157009],{},[2181,157003,155822],{},[2181,157005,157006],{},[23,157007,157008],{},"[1, 2, 3]",[2181,157010,157011],{},"列表",[2135,157013,157014,157017,157022],{},[2181,157015,157016],{},"tuple",[2181,157018,157019],{},[23,157020,157021],{},"(1, 2, 3)",[2181,157023,157024],{},"元组",[2135,157026,157027,157029,157034],{},[2181,157028,116317],{},[2181,157030,157031],{},[23,157032,157033],{},"{\"name\": \"张三\"}",[2181,157035,157036],{},"字典",[2135,157038,157039,157042,157047],{},[2181,157040,157041],{},"set",[2181,157043,157044],{},[23,157045,157046],{},"{1, 2, 3}",[2181,157048,157049],{},"集合",[14,157051,157053],{"id":157052},"_23-变量","2.3 变量",[19,157055,157056],{},"变量是保存数据的名字。",[57,157058,157060],{"className":59,"code":157059,"language":61,"meta":62,"style":62},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[23,157061,157062,157070,157078,157088],{"__ignoreMap":62},[66,157063,157064,157066,157068],{"class":68,"line":69},[66,157065,642],{"class":76},[66,157067,99],{"class":72},[66,157069,151118],{"class":356},[66,157071,157072,157074,157076],{"class":68,"line":80},[66,157073,148313],{"class":76},[66,157075,99],{"class":72},[66,157077,148318],{"class":102},[66,157079,157080,157083,157085],{"class":68,"line":112},[66,157081,157082],{"class":76},"height ",[66,157084,99],{"class":72},[66,157086,157087],{"class":102}," 1.75\n",[66,157089,157090,157093,157095],{"class":68,"line":129},[66,157091,157092],{"class":76},"is_student ",[66,157094,99],{"class":72},[66,157096,155351],{"class":102},[19,157098,157099],{},"Python 的变量不需要提前声明类型：",[57,157101,157103],{"className":59,"code":157102,"language":61,"meta":62,"style":62},"score = 100\nscore = \"满分\"\n",[23,157104,157105,157115],{"__ignoreMap":62},[66,157106,157107,157110,157112],{"class":68,"line":69},[66,157108,157109],{"class":76},"score ",[66,157111,99],{"class":72},[66,157113,157114],{"class":102}," 100\n",[66,157116,157117,157119,157121],{"class":68,"line":80},[66,157118,157109],{"class":76},[66,157120,99],{"class":72},[66,157122,157123],{"class":356}," \"满分\"\n",[19,157125,157126],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,157128,157130],{"id":157129},"_24-变量命名规则","2.4 变量命名规则",[19,157132,157133],{},"硬性规则：",[31,157135,157136,157139,157142,157145],{},[34,157137,157138],{},"只能由字母、数字、下划线组成。",[34,157140,157141],{},"不能以数字开头。",[34,157143,157144],{},"不能使用 Python 关键字。",[34,157146,157147],{},"区分大小写。",[57,157149,157151],{"className":59,"code":157150,"language":61,"meta":62,"style":62},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[23,157152,157153,157162,157171],{"__ignoreMap":62},[66,157154,157155,157158,157160],{"class":68,"line":69},[66,157156,157157],{"class":76},"user_name ",[66,157159,99],{"class":72},[66,157161,148308],{"class":356},[66,157163,157164,157167,157169],{"class":68,"line":80},[66,157165,157166],{"class":76},"age2 ",[66,157168,99],{"class":72},[66,157170,148318],{"class":102},[66,157172,157173,157176,157178],{"class":68,"line":112},[66,157174,157175],{"class":76},"_token ",[66,157177,99],{"class":72},[66,157179,157180],{"class":356}," \"abc\"\n",[19,157182,157183],{},"错误写法：",[57,157185,157187],{"className":59,"code":157186,"language":61,"meta":62,"style":62},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[23,157188,157189,157198,157210],{"__ignoreMap":62},[66,157190,157191,157194,157196],{"class":68,"line":69},[66,157192,157193],{"class":79182},"2age",[66,157195,15369],{"class":72},[66,157197,148318],{"class":102},[66,157199,157200,157202,157204,157206,157208],{"class":68,"line":80},[66,157201,133354],{"class":76},[66,157203,2511],{"class":72},[66,157205,642],{"class":76},[66,157207,99],{"class":72},[66,157209,148308],{"class":356},[66,157211,157212,157214,157216],{"class":68,"line":112},[66,157213,16499],{"class":72},[66,157215,15369],{"class":72},[66,157217,157218],{"class":356}," \"一班\"\n",[19,157220,157221],{},"查看关键字：",[57,157223,157225],{"className":59,"code":157224,"language":61,"meta":62,"style":62},"import keyword\n\nprint(keyword.kwlist)\n",[23,157226,157227,157234,157238],{"__ignoreMap":62},[66,157228,157229,157231],{"class":68,"line":69},[66,157230,284],{"class":72},[66,157232,157233],{"class":76}," keyword\n",[66,157235,157236],{"class":68,"line":80},[66,157237,109],{"emptyLinePlaceholder":108},[66,157239,157240,157242],{"class":68,"line":112},[66,157241,244],{"class":102},[66,157243,157244],{"class":76},"(keyword.kwlist)\n",[19,157246,157247],{},"推荐命名风格：",[57,157249,157251],{"className":59,"code":157250,"language":61,"meta":62,"style":62},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[23,157252,157253,157262,157272],{"__ignoreMap":62},[66,157254,157255,157258,157260],{"class":68,"line":69},[66,157256,157257],{"class":76},"student_name ",[66,157259,99],{"class":72},[66,157261,151118],{"class":356},[66,157263,157264,157267,157269],{"class":68,"line":80},[66,157265,157266],{"class":76},"total_price ",[66,157268,99],{"class":72},[66,157270,157271],{"class":102}," 99.8\n",[66,157273,157274,157277,157279],{"class":68,"line":112},[66,157275,157276],{"class":76},"is_finished ",[66,157278,99],{"class":72},[66,157280,127577],{"class":102},[19,157282,157283],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,157285,52516],{"id":52515},[19,157287,106139,157288,157291],{},[23,157289,157290],{},"type()"," 查看数据类型：",[57,157293,157295],{"className":59,"code":157294,"language":61,"meta":62,"style":62},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[23,157296,157297,157311,157325,157339,157353],{"__ignoreMap":62},[66,157298,157299,157301,157303,157305,157307,157309],{"class":68,"line":69},[66,157300,244],{"class":102},[66,157302,348],{"class":76},[66,157304,104880],{"class":102},[66,157306,348],{"class":76},[66,157308,310],{"class":102},[66,157310,360],{"class":76},[66,157312,157313,157315,157317,157319,157321,157323],{"class":68,"line":80},[66,157314,244],{"class":102},[66,157316,348],{"class":76},[66,157318,104880],{"class":102},[66,157320,348],{"class":76},[66,157322,2046],{"class":102},[66,157324,360],{"class":76},[66,157326,157327,157329,157331,157333,157335,157337],{"class":68,"line":112},[66,157328,244],{"class":102},[66,157330,348],{"class":76},[66,157332,104880],{"class":102},[66,157334,348],{"class":76},[66,157336,7655],{"class":356},[66,157338,360],{"class":76},[66,157340,157341,157343,157345,157347,157349,157351],{"class":68,"line":129},[66,157342,244],{"class":102},[66,157344,348],{"class":76},[66,157346,104880],{"class":102},[66,157348,348],{"class":76},[66,157350,33269],{"class":102},[66,157352,360],{"class":76},[66,157354,157355,157357,157359,157361,157363,157365],{"class":68,"line":138},[66,157356,244],{"class":102},[66,157358,348],{"class":76},[66,157360,104880],{"class":102},[66,157362,348],{"class":76},[66,157364,97461],{"class":102},[66,157366,360],{"class":76},[19,157368,157369],{},"输出类似：",[57,157371,157374],{"className":157372,"code":157373,"language":555,"meta":62},[553],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[23,157375,157373],{"__ignoreMap":62},[19,157377,841,157378,109056,157380,157382,157383,157385,157386,23303,157388,157385,157390,157392],{},[23,157379,3196],{},[23,157381,2003],{}," 的子类，",[23,157384,33269],{}," 可以当作 ",[23,157387,304],{},[23,157389,35775],{},[23,157391,2183],{},"，但业务代码中不要滥用。",[57,157394,157396],{"className":59,"code":157395,"language":61,"meta":62,"style":62},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[23,157397,157398,157415],{"__ignoreMap":62},[66,157399,157400,157402,157404,157406,157408,157410,157412],{"class":68,"line":69},[66,157401,244],{"class":102},[66,157403,348],{"class":76},[66,157405,33269],{"class":102},[66,157407,47352],{"class":72},[66,157409,1187],{"class":102},[66,157411,798],{"class":76},[66,157413,157414],{"class":758},"# 2\n",[66,157416,157417,157419,157421,157423,157425,157427,157429],{"class":68,"line":80},[66,157418,244],{"class":102},[66,157420,348],{"class":76},[66,157422,35775],{"class":102},[66,157424,47352],{"class":72},[66,157426,1187],{"class":102},[66,157428,47593],{"class":76},[66,157430,157431],{"class":758},"# 1\n",[14,157433,157435],{"id":157434},"_26-类型转换","2.6 类型转换",[19,157437,157438],{},"常用转换函数：",[57,157440,157442],{"className":59,"code":157441,"language":61,"meta":62,"style":62},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[23,157443,157444,157454,157465,157475],{"__ignoreMap":62},[66,157445,157446,157448,157450,157452],{"class":68,"line":69},[66,157447,2003],{"class":102},[66,157449,348],{"class":76},[66,157451,56097],{"class":356},[66,157453,313],{"class":76},[66,157455,157456,157458,157460,157463],{"class":68,"line":80},[66,157457,2038],{"class":102},[66,157459,348],{"class":76},[66,157461,157462],{"class":356},"\"3.14\"",[66,157464,313],{"class":76},[66,157466,157467,157469,157471,157473],{"class":68,"line":112},[66,157468,3144],{"class":102},[66,157470,348],{"class":76},[66,157472,310],{"class":102},[66,157474,313],{"class":76},[66,157476,157477,157479,157481,157483],{"class":68,"line":129},[66,157478,3196],{"class":102},[66,157480,348],{"class":76},[66,157482,304],{"class":102},[66,157484,313],{"class":76},[19,157486,86],{},[57,157488,157490],{"className":59,"code":157489,"language":61,"meta":62,"style":62},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[23,157491,157492,157501,157512],{"__ignoreMap":62},[66,157493,157494,157496,157498],{"class":68,"line":69},[66,157495,148313],{"class":76},[66,157497,99],{"class":72},[66,157499,157500],{"class":356}," \"18\"\n",[66,157502,157503,157505,157507,157509],{"class":68,"line":80},[66,157504,148313],{"class":76},[66,157506,99],{"class":72},[66,157508,345],{"class":102},[66,157510,157511],{"class":76},"(age)\n",[66,157513,157514,157516,157519,157521,157523],{"class":68,"line":112},[66,157515,244],{"class":102},[66,157517,157518],{"class":76},"(age ",[66,157520,1184],{"class":72},[66,157522,1187],{"class":102},[66,157524,313],{"class":76},[19,157526,157527],{},"输入得到的内容永远是字符串：",[57,157529,157531],{"className":59,"code":157530,"language":61,"meta":62,"style":62},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[23,157532,157533,157549],{"__ignoreMap":62},[66,157534,157535,157538,157540,157542,157544,157547],{"class":68,"line":69},[66,157536,157537],{"class":76},"num ",[66,157539,99],{"class":72},[66,157541,1532],{"class":102},[66,157543,348],{"class":76},[66,157545,157546],{"class":356},"\"请输入数字:\"",[66,157548,313],{"class":76},[66,157550,157551,157553,157555,157557,157560],{"class":68,"line":80},[66,157552,244],{"class":102},[66,157554,348],{"class":76},[66,157556,104880],{"class":102},[66,157558,157559],{"class":76},"(num))  ",[66,157561,157562],{"class":758},"# str\n",[19,157564,157565],{},"如果要做数学运算，必须转换：",[57,157567,157569],{"className":59,"code":157568,"language":61,"meta":62,"style":62},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[23,157570,157571,157589],{"__ignoreMap":62},[66,157572,157573,157575,157577,157579,157581,157583,157585,157587],{"class":68,"line":69},[66,157574,157537],{"class":76},[66,157576,99],{"class":72},[66,157578,345],{"class":102},[66,157580,348],{"class":76},[66,157582,351],{"class":102},[66,157584,348],{"class":76},[66,157586,157546],{"class":356},[66,157588,360],{"class":76},[66,157590,157591,157593,157595,157597,157599],{"class":68,"line":80},[66,157592,244],{"class":102},[66,157594,47405],{"class":76},[66,157596,1184],{"class":72},[66,157598,1335],{"class":102},[66,157600,313],{"class":76},[19,157602,157603],{},"常见错误：",[57,157605,157607],{"className":59,"code":157606,"language":61,"meta":62,"style":62},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[23,157608,157609,157622],{"__ignoreMap":62},[66,157610,157611,157613,157615,157617,157619],{"class":68,"line":69},[66,157612,2003],{"class":102},[66,157614,348],{"class":76},[66,157616,157462],{"class":356},[66,157618,798],{"class":76},[66,157620,157621],{"class":758},"# 错误\n",[66,157623,157624,157626,157628,157631,157634],{"class":68,"line":80},[66,157625,2003],{"class":102},[66,157627,348],{"class":76},[66,157629,157630],{"class":356},"\"abc\"",[66,157632,157633],{"class":76},")    ",[66,157635,157621],{"class":758},[19,157637,157638],{},"正确写法：",[57,157640,157642],{"className":59,"code":157641,"language":61,"meta":62,"style":62},"num = float(\"3.14\")\n",[23,157643,157644],{"__ignoreMap":62},[66,157645,157646,157648,157650,157652,157654,157656],{"class":68,"line":69},[66,157647,157537],{"class":76},[66,157649,99],{"class":72},[66,157651,111569],{"class":102},[66,157653,348],{"class":76},[66,157655,157462],{"class":356},[66,157657,313],{"class":76},[14,157659,157661],{"id":157660},"_27-运算符","2.7 运算符",[484,157663,157665],{"id":157664},"_271-算术运算符","2.7.1 算术运算符",[2129,157667,157668,157679],{},[2132,157669,157670],{},[2135,157671,157672,157675,157677],{},[2138,157673,157674],{},"运算符",[2138,157676,27671],{},[2138,157678,29293],{},[2176,157680,157681,157695,157709,157723,157737,157751,157765],{},[2135,157682,157683,157687,157690],{},[2181,157684,157685],{},[23,157686,1184],{},[2181,157688,157689],{},"加法",[2181,157691,157692],{},[23,157693,157694],{},"1 + 2",[2135,157696,157697,157701,157704],{},[2181,157698,157699],{},[23,157700,2511],{},[2181,157702,157703],{},"减法",[2181,157705,157706],{},[23,157707,157708],{},"5 - 3",[2135,157710,157711,157715,157718],{},[2181,157712,157713],{},[23,157714,1208],{},[2181,157716,157717],{},"乘法",[2181,157719,157720],{},[23,157721,157722],{},"2 * 3",[2135,157724,157725,157729,157732],{},[2181,157726,157727],{},[23,157728,2563],{},[2181,157730,157731],{},"除法，结果是浮点数",[2181,157733,157734],{},[23,157735,157736],{},"5 \u002F 2",[2135,157738,157739,157743,157746],{},[2181,157740,157741],{},[23,157742,35118],{},[2181,157744,157745],{},"整除",[2181,157747,157748],{},[23,157749,157750],{},"5 \u002F\u002F 2",[2135,157752,157753,157757,157760],{},[2181,157754,157755],{},[23,157756,953],{},[2181,157758,157759],{},"取余",[2181,157761,157762],{},[23,157763,157764],{},"5 % 2",[2135,157766,157767,157771,157774],{},[2181,157768,157769],{},[23,157770,12467],{},[2181,157772,157773],{},"幂运算",[2181,157775,157776],{},[23,157777,157778],{},"2 ** 3",[19,157780,86],{},[57,157782,157784],{"className":59,"code":157783,"language":61,"meta":62,"style":62},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[23,157785,157786,157804,157821,157838],{"__ignoreMap":62},[66,157787,157788,157790,157792,157794,157797,157799,157801],{"class":68,"line":69},[66,157789,244],{"class":102},[66,157791,348],{"class":76},[66,157793,752],{"class":102},[66,157795,157796],{"class":72}," \u002F",[66,157798,956],{"class":102},[66,157800,798],{"class":76},[66,157802,157803],{"class":758},"# 2.5\n",[66,157805,157806,157808,157810,157812,157815,157817,157819],{"class":68,"line":80},[66,157807,244],{"class":102},[66,157809,348],{"class":76},[66,157811,752],{"class":102},[66,157813,157814],{"class":72}," \u002F\u002F",[66,157816,956],{"class":102},[66,157818,47593],{"class":76},[66,157820,157414],{"class":758},[66,157822,157823,157825,157827,157829,157832,157834,157836],{"class":68,"line":112},[66,157824,244],{"class":102},[66,157826,348],{"class":76},[66,157828,752],{"class":102},[66,157830,157831],{"class":72}," %",[66,157833,956],{"class":102},[66,157835,798],{"class":76},[66,157837,157431],{"class":758},[66,157839,157840,157842,157844,157846,157849,157851,157853],{"class":68,"line":129},[66,157841,244],{"class":102},[66,157843,348],{"class":76},[66,157845,795],{"class":102},[66,157847,157848],{"class":72}," **",[66,157850,534],{"class":102},[66,157852,47593],{"class":76},[66,157854,157855],{"class":758},"# 8\n",[484,157857,157859],{"id":157858},"_272-赋值运算符","2.7.2 赋值运算符",[57,157861,157863],{"className":59,"code":157862,"language":61,"meta":62,"style":62},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[23,157864,157865,157873,157881,157889,157897],{"__ignoreMap":62},[66,157866,157867,157869,157871],{"class":68,"line":69},[66,157868,157537],{"class":76},[66,157870,99],{"class":72},[66,157872,60208],{"class":102},[66,157874,157875,157877,157879],{"class":68,"line":80},[66,157876,157537],{"class":76},[66,157878,144],{"class":72},[66,157880,56208],{"class":102},[66,157882,157883,157885,157887],{"class":68,"line":112},[66,157884,157537],{"class":76},[66,157886,152015],{"class":72},[66,157888,49507],{"class":102},[66,157890,157891,157893,157895],{"class":68,"line":129},[66,157892,157537],{"class":76},[66,157894,138918],{"class":72},[66,157896,121807],{"class":102},[66,157898,157899,157901,157904],{"class":68,"line":138},[66,157900,157537],{"class":76},[66,157902,157903],{"class":72},"\u002F=",[66,157905,49507],{"class":102},[19,157907,157908],{},"等价关系：",[57,157910,157912],{"className":59,"code":157911,"language":61,"meta":62,"style":62},"num += 1\nnum = num + 1\n",[23,157913,157914,157922],{"__ignoreMap":62},[66,157915,157916,157918,157920],{"class":68,"line":69},[66,157917,157537],{"class":76},[66,157919,144],{"class":72},[66,157921,103],{"class":102},[66,157923,157924,157926,157928,157931,157933],{"class":68,"line":80},[66,157925,157537],{"class":76},[66,157927,99],{"class":72},[66,157929,157930],{"class":76}," num ",[66,157932,1184],{"class":72},[66,157934,103],{"class":102},[19,157936,157937,157938,102792,157941,158],{},"Python 没有 ",[23,157939,157940],{},"num++",[23,157942,157943],{},"num--",[484,157945,157947],{"id":157946},"_273-比较运算符","2.7.3 比较运算符",[19,157949,157950],{},"比较运算结果是布尔值。",[57,157952,157954],{"className":59,"code":157953,"language":61,"meta":62,"style":62},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[23,157955,157956,157970,157985,157999],{"__ignoreMap":62},[66,157957,157958,157960,157962,157964,157966,157968],{"class":68,"line":69},[66,157959,244],{"class":102},[66,157961,348],{"class":76},[66,157963,790],{"class":102},[66,157965,28023],{"class":72},[66,157967,123],{"class":102},[66,157969,313],{"class":76},[66,157971,157972,157974,157976,157978,157981,157983],{"class":68,"line":80},[66,157973,244],{"class":102},[66,157975,348],{"class":76},[66,157977,790],{"class":102},[66,157979,157980],{"class":72}," >=",[66,157982,1335],{"class":102},[66,157984,313],{"class":76},[66,157986,157987,157989,157991,157993,157995,157997],{"class":68,"line":112},[66,157988,244],{"class":102},[66,157990,348],{"class":76},[66,157992,790],{"class":102},[66,157994,959],{"class":72},[66,157996,3910],{"class":102},[66,157998,313],{"class":76},[66,158000,158001,158003,158005,158007,158010,158012],{"class":68,"line":129},[66,158002,244],{"class":102},[66,158004,348],{"class":76},[66,158006,790],{"class":102},[66,158008,158009],{"class":72}," !=",[66,158011,3910],{"class":102},[66,158013,313],{"class":76},[19,158015,158016,158017,158019,158020,158],{},"注意：判断相等用 ",[23,158018,531],{},"，赋值用 ",[23,158021,99],{},[57,158023,158025],{"className":59,"code":158024,"language":61,"meta":62,"style":62},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[23,158026,158027,158039],{"__ignoreMap":62},[66,158028,158029,158031,158033,158036],{"class":68,"line":69},[66,158030,148313],{"class":76},[66,158032,99],{"class":72},[66,158034,158035],{"class":102}," 18",[66,158037,158038],{"class":758},"       # 赋值\n",[66,158040,158041,158043,158045,158047],{"class":68,"line":80},[66,158042,148313],{"class":76},[66,158044,531],{"class":72},[66,158046,158035],{"class":102},[66,158048,158049],{"class":758},"      # 判断是否相等\n",[484,158051,158053],{"id":158052},"_274-逻辑运算符","2.7.4 逻辑运算符",[2129,158055,158056,158064],{},[2132,158057,158058],{},[2135,158059,158060,158062],{},[2138,158061,157674],{},[2138,158063,27671],{},[2176,158065,158066,158075,158084],{},[2135,158067,158068,158072],{},[2181,158069,158070],{},[23,158071,32258],{},[2181,158073,158074],{},"并且",[2135,158076,158077,158081],{},[2181,158078,158079],{},[23,158080,116861],{},[2181,158082,158083],{},"或者",[2135,158085,158086,158091],{},[2181,158087,158088],{},[23,158089,158090],{},"not",[2181,158092,158093],{},"取反",[57,158095,158097],{"className":59,"code":158096,"language":61,"meta":62,"style":62},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[23,158098,158099,158107,158116,158120,158135,158149],{"__ignoreMap":62},[66,158100,158101,158103,158105],{"class":68,"line":69},[66,158102,148313],{"class":76},[66,158104,99],{"class":72},[66,158106,89841],{"class":102},[66,158108,158109,158112,158114],{"class":68,"line":80},[66,158110,158111],{"class":76},"has_ticket ",[66,158113,99],{"class":72},[66,158115,155351],{"class":102},[66,158117,158118],{"class":68,"line":112},[66,158119,109],{"emptyLinePlaceholder":108},[66,158121,158122,158124,158126,158128,158130,158132],{"class":68,"line":129},[66,158123,244],{"class":102},[66,158125,157518],{"class":76},[66,158127,3540],{"class":72},[66,158129,158035],{"class":102},[66,158131,122200],{"class":72},[66,158133,158134],{"class":76}," has_ticket)\n",[66,158136,158137,158139,158141,158143,158145,158147],{"class":68,"line":138},[66,158138,244],{"class":102},[66,158140,157518],{"class":76},[66,158142,413],{"class":72},[66,158144,158035],{"class":102},[66,158146,115972],{"class":72},[66,158148,158134],{"class":76},[66,158150,158151,158153,158155,158157],{"class":68,"line":227},[66,158152,244],{"class":102},[66,158154,348],{"class":76},[66,158156,158090],{"class":72},[66,158158,158134],{"class":76},[14,158160,158162],{"id":158161},"_28-字符串定义","2.8 字符串定义",[19,158164,158165],{},"三种常见写法：",[57,158167,158169],{"className":59,"code":158168,"language":61,"meta":62,"style":62},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[23,158170,158171,158181,158190,158200],{"__ignoreMap":62},[66,158172,158173,158176,158178],{"class":68,"line":69},[66,158174,158175],{"class":76},"name1 ",[66,158177,99],{"class":72},[66,158179,158180],{"class":356}," '小明'\n",[66,158182,158183,158186,158188],{"class":68,"line":80},[66,158184,158185],{"class":76},"name2 ",[66,158187,99],{"class":72},[66,158189,151118],{"class":356},[66,158191,158192,158195,158197],{"class":68,"line":112},[66,158193,158194],{"class":76},"text ",[66,158196,99],{"class":72},[66,158198,158199],{"class":356}," \"\"\"这是多行字符串\n",[66,158201,158202],{"class":68,"line":129},[66,158203,158204],{"class":356},"可以换行\"\"\"\n",[19,158206,158207],{},"字符串中包含引号：",[57,158209,158211],{"className":59,"code":158210,"language":61,"meta":62,"style":62},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[23,158212,158213,158223,158233],{"__ignoreMap":62},[66,158214,158215,158218,158220],{"class":68,"line":69},[66,158216,158217],{"class":76},"msg ",[66,158219,99],{"class":72},[66,158221,158222],{"class":356}," \"他说:'你好'\"\n",[66,158224,158225,158228,158230],{"class":68,"line":80},[66,158226,158227],{"class":76},"msg2 ",[66,158229,99],{"class":72},[66,158231,158232],{"class":356}," '他说:\"你好\"'\n",[66,158234,158235,158238,158240,158243,158246,158249,158251],{"class":68,"line":112},[66,158236,158237],{"class":76},"msg3 ",[66,158239,99],{"class":72},[66,158241,158242],{"class":356}," \"他说:",[66,158244,158245],{"class":102},"\\\"",[66,158247,158248],{"class":356},"你好",[66,158250,158245],{"class":102},[66,158252,26935],{"class":356},[19,158254,158255],{},"常见转义字符：",[2129,158257,158258,158267],{},[2132,158259,158260],{},[2135,158261,158262,158265],{},[2138,158263,158264],{},"写法",[2138,158266,102474],{},[2176,158268,158269,158279,158288,158298,158307],{},[2135,158270,158271,158276],{},[2181,158272,158273],{},[23,158274,158275],{},"\\n",[2181,158277,158278],{},"换行",[2135,158280,158281,158285],{},[2181,158282,158283],{},[23,158284,1242],{},[2181,158286,158287],{},"制表符",[2135,158289,158290,158295],{},[2181,158291,158292],{},[23,158293,158294],{},"\\\\",[2181,158296,158297],{},"反斜杠",[2135,158299,158300,158304],{},[2181,158301,158302],{},[23,158303,158245],{},[2181,158305,158306],{},"双引号",[2135,158308,158309,158314],{},[2181,158310,158311],{},[23,158312,158313],{},"\\'",[2181,158315,158316],{},"单引号",[14,158318,158320],{"id":158319},"_29-字符串拼接","2.9 字符串拼接",[57,158322,158324],{"className":59,"code":158323,"language":61,"meta":62,"style":62},"name = \"小明\"\nprint(\"你好，\" + name)\n",[23,158325,158326,158334],{"__ignoreMap":62},[66,158327,158328,158330,158332],{"class":68,"line":69},[66,158329,642],{"class":76},[66,158331,99],{"class":72},[66,158333,151118],{"class":356},[66,158335,158336,158338,158340,158343,158345],{"class":68,"line":80},[66,158337,244],{"class":102},[66,158339,348],{"class":76},[66,158341,158342],{"class":356},"\"你好，\"",[66,158344,47352],{"class":72},[66,158346,158347],{"class":76}," name)\n",[19,158349,158350],{},"字符串只能和字符串拼接：",[57,158352,158354],{"className":59,"code":158353,"language":61,"meta":62,"style":62},"age = 18\nprint(\"年龄:\" + str(age))\n",[23,158355,158356,158364],{"__ignoreMap":62},[66,158357,158358,158360,158362],{"class":68,"line":69},[66,158359,148313],{"class":76},[66,158361,99],{"class":72},[66,158363,148318],{"class":102},[66,158365,158366,158368,158370,158372,158374,158376],{"class":68,"line":80},[66,158367,244],{"class":102},[66,158369,348],{"class":76},[66,158371,148285],{"class":356},[66,158373,47352],{"class":72},[66,158375,75698],{"class":102},[66,158377,158378],{"class":76},"(age))\n",[19,158380,158381],{},"更推荐使用格式化字符串。",[14,158383,158385],{"id":158384},"_210-字符串格式化","2.10 字符串格式化",[484,158387,158389],{"id":158388},"_2101-百分号格式化","2.10.1 百分号格式化",[57,158391,158393],{"className":59,"code":158392,"language":61,"meta":62,"style":62},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[23,158394,158395,158403,158411,158420,158424],{"__ignoreMap":62},[66,158396,158397,158399,158401],{"class":68,"line":69},[66,158398,642],{"class":76},[66,158400,99],{"class":72},[66,158402,151118],{"class":356},[66,158404,158405,158407,158409],{"class":68,"line":80},[66,158406,148313],{"class":76},[66,158408,99],{"class":72},[66,158410,148318],{"class":102},[66,158412,158413,158415,158417],{"class":68,"line":112},[66,158414,157109],{"class":76},[66,158416,99],{"class":72},[66,158418,158419],{"class":102}," 95.5\n",[66,158421,158422],{"class":68,"line":129},[66,158423,109],{"emptyLinePlaceholder":108},[66,158425,158426,158428,158430,158433,158436,158439,158442,158445,158448,158450,158452],{"class":68,"line":138},[66,158427,244],{"class":102},[66,158429,348],{"class":76},[66,158431,158432],{"class":356},"\"姓名:",[66,158434,158435],{"class":102},"%s",[66,158437,158438],{"class":356}," 年龄:",[66,158440,158441],{"class":102},"%d",[66,158443,158444],{"class":356}," 分数:",[66,158446,158447],{"class":102},"%.1f",[66,158449,1130],{"class":356},[66,158451,157831],{"class":72},[66,158453,158454],{"class":76}," (name, age, score))\n",[19,158456,158457],{},"常用占位符：",[2129,158459,158460,158469],{},[2132,158461,158462],{},[2135,158463,158464,158467],{},[2138,158465,158466],{},"占位符",[2138,158468,27671],{},[2176,158470,158471,158479,158487],{},[2135,158472,158473,158477],{},[2181,158474,158475],{},[23,158476,158435],{},[2181,158478,156975],{},[2135,158480,158481,158485],{},[2181,158482,158483],{},[23,158484,158441],{},[2181,158486,156953],{},[2135,158488,158489,158494],{},[2181,158490,158491],{},[23,158492,158493],{},"%f",[2181,158495,156964],{},[19,158497,158498],{},"精度控制：",[57,158500,158502],{"className":59,"code":158501,"language":61,"meta":62,"style":62},"price = 12.3456\nprint(\"%.2f\" % price)\n",[23,158503,158504,158513],{"__ignoreMap":62},[66,158505,158506,158508,158510],{"class":68,"line":69},[66,158507,148448],{"class":76},[66,158509,99],{"class":72},[66,158511,158512],{"class":102}," 12.3456\n",[66,158514,158515,158517,158519,158521,158524,158526,158528],{"class":68,"line":80},[66,158516,244],{"class":102},[66,158518,348],{"class":76},[66,158520,1130],{"class":356},[66,158522,158523],{"class":102},"%.2f",[66,158525,1130],{"class":356},[66,158527,157831],{"class":72},[66,158529,158530],{"class":76}," price)\n",[484,158532,158534],{"id":158533},"_2102-format方法","2.10.2 format方法",[57,158536,158538],{"className":59,"code":158537,"language":61,"meta":62,"style":62},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[23,158539,158540,158548,158556,158560,158579,158599],{"__ignoreMap":62},[66,158541,158542,158544,158546],{"class":68,"line":69},[66,158543,642],{"class":76},[66,158545,99],{"class":72},[66,158547,151118],{"class":356},[66,158549,158550,158552,158554],{"class":68,"line":80},[66,158551,148313],{"class":76},[66,158553,99],{"class":72},[66,158555,148318],{"class":102},[66,158557,158558],{"class":68,"line":112},[66,158559,109],{"emptyLinePlaceholder":108},[66,158561,158562,158564,158566,158568,158570,158572,158574,158576],{"class":68,"line":129},[66,158563,244],{"class":102},[66,158565,348],{"class":76},[66,158567,158432],{"class":356},[66,158569,34249],{"class":102},[66,158571,158438],{"class":356},[66,158573,34249],{"class":102},[66,158575,1130],{"class":356},[66,158577,158578],{"class":76},".format(name, age))\n",[66,158580,158581,158583,158585,158587,158590,158592,158595,158597],{"class":68,"line":138},[66,158582,244],{"class":102},[66,158584,348],{"class":76},[66,158586,158432],{"class":356},[66,158588,158589],{"class":102},"{0}",[66,158591,158438],{"class":356},[66,158593,158594],{"class":102},"{1}",[66,158596,1130],{"class":356},[66,158598,158578],{"class":76},[66,158600,158601,158603,158605,158607,158610,158612,158615,158617,158620,158622,158624,158627,158629,158631],{"class":68,"line":227},[66,158602,244],{"class":102},[66,158604,348],{"class":76},[66,158606,158432],{"class":356},[66,158608,158609],{"class":102},"{name}",[66,158611,158438],{"class":356},[66,158613,158614],{"class":102},"{age}",[66,158616,1130],{"class":356},[66,158618,158619],{"class":76},".format(",[66,158621,81588],{"class":1234},[66,158623,99],{"class":72},[66,158625,158626],{"class":76},"name, ",[66,158628,72000],{"class":1234},[66,158630,99],{"class":72},[66,158632,158633],{"class":76},"age))\n",[484,158635,158637],{"id":158636},"_2103-f-string","2.10.3 f-string",[19,158639,158640],{},"推荐写法：",[57,158642,158644],{"className":59,"code":158643,"language":61,"meta":62,"style":62},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[23,158645,158646,158654,158662,158670,158674],{"__ignoreMap":62},[66,158647,158648,158650,158652],{"class":68,"line":69},[66,158649,642],{"class":76},[66,158651,99],{"class":72},[66,158653,151118],{"class":356},[66,158655,158656,158658,158660],{"class":68,"line":80},[66,158657,148313],{"class":76},[66,158659,99],{"class":72},[66,158661,148318],{"class":102},[66,158663,158664,158666,158668],{"class":68,"line":112},[66,158665,157109],{"class":76},[66,158667,99],{"class":72},[66,158669,158419],{"class":102},[66,158671,158672],{"class":68,"line":129},[66,158673,109],{"emptyLinePlaceholder":108},[66,158675,158676,158678,158680,158682,158684,158686,158688,158690,158692,158694,158696,158698,158700,158702,158705,158708,158710,158712],{"class":68,"line":138},[66,158677,244],{"class":102},[66,158679,348],{"class":76},[66,158681,445],{"class":72},[66,158683,158432],{"class":356},[66,158685,451],{"class":102},[66,158687,81588],{"class":76},[66,158689,457],{"class":102},[66,158691,158438],{"class":356},[66,158693,451],{"class":102},[66,158695,72000],{"class":76},[66,158697,457],{"class":102},[66,158699,158444],{"class":356},[66,158701,451],{"class":102},[66,158703,158704],{"class":76},"score",[66,158706,158707],{"class":72},":.1f",[66,158709,457],{"class":102},[66,158711,1130],{"class":356},[66,158713,313],{"class":76},[19,158715,158716],{},"表达式也可以放进去：",[57,158718,158720],{"className":59,"code":158719,"language":61,"meta":62,"style":62},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[23,158721,158722,158730,158738],{"__ignoreMap":62},[66,158723,158724,158726,158728],{"class":68,"line":69},[66,158725,148448],{"class":76},[66,158727,99],{"class":72},[66,158729,148453],{"class":102},[66,158731,158732,158734,158736],{"class":68,"line":80},[66,158733,318],{"class":76},[66,158735,99],{"class":72},[66,158737,56208],{"class":102},[66,158739,158740,158742,158744,158746,158749,158751,158753,158755,158758,158760,158763],{"class":68,"line":112},[66,158741,244],{"class":102},[66,158743,348],{"class":76},[66,158745,445],{"class":72},[66,158747,158748],{"class":356},"\"总价:",[66,158750,451],{"class":102},[66,158752,148448],{"class":76},[66,158754,1208],{"class":72},[66,158756,158757],{"class":76}," count",[66,158759,457],{"class":102},[66,158761,158762],{"class":356},"元\"",[66,158764,313],{"class":76},[14,158766,158768],{"id":158767},"_211-input输入","2.11 input输入",[19,158770,158771,158774],{},[23,158772,158773],{},"input()"," 会暂停程序，等待用户输入。",[57,158776,158778],{"className":59,"code":158777,"language":61,"meta":62,"style":62},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[23,158779,158780,158794],{"__ignoreMap":62},[66,158781,158782,158784,158786,158788,158790,158792],{"class":68,"line":69},[66,158783,642],{"class":76},[66,158785,99],{"class":72},[66,158787,1532],{"class":102},[66,158789,348],{"class":76},[66,158791,154139],{"class":356},[66,158793,313],{"class":76},[66,158795,158796,158798,158800,158802,158805,158807,158809,158811,158813],{"class":68,"line":80},[66,158797,244],{"class":102},[66,158799,348],{"class":76},[66,158801,445],{"class":72},[66,158803,158804],{"class":356},"\"你好，",[66,158806,451],{"class":102},[66,158808,81588],{"class":76},[66,158810,457],{"class":102},[66,158812,1130],{"class":356},[66,158814,313],{"class":76},[19,158816,158817],{},"输入整数：",[57,158819,158821],{"className":59,"code":158820,"language":61,"meta":62,"style":62},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[23,158822,158823,158841],{"__ignoreMap":62},[66,158824,158825,158827,158829,158831,158833,158835,158837,158839],{"class":68,"line":69},[66,158826,148313],{"class":76},[66,158828,99],{"class":72},[66,158830,345],{"class":102},[66,158832,348],{"class":76},[66,158834,351],{"class":102},[66,158836,348],{"class":76},[66,158838,154154],{"class":356},[66,158840,360],{"class":76},[66,158842,158843,158845,158847,158849,158852,158854,158856,158858,158861,158863],{"class":68,"line":80},[66,158844,244],{"class":102},[66,158846,348],{"class":76},[66,158848,445],{"class":72},[66,158850,158851],{"class":356},"\"明年你",[66,158853,451],{"class":102},[66,158855,148313],{"class":76},[66,158857,1184],{"class":72},[66,158859,158860],{"class":102}," 1}",[66,158862,151169],{"class":356},[66,158864,313],{"class":76},[19,158866,158867],{},"输入小数：",[57,158869,158871],{"className":59,"code":158870,"language":61,"meta":62,"style":62},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[23,158872,158873,158892],{"__ignoreMap":62},[66,158874,158875,158877,158879,158881,158883,158885,158887,158890],{"class":68,"line":69},[66,158876,157082],{"class":76},[66,158878,99],{"class":72},[66,158880,111569],{"class":102},[66,158882,348],{"class":76},[66,158884,351],{"class":102},[66,158886,348],{"class":76},[66,158888,158889],{"class":356},"\"请输入身高:\"",[66,158891,360],{"class":76},[66,158893,158894,158896,158898,158900,158903,158905,158907,158910,158912,158915],{"class":68,"line":80},[66,158895,244],{"class":102},[66,158897,348],{"class":76},[66,158899,445],{"class":72},[66,158901,158902],{"class":356},"\"身高:",[66,158904,451],{"class":102},[66,158906,26784],{"class":76},[66,158908,158909],{"class":72},":.2f",[66,158911,457],{"class":102},[66,158913,158914],{"class":356},"米\"",[66,158916,313],{"class":76},[14,158918,158920],{"id":158919},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,158922,1472],{},[31,158924,158925,158928,158931,158934],{},[34,158926,158927],{},"输入商品单价。",[34,158929,158930],{},"输入购买数量。",[34,158932,158933],{},"输入折扣，例如 0.8 表示八折。",[34,158935,158936],{},"输出最终金额，保留两位小数。",[19,158938,1486],{},[57,158940,158942],{"className":59,"code":158941,"language":61,"meta":62,"style":62},"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",[23,158943,158944,158963,158982,159002,159006,159025,159029,159052,159073,159095],{"__ignoreMap":62},[66,158945,158946,158948,158950,158952,158954,158956,158958,158961],{"class":68,"line":69},[66,158947,148448],{"class":76},[66,158949,99],{"class":72},[66,158951,111569],{"class":102},[66,158953,348],{"class":76},[66,158955,351],{"class":102},[66,158957,348],{"class":76},[66,158959,158960],{"class":356},"\"请输入商品单价:\"",[66,158962,360],{"class":76},[66,158964,158965,158967,158969,158971,158973,158975,158977,158980],{"class":68,"line":80},[66,158966,318],{"class":76},[66,158968,99],{"class":72},[66,158970,345],{"class":102},[66,158972,348],{"class":76},[66,158974,351],{"class":102},[66,158976,348],{"class":76},[66,158978,158979],{"class":356},"\"请输入购买数量:\"",[66,158981,360],{"class":76},[66,158983,158984,158987,158989,158991,158993,158995,158997,159000],{"class":68,"line":112},[66,158985,158986],{"class":76},"discount ",[66,158988,99],{"class":72},[66,158990,111569],{"class":102},[66,158992,348],{"class":76},[66,158994,351],{"class":102},[66,158996,348],{"class":76},[66,158998,158999],{"class":356},"\"请输入折扣:\"",[66,159001,360],{"class":76},[66,159003,159004],{"class":68,"line":129},[66,159005,109],{"emptyLinePlaceholder":108},[66,159007,159008,159010,159012,159015,159017,159020,159022],{"class":68,"line":138},[66,159009,192],{"class":76},[66,159011,99],{"class":72},[66,159013,159014],{"class":76}," price ",[66,159016,1208],{"class":72},[66,159018,159019],{"class":76}," count ",[66,159021,1208],{"class":72},[66,159023,159024],{"class":76}," discount\n",[66,159026,159027],{"class":68,"line":227},[66,159028,109],{"emptyLinePlaceholder":108},[66,159030,159031,159033,159035,159037,159040,159042,159044,159046,159048,159050],{"class":68,"line":236},[66,159032,244],{"class":102},[66,159034,348],{"class":76},[66,159036,445],{"class":72},[66,159038,159039],{"class":356},"\"商品单价:",[66,159041,451],{"class":102},[66,159043,81593],{"class":76},[66,159045,158909],{"class":72},[66,159047,457],{"class":102},[66,159049,1130],{"class":356},[66,159051,313],{"class":76},[66,159053,159054,159056,159058,159060,159063,159065,159067,159069,159071],{"class":68,"line":241},[66,159055,244],{"class":102},[66,159057,348],{"class":76},[66,159059,445],{"class":72},[66,159061,159062],{"class":356},"\"购买数量:",[66,159064,451],{"class":102},[66,159066,454],{"class":76},[66,159068,457],{"class":102},[66,159070,1130],{"class":356},[66,159072,313],{"class":76},[66,159074,159075,159077,159079,159081,159084,159086,159089,159091,159093],{"class":68,"line":372},[66,159076,244],{"class":102},[66,159078,348],{"class":76},[66,159080,445],{"class":72},[66,159082,159083],{"class":356},"\"折扣:",[66,159085,451],{"class":102},[66,159087,159088],{"class":76},"discount",[66,159090,457],{"class":102},[66,159092,1130],{"class":356},[66,159094,313],{"class":76},[66,159096,159097,159099,159101,159103,159106,159108,159110,159112,159114,159116],{"class":68,"line":377},[66,159098,244],{"class":102},[66,159100,348],{"class":76},[66,159102,445],{"class":72},[66,159104,159105],{"class":356},"\"应付金额:",[66,159107,451],{"class":102},[66,159109,263],{"class":76},[66,159111,158909],{"class":72},[66,159113,457],{"class":102},[66,159115,158762],{"class":356},[66,159117,313],{"class":76},[14,159119,159121],{"id":159120},"_213-易错点","2.13 易错点",[31,159123,159124,159129,159135,159143,159146],{},[34,159125,159126,159128],{},[23,159127,158773],{}," 的结果是字符串，做运算前要转换。",[34,159130,159131,159132,158],{},"字符串拼接时，数字要先 ",[23,159133,159134],{},"str()",[34,159136,159137,159139,159140,159142],{},[23,159138,99],{}," 是赋值，",[23,159141,531],{}," 是比较。",[34,159144,159145],{},"Python 没有自增自减运算符。",[34,159147,159148],{},"浮点数计算可能有精度误差：",[57,159150,159152],{"className":59,"code":159151,"language":61,"meta":62,"style":62},"print(0.1 + 0.2)\n",[23,159153,159154],{"__ignoreMap":62},[66,159155,159156,159158,159160,159162,159164,159167],{"class":68,"line":69},[66,159157,244],{"class":102},[66,159159,348],{"class":76},[66,159161,87986],{"class":102},[66,159163,47352],{"class":72},[66,159165,159166],{"class":102}," 0.2",[66,159168,313],{"class":76},[19,159170,159171,159172,159175],{},"金额计算如果要求严格，可以后续学习 ",[23,159173,159174],{},"decimal"," 模块。",[14,159177,159179],{"id":159178},"_214-本章练习","2.14 本章练习",[31,159181,159182,159185,159188,159191,159194],{},[34,159183,159184],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[34,159186,159187],{},"输入圆的半径，计算面积，保留两位小数。",[34,159189,159190],{},"输入工资和奖金，计算总收入。",[34,159192,159193],{},"输入摄氏温度，转换为华氏温度。",[34,159195,159196],{},"写一个 BMI 计算程序：",[57,159198,159201],{"className":159199,"code":159200,"language":555,"meta":62},[553],"BMI = 体重kg \u002F 身高m ** 2\n",[23,159202,159200],{"__ignoreMap":62},[1903,159204,159205],{},"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":62,"searchDepth":80,"depth":80,"links":159207},[159208,159209,159210,159211,159212,159213,159214,159220,159221,159222,159227,159228,159229,159230],{"id":156772,"depth":80,"text":156773},{"id":156881,"depth":80,"text":156882},{"id":157052,"depth":80,"text":157053},{"id":157129,"depth":80,"text":157130},{"id":52515,"depth":80,"text":52516},{"id":157434,"depth":80,"text":157435},{"id":157660,"depth":80,"text":157661,"children":159215},[159216,159217,159218,159219],{"id":157664,"depth":112,"text":157665},{"id":157858,"depth":112,"text":157859},{"id":157946,"depth":112,"text":157947},{"id":158052,"depth":112,"text":158053},{"id":158161,"depth":80,"text":158162},{"id":158319,"depth":80,"text":158320},{"id":158384,"depth":80,"text":158385,"children":159223},[159224,159225,159226],{"id":158388,"depth":112,"text":158389},{"id":158533,"depth":112,"text":158534},{"id":158636,"depth":112,"text":158637},{"id":158767,"depth":80,"text":158768},{"id":158919,"depth":80,"text":158920},{"id":159120,"depth":80,"text":159121},{"id":159178,"depth":80,"text":159179},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":156764,"description":1926},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":159237,"title":159238,"body":159239,"description":1926,"extension":1927,"meta":160872,"navigation":108,"path":160873,"seo":160874,"stem":160875,"__hash__":160876},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":159240,"toc":160853},[159241,159244,159248,159251,159266,159269,159297,159301,159351,159353,159369,159372,159398,159401,159405,159472,159475,159491,159495,159498,159616,159619,159626,159675,159681,159685,159688,159800,159803,159807,159811,159814,159864,159868,159871,159921,159925,159928,159966,159970,159973,160019,160022,160057,160061,160066,160069,160115,160117,160183,160187,160193,160304,160313,160317,160319,160330,160332,160498,160502,160504,160518,160520,160734,160738,160757,160774,160777,160822,160826,160850],[10,159242,159238],{"id":159243},"_3-判断语句",[14,159245,159247],{"id":159246},"_31-布尔值","3.1 布尔值",[19,159249,159250],{},"判断语句依赖布尔值：",[57,159252,159254],{"className":59,"code":159253,"language":61,"meta":62,"style":62},"True\nFalse\n",[23,159255,159256,159261],{"__ignoreMap":62},[66,159257,159258],{"class":68,"line":69},[66,159259,159260],{"class":102},"True\n",[66,159262,159263],{"class":68,"line":80},[66,159264,159265],{"class":102},"False\n",[19,159267,159268],{},"比较表达式会产生布尔值：",[57,159270,159272],{"className":59,"code":159271,"language":61,"meta":62,"style":62},"age = 18\nprint(age >= 18)  # True\n",[23,159273,159274,159282],{"__ignoreMap":62},[66,159275,159276,159278,159280],{"class":68,"line":69},[66,159277,148313],{"class":76},[66,159279,99],{"class":72},[66,159281,148318],{"class":102},[66,159283,159284,159286,159288,159290,159292,159294],{"class":68,"line":80},[66,159285,244],{"class":102},[66,159287,157518],{"class":76},[66,159289,3540],{"class":72},[66,159291,158035],{"class":102},[66,159293,47593],{"class":76},[66,159295,159296],{"class":758},"# True\n",[14,159298,159300],{"id":159299},"_32-if基础语法","3.2 if基础语法",[57,159302,159304],{"className":59,"code":159303,"language":61,"meta":62,"style":62},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[23,159305,159306,159324,159328,159340],{"__ignoreMap":62},[66,159307,159308,159310,159312,159314,159316,159318,159320,159322],{"class":68,"line":69},[66,159309,148313],{"class":76},[66,159311,99],{"class":72},[66,159313,345],{"class":102},[66,159315,348],{"class":76},[66,159317,351],{"class":102},[66,159319,348],{"class":76},[66,159321,154154],{"class":356},[66,159323,360],{"class":76},[66,159325,159326],{"class":68,"line":80},[66,159327,109],{"emptyLinePlaceholder":108},[66,159329,159330,159332,159334,159336,159338],{"class":68,"line":112},[66,159331,3373],{"class":72},[66,159333,17510],{"class":76},[66,159335,3540],{"class":72},[66,159337,158035],{"class":102},[66,159339,126],{"class":76},[66,159341,159342,159344,159346,159349],{"class":68,"line":129},[66,159343,132],{"class":102},[66,159345,348],{"class":76},[66,159347,159348],{"class":356},"\"可以进入网吧\"",[66,159350,313],{"class":76},[19,159352,841],{},[31,159354,159355,159360,159363,159366],{},[34,159356,159357,159359],{},[23,159358,3373],{}," 后面是条件表达式。",[34,159361,159362],{},"条件后面必须写冒号。",[34,159364,159365],{},"条件成立时执行缩进代码块。",[34,159367,159368],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,159370,159371],{},"错误示例：",[57,159373,159375],{"className":59,"code":159374,"language":61,"meta":62,"style":62},"if age >= 18\n    print(\"可以进入\")\n",[23,159376,159377,159387],{"__ignoreMap":62},[66,159378,159379,159381,159383,159385],{"class":68,"line":69},[66,159380,3373],{"class":72},[66,159382,17510],{"class":76},[66,159384,3540],{"class":72},[66,159386,148318],{"class":102},[66,159388,159389,159391,159393,159396],{"class":68,"line":80},[66,159390,132],{"class":102},[66,159392,348],{"class":76},[66,159394,159395],{"class":356},"\"可以进入\"",[66,159397,313],{"class":76},[19,159399,159400],{},"缺少冒号。",[14,159402,159404],{"id":159403},"_33-if-else","3.3 if else",[57,159406,159408],{"className":59,"code":159407,"language":61,"meta":62,"style":62},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[23,159409,159410,159428,159432,159444,159455,159461],{"__ignoreMap":62},[66,159411,159412,159414,159416,159418,159420,159422,159424,159426],{"class":68,"line":69},[66,159413,148313],{"class":76},[66,159415,99],{"class":72},[66,159417,345],{"class":102},[66,159419,348],{"class":76},[66,159421,351],{"class":102},[66,159423,348],{"class":76},[66,159425,154154],{"class":356},[66,159427,360],{"class":76},[66,159429,159430],{"class":68,"line":80},[66,159431,109],{"emptyLinePlaceholder":108},[66,159433,159434,159436,159438,159440,159442],{"class":68,"line":112},[66,159435,3373],{"class":72},[66,159437,17510],{"class":76},[66,159439,3540],{"class":72},[66,159441,158035],{"class":102},[66,159443,126],{"class":76},[66,159445,159446,159448,159450,159453],{"class":68,"line":129},[66,159447,132],{"class":102},[66,159449,348],{"class":76},[66,159451,159452],{"class":356},"\"成年人\"",[66,159454,313],{"class":76},[66,159456,159457,159459],{"class":68,"line":138},[66,159458,1292],{"class":72},[66,159460,126],{"class":76},[66,159462,159463,159465,159467,159470],{"class":68,"line":227},[66,159464,132],{"class":102},[66,159466,348],{"class":76},[66,159468,159469],{"class":356},"\"未成年人\"",[66,159471,313],{"class":76},[19,159473,159474],{},"执行逻辑：",[31,159476,159477,159483,159488],{},[34,159478,159479,159480,159482],{},"条件成立，执行 ",[23,159481,3373],{}," 代码块。",[34,159484,159485,159486,159482],{},"条件不成立，执行 ",[23,159487,1292],{},[34,159489,159490],{},"两个代码块只会执行其中一个。",[14,159492,159494],{"id":159493},"_34-if-elif-else","3.4 if elif else",[19,159496,159497],{},"多条件判断：",[57,159499,159501],{"className":59,"code":159500,"language":61,"meta":62,"style":62},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[23,159502,159503,159521,159525,159539,159550,159564,159575,159588,159599,159605],{"__ignoreMap":62},[66,159504,159505,159507,159509,159511,159513,159515,159517,159519],{"class":68,"line":69},[66,159506,157109],{"class":76},[66,159508,99],{"class":72},[66,159510,345],{"class":102},[66,159512,348],{"class":76},[66,159514,351],{"class":102},[66,159516,348],{"class":76},[66,159518,154169],{"class":356},[66,159520,360],{"class":76},[66,159522,159523],{"class":68,"line":80},[66,159524,109],{"emptyLinePlaceholder":108},[66,159526,159527,159529,159532,159534,159537],{"class":68,"line":112},[66,159528,3373],{"class":72},[66,159530,159531],{"class":76}," score ",[66,159533,3540],{"class":72},[66,159535,159536],{"class":102}," 90",[66,159538,126],{"class":76},[66,159540,159541,159543,159545,159548],{"class":68,"line":129},[66,159542,132],{"class":102},[66,159544,348],{"class":76},[66,159546,159547],{"class":356},"\"优秀\"",[66,159549,313],{"class":76},[66,159551,159552,159555,159557,159559,159562],{"class":68,"line":138},[66,159553,159554],{"class":72},"elif",[66,159556,159531],{"class":76},[66,159558,3540],{"class":72},[66,159560,159561],{"class":102}," 80",[66,159563,126],{"class":76},[66,159565,159566,159568,159570,159573],{"class":68,"line":227},[66,159567,132],{"class":102},[66,159569,348],{"class":76},[66,159571,159572],{"class":356},"\"良好\"",[66,159574,313],{"class":76},[66,159576,159577,159579,159581,159583,159586],{"class":68,"line":236},[66,159578,159554],{"class":72},[66,159580,159531],{"class":76},[66,159582,3540],{"class":72},[66,159584,159585],{"class":102}," 60",[66,159587,126],{"class":76},[66,159589,159590,159592,159594,159597],{"class":68,"line":241},[66,159591,132],{"class":102},[66,159593,348],{"class":76},[66,159595,159596],{"class":356},"\"及格\"",[66,159598,313],{"class":76},[66,159600,159601,159603],{"class":68,"line":372},[66,159602,1292],{"class":72},[66,159604,126],{"class":76},[66,159606,159607,159609,159611,159614],{"class":68,"line":377},[66,159608,132],{"class":102},[66,159610,348],{"class":76},[66,159612,159613],{"class":356},"\"不及格\"",[66,159615,313],{"class":76},[19,159617,159618],{},"注意判断顺序很重要。",[19,159620,159621,159622,159625],{},"如果把 ",[23,159623,159624],{},"score >= 60"," 放在最前面：",[57,159627,159629],{"className":59,"code":159628,"language":61,"meta":62,"style":62},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[23,159630,159631,159643,159653,159665],{"__ignoreMap":62},[66,159632,159633,159635,159637,159639,159641],{"class":68,"line":69},[66,159634,3373],{"class":72},[66,159636,159531],{"class":76},[66,159638,3540],{"class":72},[66,159640,159585],{"class":102},[66,159642,126],{"class":76},[66,159644,159645,159647,159649,159651],{"class":68,"line":80},[66,159646,132],{"class":102},[66,159648,348],{"class":76},[66,159650,159596],{"class":356},[66,159652,313],{"class":76},[66,159654,159655,159657,159659,159661,159663],{"class":68,"line":112},[66,159656,159554],{"class":72},[66,159658,159531],{"class":76},[66,159660,3540],{"class":72},[66,159662,159536],{"class":102},[66,159664,126],{"class":76},[66,159666,159667,159669,159671,159673],{"class":68,"line":129},[66,159668,132],{"class":102},[66,159670,348],{"class":76},[66,159672,159547],{"class":356},[66,159674,313],{"class":76},[19,159676,159677,159678,159680],{},"成绩 95 会先满足 ",[23,159679,159624],{},"，后面的优秀分支就不会执行。",[14,159682,159684],{"id":159683},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,159686,159687],{},"嵌套判断就是在一个判断内部再写判断。",[57,159689,159691],{"className":59,"code":159690,"language":61,"meta":62,"style":62},"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",[23,159692,159693,159711,159726,159730,159742,159756,159766,159772,159783,159789],{"__ignoreMap":62},[66,159694,159695,159697,159699,159701,159703,159705,159707,159709],{"class":68,"line":69},[66,159696,148313],{"class":76},[66,159698,99],{"class":72},[66,159700,345],{"class":102},[66,159702,348],{"class":76},[66,159704,351],{"class":102},[66,159706,348],{"class":76},[66,159708,154154],{"class":356},[66,159710,360],{"class":76},[66,159712,159713,159715,159717,159719,159721,159724],{"class":68,"line":80},[66,159714,158111],{"class":76},[66,159716,99],{"class":72},[66,159718,1532],{"class":102},[66,159720,348],{"class":76},[66,159722,159723],{"class":356},"\"是否有票(y\u002Fn):\"",[66,159725,313],{"class":76},[66,159727,159728],{"class":68,"line":112},[66,159729,109],{"emptyLinePlaceholder":108},[66,159731,159732,159734,159736,159738,159740],{"class":68,"line":129},[66,159733,3373],{"class":72},[66,159735,17510],{"class":76},[66,159737,3540],{"class":72},[66,159739,158035],{"class":102},[66,159741,126],{"class":76},[66,159743,159744,159746,159749,159751,159754],{"class":68,"line":138},[66,159745,380],{"class":72},[66,159747,159748],{"class":76}," has_ticket ",[66,159750,531],{"class":72},[66,159752,159753],{"class":356}," \"y\"",[66,159755,126],{"class":76},[66,159757,159758,159760,159762,159764],{"class":68,"line":227},[66,159759,395],{"class":102},[66,159761,348],{"class":76},[66,159763,159395],{"class":356},[66,159765,313],{"class":76},[66,159767,159768,159770],{"class":68,"line":236},[66,159769,433],{"class":72},[66,159771,126],{"class":76},[66,159773,159774,159776,159778,159781],{"class":68,"line":241},[66,159775,395],{"class":102},[66,159777,348],{"class":76},[66,159779,159780],{"class":356},"\"请先买票\"",[66,159782,313],{"class":76},[66,159784,159785,159787],{"class":68,"line":372},[66,159786,1292],{"class":72},[66,159788,126],{"class":76},[66,159790,159791,159793,159795,159798],{"class":68,"line":377},[66,159792,132],{"class":102},[66,159794,348],{"class":76},[66,159796,159797],{"class":356},"\"未成年人禁止进入\"",[66,159799,313],{"class":76},[19,159801,159802],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,159804,159806],{"id":159805},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[484,159808,159810],{"id":159809},"_361-and","3.6.1 and",[19,159812,159813],{},"两个条件都成立才成立。",[57,159815,159817],{"className":59,"code":159816,"language":61,"meta":62,"style":62},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[23,159818,159819,159827,159835,159839,159854],{"__ignoreMap":62},[66,159820,159821,159823,159825],{"class":68,"line":69},[66,159822,148313],{"class":76},[66,159824,99],{"class":72},[66,159826,89841],{"class":102},[66,159828,159829,159831,159833],{"class":68,"line":80},[66,159830,158111],{"class":76},[66,159832,99],{"class":72},[66,159834,155351],{"class":102},[66,159836,159837],{"class":68,"line":112},[66,159838,109],{"emptyLinePlaceholder":108},[66,159840,159841,159843,159845,159847,159849,159851],{"class":68,"line":129},[66,159842,3373],{"class":72},[66,159844,17510],{"class":76},[66,159846,3540],{"class":72},[66,159848,158035],{"class":102},[66,159850,122200],{"class":72},[66,159852,159853],{"class":76}," has_ticket:\n",[66,159855,159856,159858,159860,159862],{"class":68,"line":138},[66,159857,132],{"class":102},[66,159859,348],{"class":76},[66,159861,159395],{"class":356},[66,159863,313],{"class":76},[484,159865,159867],{"id":159866},"_362-or","3.6.2 or",[19,159869,159870],{},"只要一个条件成立就成立。",[57,159872,159874],{"className":59,"code":159873,"language":61,"meta":62,"style":62},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[23,159875,159876,159885,159894,159898,159910],{"__ignoreMap":62},[66,159877,159878,159881,159883],{"class":68,"line":69},[66,159879,159880],{"class":76},"is_vip ",[66,159882,99],{"class":72},[66,159884,127577],{"class":102},[66,159886,159887,159890,159892],{"class":68,"line":80},[66,159888,159889],{"class":76},"coupon ",[66,159891,99],{"class":72},[66,159893,155351],{"class":102},[66,159895,159896],{"class":68,"line":112},[66,159897,109],{"emptyLinePlaceholder":108},[66,159899,159900,159902,159905,159907],{"class":68,"line":129},[66,159901,3373],{"class":72},[66,159903,159904],{"class":76}," is_vip ",[66,159906,116861],{"class":72},[66,159908,159909],{"class":76}," coupon:\n",[66,159911,159912,159914,159916,159919],{"class":68,"line":138},[66,159913,132],{"class":102},[66,159915,348],{"class":76},[66,159917,159918],{"class":356},"\"可以享受优惠\"",[66,159920,313],{"class":76},[484,159922,159924],{"id":159923},"_363-not","3.6.3 not",[19,159926,159927],{},"取反。",[57,159929,159931],{"className":59,"code":159930,"language":61,"meta":62,"style":62},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[23,159932,159933,159942,159946,159955],{"__ignoreMap":62},[66,159934,159935,159938,159940],{"class":68,"line":69},[66,159936,159937],{"class":76},"is_closed ",[66,159939,99],{"class":72},[66,159941,127577],{"class":102},[66,159943,159944],{"class":68,"line":80},[66,159945,109],{"emptyLinePlaceholder":108},[66,159947,159948,159950,159952],{"class":68,"line":112},[66,159949,3373],{"class":72},[66,159951,40718],{"class":72},[66,159953,159954],{"class":76}," is_closed:\n",[66,159956,159957,159959,159961,159964],{"class":68,"line":129},[66,159958,132],{"class":102},[66,159960,348],{"class":76},[66,159962,159963],{"class":356},"\"店铺营业中\"",[66,159965,313],{"class":76},[14,159967,159969],{"id":159968},"_37-链式比较","3.7 链式比较",[19,159971,159972],{},"Python 支持链式比较：",[57,159974,159976],{"className":59,"code":159975,"language":61,"meta":62,"style":62},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[23,159977,159978,159987,159991,160008],{"__ignoreMap":62},[66,159979,159980,159982,159984],{"class":68,"line":69},[66,159981,157109],{"class":76},[66,159983,99],{"class":72},[66,159985,159986],{"class":102}," 85\n",[66,159988,159989],{"class":68,"line":80},[66,159990,109],{"emptyLinePlaceholder":108},[66,159992,159993,159995,159997,160000,160002,160004,160006],{"class":68,"line":112},[66,159994,3373],{"class":72},[66,159996,962],{"class":102},[66,159998,159999],{"class":72}," \u003C=",[66,160001,159531],{"class":76},[66,160003,120],{"class":72},[66,160005,212],{"class":102},[66,160007,126],{"class":76},[66,160009,160010,160012,160014,160017],{"class":68,"line":129},[66,160011,132],{"class":102},[66,160013,348],{"class":76},[66,160015,160016],{"class":356},"\"成绩合法\"",[66,160018,313],{"class":76},[19,160020,160021],{},"等价于：",[57,160023,160025],{"className":59,"code":160024,"language":61,"meta":62,"style":62},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[23,160026,160027,160047],{"__ignoreMap":62},[66,160028,160029,160031,160033,160035,160037,160039,160041,160043,160045],{"class":68,"line":69},[66,160030,3373],{"class":72},[66,160032,159531],{"class":76},[66,160034,3540],{"class":72},[66,160036,962],{"class":102},[66,160038,122200],{"class":72},[66,160040,159531],{"class":76},[66,160042,120],{"class":72},[66,160044,212],{"class":102},[66,160046,126],{"class":76},[66,160048,160049,160051,160053,160055],{"class":68,"line":80},[66,160050,132],{"class":102},[66,160052,348],{"class":76},[66,160054,160016],{"class":356},[66,160056,313],{"class":76},[14,160058,160060],{"id":160059},"_38-真值和假值","3.8 真值和假值",[19,160062,118238,160063,160065],{},[23,160064,3373],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,160067,160068],{},"假值：",[57,160070,160072],{"className":59,"code":160071,"language":61,"meta":62,"style":62},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[23,160073,160074,160078,160083,160087,160091,160096,160100,160104,160109],{"__ignoreMap":62},[66,160075,160076],{"class":68,"line":69},[66,160077,159265],{"class":102},[66,160079,160080],{"class":68,"line":80},[66,160081,160082],{"class":102},"None\n",[66,160084,160085],{"class":68,"line":112},[66,160086,4906],{"class":102},[66,160088,160089],{"class":68,"line":129},[66,160090,34134],{"class":102},[66,160092,160093],{"class":68,"line":138},[66,160094,160095],{"class":356},"\"\"\n",[66,160097,160098],{"class":68,"line":227},[66,160099,34149],{"class":76},[66,160101,160102],{"class":68,"line":236},[66,160103,1253],{"class":76},[66,160105,160106],{"class":68,"line":241},[66,160107,160108],{"class":76},"{}\n",[66,160110,160111,160113],{"class":68,"line":372},[66,160112,157041],{"class":102},[66,160114,1253],{"class":76},[19,160116,86],{},[57,160118,160120],{"className":59,"code":160119,"language":61,"meta":62,"style":62},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[23,160121,160122,160136,160140,160146,160166,160172],{"__ignoreMap":62},[66,160123,160124,160126,160128,160130,160132,160134],{"class":68,"line":69},[66,160125,642],{"class":76},[66,160127,99],{"class":72},[66,160129,1532],{"class":102},[66,160131,348],{"class":76},[66,160133,154139],{"class":356},[66,160135,313],{"class":76},[66,160137,160138],{"class":68,"line":80},[66,160139,109],{"emptyLinePlaceholder":108},[66,160141,160142,160144],{"class":68,"line":112},[66,160143,3373],{"class":72},[66,160145,663],{"class":76},[66,160147,160148,160150,160152,160154,160156,160158,160160,160162,160164],{"class":68,"line":129},[66,160149,132],{"class":102},[66,160151,348],{"class":76},[66,160153,445],{"class":72},[66,160155,158804],{"class":356},[66,160157,451],{"class":102},[66,160159,81588],{"class":76},[66,160161,457],{"class":102},[66,160163,1130],{"class":356},[66,160165,313],{"class":76},[66,160167,160168,160170],{"class":68,"line":138},[66,160169,1292],{"class":72},[66,160171,126],{"class":76},[66,160173,160174,160176,160178,160181],{"class":68,"line":227},[66,160175,132],{"class":102},[66,160177,348],{"class":76},[66,160179,160180],{"class":356},"\"姓名不能为空\"",[66,160182,313],{"class":76},[14,160184,160186],{"id":160185},"_39-match语句","3.9 match语句",[19,160188,160189,160190,160192],{},"Python 3.10 开始支持 ",[23,160191,73044],{},"。它适合处理固定选项。",[57,160194,160196],{"className":59,"code":160195,"language":61,"meta":62,"style":62},"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",[23,160197,160198,160214,160218,160225,160235,160246,160255,160266,160275,160286,160293],{"__ignoreMap":62},[66,160199,160200,160203,160205,160207,160209,160212],{"class":68,"line":69},[66,160201,160202],{"class":76},"command ",[66,160204,99],{"class":72},[66,160206,1532],{"class":102},[66,160208,348],{"class":76},[66,160210,160211],{"class":356},"\"请输入命令:\"",[66,160213,313],{"class":76},[66,160215,160216],{"class":68,"line":80},[66,160217,109],{"emptyLinePlaceholder":108},[66,160219,160220,160222],{"class":68,"line":112},[66,160221,73044],{"class":72},[66,160223,160224],{"class":76}," command:\n",[66,160226,160227,160230,160233],{"class":68,"line":129},[66,160228,160229],{"class":72},"    case",[66,160231,160232],{"class":356}," \"start\"",[66,160234,126],{"class":76},[66,160236,160237,160239,160241,160244],{"class":68,"line":138},[66,160238,395],{"class":102},[66,160240,348],{"class":76},[66,160242,160243],{"class":356},"\"启动\"",[66,160245,313],{"class":76},[66,160247,160248,160250,160253],{"class":68,"line":227},[66,160249,160229],{"class":72},[66,160251,160252],{"class":356}," \"stop\"",[66,160254,126],{"class":76},[66,160256,160257,160259,160261,160264],{"class":68,"line":236},[66,160258,395],{"class":102},[66,160260,348],{"class":76},[66,160262,160263],{"class":356},"\"停止\"",[66,160265,313],{"class":76},[66,160267,160268,160270,160273],{"class":68,"line":241},[66,160269,160229],{"class":72},[66,160271,160272],{"class":356}," \"restart\"",[66,160274,126],{"class":76},[66,160276,160277,160279,160281,160284],{"class":68,"line":372},[66,160278,395],{"class":102},[66,160280,348],{"class":76},[66,160282,160283],{"class":356},"\"重启\"",[66,160285,313],{"class":76},[66,160287,160288,160290],{"class":68,"line":377},[66,160289,160229],{"class":72},[66,160291,160292],{"class":76}," _:\n",[66,160294,160295,160297,160299,160302],{"class":68,"line":392},[66,160296,395],{"class":102},[66,160298,348],{"class":76},[66,160300,160301],{"class":356},"\"未知命令\"",[66,160303,313],{"class":76},[19,160305,160306,160307,160309,160310,160312],{},"入门阶段掌握 ",[23,160308,156410],{}," 更重要，",[23,160311,73044],{}," 可以作为补充。",[14,160314,160316],{"id":160315},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,160318,1472],{},[31,160320,160321,160324,160327],{},[34,160322,160323],{},"输入成绩。",[34,160325,160326],{},"判断成绩是否合法。",[34,160328,160329],{},"输出等级。",[19,160331,1486],{},[57,160333,160335],{"className":59,"code":160334,"language":61,"meta":62,"style":62},"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",[23,160336,160337,160355,160359,160377,160388,160400,160411,160423,160434,160447,160458,160470,160481,160487],{"__ignoreMap":62},[66,160338,160339,160341,160343,160345,160347,160349,160351,160353],{"class":68,"line":69},[66,160340,157109],{"class":76},[66,160342,99],{"class":72},[66,160344,111569],{"class":102},[66,160346,348],{"class":76},[66,160348,351],{"class":102},[66,160350,348],{"class":76},[66,160352,154169],{"class":356},[66,160354,360],{"class":76},[66,160356,160357],{"class":68,"line":80},[66,160358,109],{"emptyLinePlaceholder":108},[66,160360,160361,160363,160365,160367,160369,160371,160373,160375],{"class":68,"line":112},[66,160362,3373],{"class":72},[66,160364,40718],{"class":72},[66,160366,962],{"class":102},[66,160368,159999],{"class":72},[66,160370,159531],{"class":76},[66,160372,120],{"class":72},[66,160374,212],{"class":102},[66,160376,126],{"class":76},[66,160378,160379,160381,160383,160386],{"class":68,"line":129},[66,160380,132],{"class":102},[66,160382,348],{"class":76},[66,160384,160385],{"class":356},"\"成绩不合法\"",[66,160387,313],{"class":76},[66,160389,160390,160392,160394,160396,160398],{"class":68,"line":138},[66,160391,159554],{"class":72},[66,160393,159531],{"class":76},[66,160395,3540],{"class":72},[66,160397,159536],{"class":102},[66,160399,126],{"class":76},[66,160401,160402,160404,160406,160409],{"class":68,"line":227},[66,160403,132],{"class":102},[66,160405,348],{"class":76},[66,160407,160408],{"class":356},"\"等级:A\"",[66,160410,313],{"class":76},[66,160412,160413,160415,160417,160419,160421],{"class":68,"line":236},[66,160414,159554],{"class":72},[66,160416,159531],{"class":76},[66,160418,3540],{"class":72},[66,160420,159561],{"class":102},[66,160422,126],{"class":76},[66,160424,160425,160427,160429,160432],{"class":68,"line":241},[66,160426,132],{"class":102},[66,160428,348],{"class":76},[66,160430,160431],{"class":356},"\"等级:B\"",[66,160433,313],{"class":76},[66,160435,160436,160438,160440,160442,160445],{"class":68,"line":372},[66,160437,159554],{"class":72},[66,160439,159531],{"class":76},[66,160441,3540],{"class":72},[66,160443,160444],{"class":102}," 70",[66,160446,126],{"class":76},[66,160448,160449,160451,160453,160456],{"class":68,"line":377},[66,160450,132],{"class":102},[66,160452,348],{"class":76},[66,160454,160455],{"class":356},"\"等级:C\"",[66,160457,313],{"class":76},[66,160459,160460,160462,160464,160466,160468],{"class":68,"line":392},[66,160461,159554],{"class":72},[66,160463,159531],{"class":76},[66,160465,3540],{"class":72},[66,160467,159585],{"class":102},[66,160469,126],{"class":76},[66,160471,160472,160474,160476,160479],{"class":68,"line":405},[66,160473,132],{"class":102},[66,160475,348],{"class":76},[66,160477,160478],{"class":356},"\"等级:D\"",[66,160480,313],{"class":76},[66,160482,160483,160485],{"class":68,"line":418},[66,160484,1292],{"class":72},[66,160486,126],{"class":76},[66,160488,160489,160491,160493,160496],{"class":68,"line":430},[66,160490,132],{"class":102},[66,160492,348],{"class":76},[66,160494,160495],{"class":356},"\"等级:E\"",[66,160497,313],{"class":76},[14,160499,160501],{"id":160500},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,160503,1472],{},[31,160505,160506,160509,160512,160515],{},[34,160507,160508],{},"输入消费金额。",[34,160510,160511],{},"输入会员等级，普通、银卡、金卡。",[34,160513,160514],{},"普通不打折，银卡 9 折，金卡 8 折。",[34,160516,160517],{},"满 500 再减 50。",[19,160519,1486],{},[57,160521,160523],{"className":59,"code":160522,"language":61,"meta":62,"style":62},"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",[23,160524,160525,160545,160561,160565,160573,160577,160591,160601,160614,160623,160636,160644,160650,160661,160665,160679,160683,160697,160707,160711],{"__ignoreMap":62},[66,160526,160527,160530,160532,160534,160536,160538,160540,160543],{"class":68,"line":69},[66,160528,160529],{"class":76},"amount ",[66,160531,99],{"class":72},[66,160533,111569],{"class":102},[66,160535,348],{"class":76},[66,160537,351],{"class":102},[66,160539,348],{"class":76},[66,160541,160542],{"class":356},"\"请输入消费金额:\"",[66,160544,360],{"class":76},[66,160546,160547,160550,160552,160554,160556,160559],{"class":68,"line":80},[66,160548,160549],{"class":76},"level ",[66,160551,99],{"class":72},[66,160553,1532],{"class":102},[66,160555,348],{"class":76},[66,160557,160558],{"class":356},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[66,160560,313],{"class":76},[66,160562,160563],{"class":68,"line":112},[66,160564,109],{"emptyLinePlaceholder":108},[66,160566,160567,160569,160571],{"class":68,"line":129},[66,160568,158986],{"class":76},[66,160570,99],{"class":72},[66,160572,103],{"class":102},[66,160574,160575],{"class":68,"line":138},[66,160576,109],{"emptyLinePlaceholder":108},[66,160578,160579,160581,160584,160586,160589],{"class":68,"line":227},[66,160580,3373],{"class":72},[66,160582,160583],{"class":76}," level ",[66,160585,531],{"class":72},[66,160587,160588],{"class":356}," \"银卡\"",[66,160590,126],{"class":76},[66,160592,160593,160596,160598],{"class":68,"line":236},[66,160594,160595],{"class":76},"    discount ",[66,160597,99],{"class":72},[66,160599,160600],{"class":102}," 0.9\n",[66,160602,160603,160605,160607,160609,160612],{"class":68,"line":241},[66,160604,159554],{"class":72},[66,160606,160583],{"class":76},[66,160608,531],{"class":72},[66,160610,160611],{"class":356}," \"金卡\"",[66,160613,126],{"class":76},[66,160615,160616,160618,160620],{"class":68,"line":372},[66,160617,160595],{"class":76},[66,160619,99],{"class":72},[66,160621,160622],{"class":102}," 0.8\n",[66,160624,160625,160627,160629,160631,160634],{"class":68,"line":377},[66,160626,159554],{"class":72},[66,160628,160583],{"class":76},[66,160630,531],{"class":72},[66,160632,160633],{"class":356}," \"普通\"",[66,160635,126],{"class":76},[66,160637,160638,160640,160642],{"class":68,"line":392},[66,160639,160595],{"class":76},[66,160641,99],{"class":72},[66,160643,103],{"class":102},[66,160645,160646,160648],{"class":68,"line":405},[66,160647,1292],{"class":72},[66,160649,126],{"class":76},[66,160651,160652,160654,160656,160659],{"class":68,"line":418},[66,160653,132],{"class":102},[66,160655,348],{"class":76},[66,160657,160658],{"class":356},"\"会员等级输入错误，按普通会员计算\"",[66,160660,313],{"class":76},[66,160662,160663],{"class":68,"line":430},[66,160664,109],{"emptyLinePlaceholder":108},[66,160666,160667,160670,160672,160675,160677],{"class":68,"line":438},[66,160668,160669],{"class":76},"pay ",[66,160671,99],{"class":72},[66,160673,160674],{"class":76}," amount ",[66,160676,1208],{"class":72},[66,160678,159024],{"class":76},[66,160680,160681],{"class":68,"line":465},[66,160682,109],{"emptyLinePlaceholder":108},[66,160684,160685,160687,160690,160692,160695],{"class":68,"line":1805},[66,160686,3373],{"class":72},[66,160688,160689],{"class":76}," pay ",[66,160691,3540],{"class":72},[66,160693,160694],{"class":102}," 500",[66,160696,126],{"class":76},[66,160698,160699,160702,160704],{"class":68,"line":1817},[66,160700,160701],{"class":76},"    pay ",[66,160703,152015],{"class":72},[66,160705,160706],{"class":102}," 50\n",[66,160708,160709],{"class":68,"line":1822},[66,160710,109],{"emptyLinePlaceholder":108},[66,160712,160713,160715,160717,160719,160721,160723,160726,160728,160730,160732],{"class":68,"line":1829},[66,160714,244],{"class":102},[66,160716,348],{"class":76},[66,160718,445],{"class":72},[66,160720,159105],{"class":356},[66,160722,451],{"class":102},[66,160724,160725],{"class":76},"pay",[66,160727,158909],{"class":72},[66,160729,457],{"class":102},[66,160731,158762],{"class":356},[66,160733,313],{"class":76},[14,160735,160737],{"id":160736},"_312-易错点","3.12 易错点",[31,160739,160740,160743,160746,160749,160754],{},[34,160741,160742],{},"冒号不能漏。",[34,160744,160745],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[34,160747,160748],{},"多分支判断要注意顺序。",[34,160750,160751,160752,158],{},"判断相等用 ",[23,160753,531],{},[34,160755,160756],{},"字符串比较区分大小写：",[57,160758,160760],{"className":59,"code":160759,"language":61,"meta":62,"style":62},"\"Y\" == \"y\"  # False\n",[23,160761,160762],{"__ignoreMap":62},[66,160763,160764,160767,160769,160771],{"class":68,"line":69},[66,160765,160766],{"class":356},"\"Y\"",[66,160768,959],{"class":72},[66,160770,159753],{"class":356},[66,160772,160773],{"class":758},"  # False\n",[19,160775,160776],{},"可转换后再判断：",[57,160778,160780],{"className":59,"code":160779,"language":61,"meta":62,"style":62},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[23,160781,160782,160798,160811],{"__ignoreMap":62},[66,160783,160784,160786,160788,160790,160792,160795],{"class":68,"line":69},[66,160785,296],{"class":76},[66,160787,99],{"class":72},[66,160789,1532],{"class":102},[66,160791,348],{"class":76},[66,160793,160794],{"class":356},"\"是否继续(y\u002Fn):\"",[66,160796,160797],{"class":76},").lower()\n",[66,160799,160800,160802,160805,160807,160809],{"class":68,"line":80},[66,160801,3373],{"class":72},[66,160803,160804],{"class":76}," answer ",[66,160806,531],{"class":72},[66,160808,159753],{"class":356},[66,160810,126],{"class":76},[66,160812,160813,160815,160817,160820],{"class":68,"line":112},[66,160814,132],{"class":102},[66,160816,348],{"class":76},[66,160818,160819],{"class":356},"\"继续\"",[66,160821,313],{"class":76},[14,160823,160825],{"id":160824},"_313-本章练习","3.13 本章练习",[31,160827,160828,160831,160834,160837,160847],{},[34,160829,160830],{},"输入年龄，判断是否成年。",[34,160832,160833],{},"输入年份，判断是否为闰年。",[34,160835,160836],{},"输入三个数字，输出最大值。",[34,160838,160839,160840,160843,160844,160846],{},"写登录判断：用户名是 ",[23,160841,160842],{},"admin"," 且密码是 ",[23,160845,16888],{}," 才登录成功。",[34,160848,160849],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[1903,160851,160852],{},"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":62,"searchDepth":80,"depth":80,"links":160854},[160855,160856,160857,160858,160859,160860,160865,160866,160867,160868,160869,160870,160871],{"id":159246,"depth":80,"text":159247},{"id":159299,"depth":80,"text":159300},{"id":159403,"depth":80,"text":159404},{"id":159493,"depth":80,"text":159494},{"id":159683,"depth":80,"text":159684},{"id":159805,"depth":80,"text":159806,"children":160861},[160862,160863,160864],{"id":159809,"depth":112,"text":159810},{"id":159866,"depth":112,"text":159867},{"id":159923,"depth":112,"text":159924},{"id":159968,"depth":80,"text":159969},{"id":160059,"depth":80,"text":160060},{"id":160185,"depth":80,"text":160186},{"id":160315,"depth":80,"text":160316},{"id":160500,"depth":80,"text":160501},{"id":160736,"depth":80,"text":160737},{"id":160824,"depth":80,"text":160825},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":159238,"description":1926},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":4,"title":5,"body":160878,"description":1926,"extension":1927,"meta":162466,"navigation":108,"path":1929,"seo":162467,"stem":1931,"__hash__":1932},{"type":7,"value":160879,"toc":162446},[160880,160882,160884,160888,160890,160902,160904,160906,160920,160922,160964,160966,160978,160980,160982,161044,161046,161060,161062,161212,161218,161220,161222,161226,161272,161274,161279,161281,161285,161331,161333,161338,161340,161344,161376,161378,161422,161424,161428,161480,161484,161514,161518,161520,161574,161576,161646,161648,161706,161708,161710,161782,161784,161786,161890,161892,161910,161912,161920,161986,161988,162074,162076,162078,162086,162088,162206,162208,162400,162406,162408,162430,162432,162444],[10,160881,5],{"id":12},[14,160883,17],{"id":16},[19,160885,21,160886,26],{},[23,160887,25],{},[19,160889,29],{},[31,160891,160892,160894,160896,160898,160900],{},[34,160893,36],{},[34,160895,39],{},[34,160897,42],{},[34,160899,45],{},[34,160901,48],{},[14,160903,52],{"id":51},[19,160905,55],{},[57,160907,160908],{"className":59,"code":60,"language":61,"meta":62,"style":62},[23,160909,160910,160916],{"__ignoreMap":62},[66,160911,160912,160914],{"class":68,"line":69},[66,160913,73],{"class":72},[66,160915,77],{"class":76},[66,160917,160918],{"class":68,"line":80},[66,160919,83],{"class":76},[19,160921,86],{},[57,160923,160924],{"className":59,"code":89,"language":61,"meta":62,"style":62},[23,160925,160926,160934,160938,160950,160956],{"__ignoreMap":62},[66,160927,160928,160930,160932],{"class":68,"line":69},[66,160929,96],{"class":76},[66,160931,99],{"class":72},[66,160933,103],{"class":102},[66,160935,160936],{"class":68,"line":80},[66,160937,109],{"emptyLinePlaceholder":108},[66,160939,160940,160942,160944,160946,160948],{"class":68,"line":112},[66,160941,73],{"class":72},[66,160943,117],{"class":76},[66,160945,120],{"class":72},[66,160947,123],{"class":102},[66,160949,126],{"class":76},[66,160951,160952,160954],{"class":68,"line":129},[66,160953,132],{"class":102},[66,160955,135],{"class":76},[66,160957,160958,160960,160962],{"class":68,"line":138},[66,160959,141],{"class":76},[66,160961,144],{"class":72},[66,160963,103],{"class":102},[19,160965,149],{},[31,160967,160968,160972,160974,160976],{},[34,160969,154,160970,158],{},[23,160971,157],{},[34,160973,161],{},[34,160975,164],{},[34,160977,167],{},[14,160979,171],{"id":170},[19,160981,174],{},[57,160983,160984],{"className":59,"code":177,"language":61,"meta":62,"style":62},[23,160985,160986,160994,161002,161006,161018,161026,161034,161038],{"__ignoreMap":62},[66,160987,160988,160990,160992],{"class":68,"line":69},[66,160989,96],{"class":76},[66,160991,99],{"class":72},[66,160993,103],{"class":102},[66,160995,160996,160998,161000],{"class":68,"line":80},[66,160997,192],{"class":76},[66,160999,99],{"class":72},[66,161001,197],{"class":102},[66,161003,161004],{"class":68,"line":112},[66,161005,109],{"emptyLinePlaceholder":108},[66,161007,161008,161010,161012,161014,161016],{"class":68,"line":129},[66,161009,73],{"class":72},[66,161011,117],{"class":76},[66,161013,120],{"class":72},[66,161015,212],{"class":102},[66,161017,126],{"class":76},[66,161019,161020,161022,161024],{"class":68,"line":138},[66,161021,219],{"class":76},[66,161023,144],{"class":72},[66,161025,224],{"class":76},[66,161027,161028,161030,161032],{"class":68,"line":227},[66,161029,141],{"class":76},[66,161031,144],{"class":72},[66,161033,103],{"class":102},[66,161035,161036],{"class":68,"line":236},[66,161037,109],{"emptyLinePlaceholder":108},[66,161039,161040,161042],{"class":68,"line":241},[66,161041,244],{"class":102},[66,161043,247],{"class":76},[19,161045,250],{},[31,161047,161048,161052,161056],{},[34,161049,161050,258],{},[23,161051,257],{},[34,161053,161054,264],{},[23,161055,263],{},[34,161057,267,161058,270],{},[23,161059,257],{},[14,161061,274],{"id":273},[57,161063,161064],{"className":59,"code":277,"language":61,"meta":62,"style":62},[23,161065,161066,161072,161076,161092,161100,161104,161112,161130,161138,161142,161152,161162,161172,161182,161188,161208],{"__ignoreMap":62},[66,161067,161068,161070],{"class":68,"line":69},[66,161069,284],{"class":72},[66,161071,287],{"class":76},[66,161073,161074],{"class":68,"line":80},[66,161075,109],{"emptyLinePlaceholder":108},[66,161077,161078,161080,161082,161084,161086,161088,161090],{"class":68,"line":112},[66,161079,296],{"class":76},[66,161081,99],{"class":72},[66,161083,301],{"class":76},[66,161085,304],{"class":102},[66,161087,307],{"class":76},[66,161089,310],{"class":102},[66,161091,313],{"class":76},[66,161093,161094,161096,161098],{"class":68,"line":129},[66,161095,318],{"class":76},[66,161097,99],{"class":72},[66,161099,197],{"class":102},[66,161101,161102],{"class":68,"line":138},[66,161103,109],{"emptyLinePlaceholder":108},[66,161105,161106,161108,161110],{"class":68,"line":227},[66,161107,73],{"class":72},[66,161109,333],{"class":102},[66,161111,126],{"class":76},[66,161113,161114,161116,161118,161120,161122,161124,161126,161128],{"class":68,"line":236},[66,161115,340],{"class":76},[66,161117,99],{"class":72},[66,161119,345],{"class":102},[66,161121,348],{"class":76},[66,161123,351],{"class":102},[66,161125,348],{"class":76},[66,161127,357],{"class":356},[66,161129,360],{"class":76},[66,161131,161132,161134,161136],{"class":68,"line":241},[66,161133,365],{"class":76},[66,161135,144],{"class":72},[66,161137,103],{"class":102},[66,161139,161140],{"class":68,"line":372},[66,161141,109],{"emptyLinePlaceholder":108},[66,161143,161144,161146,161148,161150],{"class":68,"line":377},[66,161145,380],{"class":72},[66,161147,383],{"class":76},[66,161149,386],{"class":72},[66,161151,389],{"class":76},[66,161153,161154,161156,161158,161160],{"class":68,"line":392},[66,161155,395],{"class":102},[66,161157,348],{"class":76},[66,161159,400],{"class":356},[66,161161,313],{"class":76},[66,161163,161164,161166,161168,161170],{"class":68,"line":405},[66,161165,408],{"class":72},[66,161167,383],{"class":76},[66,161169,413],{"class":72},[66,161171,389],{"class":76},[66,161173,161174,161176,161178,161180],{"class":68,"line":418},[66,161175,395],{"class":102},[66,161177,348],{"class":76},[66,161179,425],{"class":356},[66,161181,313],{"class":76},[66,161183,161184,161186],{"class":68,"line":430},[66,161185,433],{"class":72},[66,161187,126],{"class":76},[66,161189,161190,161192,161194,161196,161198,161200,161202,161204,161206],{"class":68,"line":438},[66,161191,395],{"class":102},[66,161193,348],{"class":76},[66,161195,445],{"class":72},[66,161197,448],{"class":356},[66,161199,451],{"class":102},[66,161201,454],{"class":76},[66,161203,457],{"class":102},[66,161205,460],{"class":356},[66,161207,313],{"class":76},[66,161209,161210],{"class":68,"line":465},[66,161211,468],{"class":72},[19,161213,161214,474,161216,478],{},[23,161215,473],{},[23,161217,477],{},[14,161219,482],{"id":481},[484,161221,487],{"id":486},[19,161223,161224,492],{},[23,161225,477],{},[57,161227,161228],{"className":59,"code":495,"language":61,"meta":62,"style":62},[23,161229,161230,161250,161262,161266],{"__ignoreMap":62},[66,161231,161232,161234,161236,161238,161240,161242,161244,161246,161248],{"class":68,"line":69},[66,161233,502],{"class":72},[66,161235,117],{"class":76},[66,161237,507],{"class":72},[66,161239,510],{"class":102},[66,161241,348],{"class":76},[66,161243,304],{"class":102},[66,161245,307],{"class":76},[66,161247,519],{"class":102},[66,161249,522],{"class":76},[66,161251,161252,161254,161256,161258,161260],{"class":68,"line":80},[66,161253,380],{"class":72},[66,161255,117],{"class":76},[66,161257,531],{"class":72},[66,161259,534],{"class":102},[66,161261,126],{"class":76},[66,161263,161264],{"class":68,"line":112},[66,161265,468],{"class":72},[66,161267,161268,161270],{"class":68,"line":129},[66,161269,132],{"class":102},[66,161271,135],{"class":76},[19,161273,549],{},[57,161275,161277],{"className":161276,"code":554,"language":555,"meta":62},[553],[23,161278,554],{"__ignoreMap":62},[484,161280,561],{"id":560},[19,161282,161283,567],{},[23,161284,566],{},[57,161286,161287],{"className":59,"code":570,"language":61,"meta":62,"style":62},[23,161288,161289,161309,161321,161325],{"__ignoreMap":62},[66,161290,161291,161293,161295,161297,161299,161301,161303,161305,161307],{"class":68,"line":69},[66,161292,502],{"class":72},[66,161294,117],{"class":76},[66,161296,507],{"class":72},[66,161298,510],{"class":102},[66,161300,348],{"class":76},[66,161302,304],{"class":102},[66,161304,307],{"class":76},[66,161306,519],{"class":102},[66,161308,522],{"class":76},[66,161310,161311,161313,161315,161317,161319],{"class":68,"line":80},[66,161312,380],{"class":72},[66,161314,117],{"class":76},[66,161316,531],{"class":72},[66,161318,534],{"class":102},[66,161320,126],{"class":76},[66,161322,161323],{"class":68,"line":112},[66,161324,609],{"class":72},[66,161326,161327,161329],{"class":68,"line":129},[66,161328,132],{"class":102},[66,161330,135],{"class":76},[19,161332,549],{},[57,161334,161336],{"className":161335,"code":621,"language":555,"meta":62},[553],[23,161337,621],{"__ignoreMap":62},[14,161339,627],{"id":626},[19,161341,161342,632],{},[23,161343,502],{},[57,161345,161346],{"className":59,"code":635,"language":61,"meta":62,"style":62},[23,161347,161348,161356,161360,161370],{"__ignoreMap":62},[66,161349,161350,161352,161354],{"class":68,"line":69},[66,161351,642],{"class":76},[66,161353,99],{"class":72},[66,161355,647],{"class":356},[66,161357,161358],{"class":68,"line":80},[66,161359,109],{"emptyLinePlaceholder":108},[66,161361,161362,161364,161366,161368],{"class":68,"line":112},[66,161363,502],{"class":72},[66,161365,658],{"class":76},[66,161367,507],{"class":72},[66,161369,663],{"class":76},[66,161371,161372,161374],{"class":68,"line":129},[66,161373,132],{"class":102},[66,161375,670],{"class":76},[19,161377,673],{},[57,161379,161380],{"className":59,"code":676,"language":61,"meta":62,"style":62},[23,161381,161382,161402,161406,161416],{"__ignoreMap":62},[66,161383,161384,161386,161388,161390,161392,161394,161396,161398,161400],{"class":68,"line":69},[66,161385,683],{"class":76},[66,161387,99],{"class":72},[66,161389,688],{"class":76},[66,161391,691],{"class":356},[66,161393,307],{"class":76},[66,161395,696],{"class":356},[66,161397,307],{"class":76},[66,161399,701],{"class":356},[66,161401,704],{"class":76},[66,161403,161404],{"class":68,"line":80},[66,161405,109],{"emptyLinePlaceholder":108},[66,161407,161408,161410,161412,161414],{"class":68,"line":112},[66,161409,502],{"class":72},[66,161411,715],{"class":76},[66,161413,507],{"class":72},[66,161415,720],{"class":76},[66,161417,161418,161420],{"class":68,"line":129},[66,161419,132],{"class":102},[66,161421,727],{"class":76},[14,161423,731],{"id":730},[19,161425,161426,737],{},[23,161427,736],{},[57,161429,161430],{"className":59,"code":740,"language":61,"meta":62,"style":62},[23,161431,161432,161444,161460],{"__ignoreMap":62},[66,161433,161434,161436,161438,161440,161442],{"class":68,"line":69},[66,161435,747],{"class":102},[66,161437,348],{"class":76},[66,161439,752],{"class":102},[66,161441,755],{"class":76},[66,161443,759],{"class":758},[66,161445,161446,161448,161450,161452,161454,161456,161458],{"class":68,"line":80},[66,161447,747],{"class":102},[66,161449,348],{"class":76},[66,161451,304],{"class":102},[66,161453,307],{"class":76},[66,161455,752],{"class":102},[66,161457,774],{"class":76},[66,161459,777],{"class":758},[66,161461,161462,161464,161466,161468,161470,161472,161474,161476,161478],{"class":68,"line":112},[66,161463,747],{"class":102},[66,161465,348],{"class":76},[66,161467,304],{"class":102},[66,161469,307],{"class":76},[66,161471,790],{"class":102},[66,161473,307],{"class":76},[66,161475,795],{"class":102},[66,161477,798],{"class":76},[66,161479,801],{"class":758},[19,161481,804,161482,807],{},[23,161483,502],{},[57,161485,161486],{"className":59,"code":810,"language":61,"meta":62,"style":62},[23,161487,161488,161508],{"__ignoreMap":62},[66,161489,161490,161492,161494,161496,161498,161500,161502,161504,161506],{"class":68,"line":69},[66,161491,502],{"class":72},[66,161493,117],{"class":76},[66,161495,507],{"class":72},[66,161497,510],{"class":102},[66,161499,348],{"class":76},[66,161501,304],{"class":102},[66,161503,307],{"class":76},[66,161505,519],{"class":102},[66,161507,522],{"class":76},[66,161509,161510,161512],{"class":68,"line":80},[66,161511,132],{"class":102},[66,161513,135],{"class":76},[19,161515,841,161516,844],{},[23,161517,747],{},[14,161519,848],{"id":847},[57,161521,161522],{"className":59,"code":851,"language":61,"meta":62,"style":62},[23,161523,161524,161532,161536,161556,161564,161568],{"__ignoreMap":62},[66,161525,161526,161528,161530],{"class":68,"line":69},[66,161527,192],{"class":76},[66,161529,99],{"class":72},[66,161531,197],{"class":102},[66,161533,161534],{"class":68,"line":80},[66,161535,109],{"emptyLinePlaceholder":108},[66,161537,161538,161540,161542,161544,161546,161548,161550,161552,161554],{"class":68,"line":112},[66,161539,502],{"class":72},[66,161541,117],{"class":76},[66,161543,507],{"class":72},[66,161545,510],{"class":102},[66,161547,348],{"class":76},[66,161549,304],{"class":102},[66,161551,307],{"class":76},[66,161553,884],{"class":102},[66,161555,522],{"class":76},[66,161557,161558,161560,161562],{"class":68,"line":129},[66,161559,219],{"class":76},[66,161561,144],{"class":72},[66,161563,224],{"class":76},[66,161565,161566],{"class":68,"line":138},[66,161567,109],{"emptyLinePlaceholder":108},[66,161569,161570,161572],{"class":68,"line":227},[66,161571,244],{"class":102},[66,161573,247],{"class":76},[19,161575,907],{},[57,161577,161578],{"className":59,"code":910,"language":61,"meta":62,"style":62},[23,161579,161580,161588,161592,161612,161628,161636,161640],{"__ignoreMap":62},[66,161581,161582,161584,161586],{"class":68,"line":69},[66,161583,192],{"class":76},[66,161585,99],{"class":72},[66,161587,197],{"class":102},[66,161589,161590],{"class":68,"line":80},[66,161591,109],{"emptyLinePlaceholder":108},[66,161593,161594,161596,161598,161600,161602,161604,161606,161608,161610],{"class":68,"line":112},[66,161595,502],{"class":72},[66,161597,117],{"class":76},[66,161599,507],{"class":72},[66,161601,510],{"class":102},[66,161603,348],{"class":76},[66,161605,304],{"class":102},[66,161607,307],{"class":76},[66,161609,884],{"class":102},[66,161611,522],{"class":76},[66,161613,161614,161616,161618,161620,161622,161624,161626],{"class":68,"line":129},[66,161615,380],{"class":72},[66,161617,117],{"class":76},[66,161619,953],{"class":72},[66,161621,956],{"class":102},[66,161623,959],{"class":72},[66,161625,962],{"class":102},[66,161627,126],{"class":76},[66,161629,161630,161632,161634],{"class":68,"line":138},[66,161631,969],{"class":76},[66,161633,144],{"class":72},[66,161635,224],{"class":76},[66,161637,161638],{"class":68,"line":227},[66,161639,109],{"emptyLinePlaceholder":108},[66,161641,161642,161644],{"class":68,"line":236},[66,161643,244],{"class":102},[66,161645,247],{"class":76},[19,161647,986],{},[57,161649,161650],{"className":59,"code":989,"language":61,"meta":62,"style":62},[23,161651,161652,161660,161664,161688,161696,161700],{"__ignoreMap":62},[66,161653,161654,161656,161658],{"class":68,"line":69},[66,161655,192],{"class":76},[66,161657,99],{"class":72},[66,161659,197],{"class":102},[66,161661,161662],{"class":68,"line":80},[66,161663,109],{"emptyLinePlaceholder":108},[66,161665,161666,161668,161670,161672,161674,161676,161678,161680,161682,161684,161686],{"class":68,"line":112},[66,161667,502],{"class":72},[66,161669,117],{"class":76},[66,161671,507],{"class":72},[66,161673,510],{"class":102},[66,161675,348],{"class":76},[66,161677,795],{"class":102},[66,161679,307],{"class":76},[66,161681,884],{"class":102},[66,161683,307],{"class":76},[66,161685,795],{"class":102},[66,161687,522],{"class":76},[66,161689,161690,161692,161694],{"class":68,"line":129},[66,161691,219],{"class":76},[66,161693,144],{"class":72},[66,161695,224],{"class":76},[66,161697,161698],{"class":68,"line":138},[66,161699,109],{"emptyLinePlaceholder":108},[66,161701,161702,161704],{"class":68,"line":227},[66,161703,244],{"class":102},[66,161705,247],{"class":76},[14,161707,1049],{"id":1048},[19,161709,1052],{},[57,161711,161712],{"className":59,"code":1055,"language":61,"meta":62,"style":62},[23,161713,161714,161734,161754],{"__ignoreMap":62},[66,161715,161716,161718,161720,161722,161724,161726,161728,161730,161732],{"class":68,"line":69},[66,161717,502],{"class":72},[66,161719,117],{"class":76},[66,161721,507],{"class":72},[66,161723,510],{"class":102},[66,161725,348],{"class":76},[66,161727,304],{"class":102},[66,161729,307],{"class":76},[66,161731,1076],{"class":102},[66,161733,522],{"class":76},[66,161735,161736,161738,161740,161742,161744,161746,161748,161750,161752],{"class":68,"line":80},[66,161737,1083],{"class":72},[66,161739,1086],{"class":76},[66,161741,507],{"class":72},[66,161743,510],{"class":102},[66,161745,348],{"class":76},[66,161747,304],{"class":102},[66,161749,307],{"class":76},[66,161751,1076],{"class":102},[66,161753,522],{"class":76},[66,161755,161756,161758,161760,161762,161764,161766,161768,161770,161772,161774,161776,161778,161780],{"class":68,"line":112},[66,161757,395],{"class":102},[66,161759,348],{"class":76},[66,161761,445],{"class":72},[66,161763,1111],{"class":356},[66,161765,451],{"class":102},[66,161767,257],{"class":76},[66,161769,457],{"class":102},[66,161771,1120],{"class":356},[66,161773,451],{"class":102},[66,161775,1125],{"class":76},[66,161777,457],{"class":102},[66,161779,1130],{"class":356},[66,161781,313],{"class":76},[19,161783,1135],{},[14,161785,1139],{"id":1138},[57,161787,161788],{"className":59,"code":1142,"language":61,"meta":62,"style":62},[23,161789,161790,161810,161832,161884],{"__ignoreMap":62},[66,161791,161792,161794,161796,161798,161800,161802,161804,161806,161808],{"class":68,"line":69},[66,161793,502],{"class":72},[66,161795,117],{"class":76},[66,161797,507],{"class":72},[66,161799,510],{"class":102},[66,161801,348],{"class":76},[66,161803,304],{"class":102},[66,161805,307],{"class":76},[66,161807,790],{"class":102},[66,161809,522],{"class":76},[66,161811,161812,161814,161816,161818,161820,161822,161824,161826,161828,161830],{"class":68,"line":80},[66,161813,1083],{"class":72},[66,161815,1086],{"class":76},[66,161817,507],{"class":72},[66,161819,510],{"class":102},[66,161821,348],{"class":76},[66,161823,304],{"class":102},[66,161825,1181],{"class":76},[66,161827,1184],{"class":72},[66,161829,1187],{"class":102},[66,161831,522],{"class":76},[66,161833,161834,161836,161838,161840,161842,161844,161846,161848,161850,161852,161854,161856,161858,161860,161862,161864,161866,161868,161870,161872,161874,161876,161878,161880,161882],{"class":68,"line":112},[66,161835,395],{"class":102},[66,161837,348],{"class":76},[66,161839,445],{"class":72},[66,161841,1130],{"class":356},[66,161843,451],{"class":102},[66,161845,1125],{"class":76},[66,161847,457],{"class":102},[66,161849,1208],{"class":356},[66,161851,451],{"class":102},[66,161853,257],{"class":76},[66,161855,457],{"class":102},[66,161857,99],{"class":356},[66,161859,451],{"class":102},[66,161861,96],{"class":76},[66,161863,1208],{"class":72},[66,161865,1225],{"class":76},[66,161867,457],{"class":102},[66,161869,1130],{"class":356},[66,161871,307],{"class":76},[66,161873,1235],{"class":1234},[66,161875,99],{"class":72},[66,161877,1130],{"class":356},[66,161879,1242],{"class":102},[66,161881,1130],{"class":356},[66,161883,313],{"class":76},[66,161885,161886,161888],{"class":68,"line":129},[66,161887,132],{"class":102},[66,161889,1253],{"class":76},[19,161891,1256],{},[31,161893,161894,161898,161902,161906],{},[34,161895,1261,161896,1264],{},[23,161897,257],{},[34,161899,1267,161900,1270],{},[23,161901,1125],{},[34,161903,1273,161904,1276],{},[23,161905,25],{},[34,161907,161908,1282],{},[23,161909,1281],{},[14,161911,1286],{"id":1285},[19,161913,1289,161914,1293,161916,1296,161918,1299],{},[23,161915,1292],{},[23,161917,1292],{},[23,161919,477],{},[57,161921,161922],{"className":59,"code":1302,"language":61,"meta":62,"style":62},[23,161923,161924,161944,161956,161966,161970,161976],{"__ignoreMap":62},[66,161925,161926,161928,161930,161932,161934,161936,161938,161940,161942],{"class":68,"line":69},[66,161927,502],{"class":72},[66,161929,117],{"class":76},[66,161931,507],{"class":72},[66,161933,510],{"class":102},[66,161935,348],{"class":76},[66,161937,304],{"class":102},[66,161939,307],{"class":76},[66,161941,519],{"class":102},[66,161943,522],{"class":76},[66,161945,161946,161948,161950,161952,161954],{"class":68,"line":80},[66,161947,380],{"class":72},[66,161949,117],{"class":76},[66,161951,531],{"class":72},[66,161953,1335],{"class":102},[66,161955,126],{"class":76},[66,161957,161958,161960,161962,161964],{"class":68,"line":112},[66,161959,395],{"class":102},[66,161961,348],{"class":76},[66,161963,1346],{"class":356},[66,161965,313],{"class":76},[66,161967,161968],{"class":68,"line":129},[66,161969,468],{"class":72},[66,161971,161972,161974],{"class":68,"line":138},[66,161973,1292],{"class":72},[66,161975,126],{"class":76},[66,161977,161978,161980,161982,161984],{"class":68,"line":227},[66,161979,132],{"class":102},[66,161981,348],{"class":76},[66,161983,1367],{"class":356},[66,161985,313],{"class":76},[19,161987,1372],{},[57,161989,161990],{"className":59,"code":1375,"language":61,"meta":62,"style":62},[23,161991,161992,162012,162020,162024,162034,162044,162054,162058,162064],{"__ignoreMap":62},[66,161993,161994,161996,161998,162000,162002,162004,162006,162008,162010],{"class":68,"line":69},[66,161995,1382],{"class":76},[66,161997,99],{"class":72},[66,161999,688],{"class":76},[66,162001,691],{"class":356},[66,162003,307],{"class":76},[66,162005,696],{"class":356},[66,162007,307],{"class":76},[66,162009,701],{"class":356},[66,162011,704],{"class":76},[66,162013,162014,162016,162018],{"class":68,"line":80},[66,162015,1403],{"class":76},[66,162017,99],{"class":72},[66,162019,1408],{"class":356},[66,162021,162022],{"class":68,"line":112},[66,162023,109],{"emptyLinePlaceholder":108},[66,162025,162026,162028,162030,162032],{"class":68,"line":129},[66,162027,502],{"class":72},[66,162029,1419],{"class":76},[66,162031,507],{"class":72},[66,162033,1424],{"class":76},[66,162035,162036,162038,162040,162042],{"class":68,"line":138},[66,162037,380],{"class":72},[66,162039,1419],{"class":76},[66,162041,531],{"class":72},[66,162043,1435],{"class":76},[66,162045,162046,162048,162050,162052],{"class":68,"line":227},[66,162047,395],{"class":102},[66,162049,348],{"class":76},[66,162051,1346],{"class":356},[66,162053,313],{"class":76},[66,162055,162056],{"class":68,"line":236},[66,162057,468],{"class":72},[66,162059,162060,162062],{"class":68,"line":241},[66,162061,1292],{"class":72},[66,162063,126],{"class":76},[66,162065,162066,162068,162070,162072],{"class":68,"line":372},[66,162067,132],{"class":102},[66,162069,348],{"class":76},[66,162071,1367],{"class":356},[66,162073,313],{"class":76},[14,162075,1469],{"id":1468},[19,162077,1472],{},[31,162079,162080,162082,162084],{},[34,162081,1477],{},[34,162083,1480],{},[34,162085,1483],{},[19,162087,1486],{},[57,162089,162090],{"className":59,"code":1489,"language":61,"meta":62,"style":62},[23,162091,162092,162100,162104,162120,162134,162138,162148,162158,162162,162168,162190,162196],{"__ignoreMap":62},[66,162093,162094,162096,162098],{"class":68,"line":69},[66,162095,1496],{"class":76},[66,162097,99],{"class":72},[66,162099,1501],{"class":356},[66,162101,162102],{"class":68,"line":80},[66,162103,109],{"emptyLinePlaceholder":108},[66,162105,162106,162108,162110,162112,162114,162116,162118],{"class":68,"line":112},[66,162107,502],{"class":72},[66,162109,117],{"class":76},[66,162111,507],{"class":72},[66,162113,510],{"class":102},[66,162115,348],{"class":76},[66,162117,1520],{"class":102},[66,162119,522],{"class":76},[66,162121,162122,162124,162126,162128,162130,162132],{"class":68,"line":129},[66,162123,1527],{"class":76},[66,162125,99],{"class":72},[66,162127,1532],{"class":102},[66,162129,348],{"class":76},[66,162131,1537],{"class":356},[66,162133,313],{"class":76},[66,162135,162136],{"class":68,"line":138},[66,162137,109],{"emptyLinePlaceholder":108},[66,162139,162140,162142,162144,162146],{"class":68,"line":227},[66,162141,380],{"class":72},[66,162143,1550],{"class":76},[66,162145,531],{"class":72},[66,162147,1555],{"class":76},[66,162149,162150,162152,162154,162156],{"class":68,"line":236},[66,162151,395],{"class":102},[66,162153,348],{"class":76},[66,162155,1564],{"class":356},[66,162157,313],{"class":76},[66,162159,162160],{"class":68,"line":241},[66,162161,468],{"class":72},[66,162163,162164,162166],{"class":68,"line":372},[66,162165,433],{"class":72},[66,162167,126],{"class":76},[66,162169,162170,162172,162174,162176,162178,162180,162182,162184,162186,162188],{"class":68,"line":377},[66,162171,395],{"class":102},[66,162173,348],{"class":76},[66,162175,445],{"class":72},[66,162177,1587],{"class":356},[66,162179,1590],{"class":102},[66,162181,1593],{"class":72},[66,162183,1596],{"class":76},[66,162185,457],{"class":102},[66,162187,1601],{"class":356},[66,162189,313],{"class":76},[66,162191,162192,162194],{"class":68,"line":392},[66,162193,1292],{"class":72},[66,162195,126],{"class":76},[66,162197,162198,162200,162202,162204],{"class":68,"line":405},[66,162199,132],{"class":102},[66,162201,348],{"class":76},[66,162203,1618],{"class":356},[66,162205,313],{"class":76},[14,162207,1624],{"id":1623},[57,162209,162210],{"className":59,"code":1627,"language":61,"meta":62,"style":62},[23,162211,162212,162220,162230,162240,162250,162260,162270,162274,162288,162292,162304,162314,162326,162336,162348,162358,162370,162380,162384,162390],{"__ignoreMap":62},[66,162213,162214,162216,162218],{"class":68,"line":69},[66,162215,73],{"class":72},[66,162217,333],{"class":102},[66,162219,126],{"class":76},[66,162221,162222,162224,162226,162228],{"class":68,"line":80},[66,162223,132],{"class":102},[66,162225,348],{"class":76},[66,162227,1646],{"class":356},[66,162229,313],{"class":76},[66,162231,162232,162234,162236,162238],{"class":68,"line":112},[66,162233,132],{"class":102},[66,162235,348],{"class":76},[66,162237,1657],{"class":356},[66,162239,313],{"class":76},[66,162241,162242,162244,162246,162248],{"class":68,"line":129},[66,162243,132],{"class":102},[66,162245,348],{"class":76},[66,162247,1668],{"class":356},[66,162249,313],{"class":76},[66,162251,162252,162254,162256,162258],{"class":68,"line":138},[66,162253,132],{"class":102},[66,162255,348],{"class":76},[66,162257,1679],{"class":356},[66,162259,313],{"class":76},[66,162261,162262,162264,162266,162268],{"class":68,"line":227},[66,162263,132],{"class":102},[66,162265,348],{"class":76},[66,162267,1690],{"class":356},[66,162269,313],{"class":76},[66,162271,162272],{"class":68,"line":236},[66,162273,109],{"emptyLinePlaceholder":108},[66,162275,162276,162278,162280,162282,162284,162286],{"class":68,"line":241},[66,162277,1701],{"class":76},[66,162279,99],{"class":72},[66,162281,1532],{"class":102},[66,162283,348],{"class":76},[66,162285,1710],{"class":356},[66,162287,313],{"class":76},[66,162289,162290],{"class":68,"line":372},[66,162291,109],{"emptyLinePlaceholder":108},[66,162293,162294,162296,162298,162300,162302],{"class":68,"line":377},[66,162295,380],{"class":72},[66,162297,1723],{"class":76},[66,162299,531],{"class":72},[66,162301,1728],{"class":356},[66,162303,126],{"class":76},[66,162305,162306,162308,162310,162312],{"class":68,"line":392},[66,162307,395],{"class":102},[66,162309,348],{"class":76},[66,162311,1739],{"class":356},[66,162313,313],{"class":76},[66,162315,162316,162318,162320,162322,162324],{"class":68,"line":405},[66,162317,408],{"class":72},[66,162319,1723],{"class":76},[66,162321,531],{"class":72},[66,162323,1752],{"class":356},[66,162325,126],{"class":76},[66,162327,162328,162330,162332,162334],{"class":68,"line":418},[66,162329,395],{"class":102},[66,162331,348],{"class":76},[66,162333,1763],{"class":356},[66,162335,313],{"class":76},[66,162337,162338,162340,162342,162344,162346],{"class":68,"line":430},[66,162339,408],{"class":72},[66,162341,1723],{"class":76},[66,162343,531],{"class":72},[66,162345,1776],{"class":356},[66,162347,126],{"class":76},[66,162349,162350,162352,162354,162356],{"class":68,"line":438},[66,162351,395],{"class":102},[66,162353,348],{"class":76},[66,162355,1787],{"class":356},[66,162357,313],{"class":76},[66,162359,162360,162362,162364,162366,162368],{"class":68,"line":465},[66,162361,408],{"class":72},[66,162363,1723],{"class":76},[66,162365,531],{"class":72},[66,162367,1800],{"class":356},[66,162369,126],{"class":76},[66,162371,162372,162374,162376,162378],{"class":68,"line":1805},[66,162373,395],{"class":102},[66,162375,348],{"class":76},[66,162377,1812],{"class":356},[66,162379,313],{"class":76},[66,162381,162382],{"class":68,"line":1817},[66,162383,468],{"class":72},[66,162385,162386,162388],{"class":68,"line":1822},[66,162387,433],{"class":72},[66,162389,126],{"class":76},[66,162391,162392,162394,162396,162398],{"class":68,"line":1829},[66,162393,395],{"class":102},[66,162395,348],{"class":76},[66,162397,1836],{"class":356},[66,162399,313],{"class":76},[19,162401,1841,162402,1844,162404,158],{},[23,162403,473],{},[23,162405,477],{},[14,162407,1850],{"id":1849},[31,162409,162410,162414,162418,162424,162428],{},[34,162411,162412,1857],{},[23,162413,73],{},[34,162415,162416,1863],{},[23,162417,1862],{},[34,162419,162420,1868,162422,1871],{},[23,162421,477],{},[23,162423,566],{},[34,162425,1874,162426,1877],{},[23,162427,477],{},[34,162429,1880],{},[14,162431,1884],{"id":1883},[31,162433,162434,162436,162438,162440,162442],{},[34,162435,1889],{},[34,162437,1892],{},[34,162439,1895],{},[34,162441,1898],{},[34,162443,1901],{},[1903,162445,1905],{},{"title":62,"searchDepth":80,"depth":80,"links":162447},[162448,162449,162450,162451,162452,162456,162457,162458,162459,162460,162461,162462,162463,162464,162465],{"id":16,"depth":80,"text":17},{"id":51,"depth":80,"text":52},{"id":170,"depth":80,"text":171},{"id":273,"depth":80,"text":274},{"id":481,"depth":80,"text":482,"children":162453},[162454,162455],{"id":486,"depth":112,"text":487},{"id":560,"depth":112,"text":561},{"id":626,"depth":80,"text":627},{"id":730,"depth":80,"text":731},{"id":847,"depth":80,"text":848},{"id":1048,"depth":80,"text":1049},{"id":1138,"depth":80,"text":1139},{"id":1285,"depth":80,"text":1286},{"id":1468,"depth":80,"text":1469},{"id":1623,"depth":80,"text":1624},{"id":1849,"depth":80,"text":1850},{"id":1883,"depth":80,"text":1884},{},{"title":5,"description":1926},{"id":162469,"title":162470,"body":162471,"description":1926,"extension":1927,"meta":164476,"navigation":108,"path":164477,"seo":164478,"stem":164479,"__hash__":164480},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":162472,"toc":164456},[162473,162476,162480,162483,162486,162500,162503,162517,162521,162523,162542,162544,162591,162593,162607,162611,162685,162688,162692,162695,162754,162762,162765,162818,162821,162825,162830,162885,162893,162943,162947,162952,162960,163059,163065,163069,163074,163077,163088,163129,163142,163146,163149,163185,163188,163201,163204,163264,163268,163272,163275,163326,163330,163333,163380,163386,163452,163455,163459,163462,163578,163581,163585,163588,163694,163698,163701,163739,163742,163784,163787,163847,163850,163854,164318,164321,164325,164352,164358,164419,164423,164453],[10,162474,162470],{"id":162475},"_5-函数基础",[14,162477,162479],{"id":162478},"_51-为什么需要函数","5.1 为什么需要函数",[19,162481,162482],{},"函数用于封装一段可以重复使用的代码。",[19,162484,162485],{},"不使用函数的问题：",[31,162487,162488,162491,162494,162497],{},[34,162489,162490],{},"重复代码多。",[34,162492,162493],{},"修改逻辑时容易漏改。",[34,162495,162496],{},"主流程不清晰。",[34,162498,162499],{},"程序越写越长，难以维护。",[19,162501,162502],{},"使用函数后的好处：",[31,162504,162505,162508,162511,162514],{},[34,162506,162507],{},"提高复用性。",[34,162509,162510],{},"提高可读性。",[34,162512,162513],{},"便于调试。",[34,162515,162516],{},"便于分工。",[14,162518,162520],{"id":162519},"_52-函数定义","5.2 函数定义",[19,162522,55],{},[57,162524,162526],{"className":59,"code":162525,"language":61,"meta":62,"style":62},"def 函数名():\n    函数体\n",[23,162527,162528,162537],{"__ignoreMap":62},[66,162529,162530,162532,162535],{"class":68,"line":69},[66,162531,33739],{"class":72},[66,162533,162534],{"class":3793}," 函数名",[66,162536,33745],{"class":76},[66,162538,162539],{"class":68,"line":80},[66,162540,162541],{"class":76},"    函数体\n",[19,162543,86],{},[57,162545,162547],{"className":59,"code":162546,"language":61,"meta":62,"style":62},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[23,162548,162549,162558,162568,162578,162582,162586],{"__ignoreMap":62},[66,162550,162551,162553,162556],{"class":68,"line":69},[66,162552,33739],{"class":72},[66,162554,162555],{"class":3793}," say_hello",[66,162557,33745],{"class":76},[66,162559,162560,162562,162564,162566],{"class":68,"line":80},[66,162561,132],{"class":102},[66,162563,348],{"class":76},[66,162565,7655],{"class":356},[66,162567,313],{"class":76},[66,162569,162570,162572,162574,162576],{"class":68,"line":112},[66,162571,132],{"class":102},[66,162573,348],{"class":76},[66,162575,148406],{"class":356},[66,162577,313],{"class":76},[66,162579,162580],{"class":68,"line":129},[66,162581,109],{"emptyLinePlaceholder":108},[66,162583,162584],{"class":68,"line":138},[66,162585,109],{"emptyLinePlaceholder":108},[66,162587,162588],{"class":68,"line":227},[66,162589,162590],{"class":76},"say_hello()\n",[19,162592,841],{},[31,162594,162595,162598,162601,162604],{},[34,162596,162597],{},"函数必须先定义，再调用。",[34,162599,162600],{},"函数名遵循变量命名规则。",[34,162602,162603],{},"函数体需要缩进。",[34,162605,162606],{},"函数不调用就不会执行。",[14,162608,162610],{"id":162609},"_53-函数调用","5.3 函数调用",[57,162612,162614],{"className":59,"code":162613,"language":61,"meta":62,"style":62},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[23,162615,162616,162625,162636,162647,162658,162668,162672,162676,162681],{"__ignoreMap":62},[66,162617,162618,162620,162623],{"class":68,"line":69},[66,162619,33739],{"class":72},[66,162621,162622],{"class":3793}," print_menu",[66,162624,33745],{"class":76},[66,162626,162627,162629,162631,162634],{"class":68,"line":80},[66,162628,132],{"class":102},[66,162630,348],{"class":76},[66,162632,162633],{"class":356},"\"1. 查询\"",[66,162635,313],{"class":76},[66,162637,162638,162640,162642,162645],{"class":68,"line":112},[66,162639,132],{"class":102},[66,162641,348],{"class":76},[66,162643,162644],{"class":356},"\"2. 添加\"",[66,162646,313],{"class":76},[66,162648,162649,162651,162653,162656],{"class":68,"line":129},[66,162650,132],{"class":102},[66,162652,348],{"class":76},[66,162654,162655],{"class":356},"\"3. 删除\"",[66,162657,313],{"class":76},[66,162659,162660,162662,162664,162666],{"class":68,"line":138},[66,162661,132],{"class":102},[66,162663,348],{"class":76},[66,162665,1690],{"class":356},[66,162667,313],{"class":76},[66,162669,162670],{"class":68,"line":227},[66,162671,109],{"emptyLinePlaceholder":108},[66,162673,162674],{"class":68,"line":236},[66,162675,109],{"emptyLinePlaceholder":108},[66,162677,162678],{"class":68,"line":241},[66,162679,162680],{"class":76},"print_menu()\n",[66,162682,162683],{"class":68,"line":372},[66,162684,162680],{"class":76},[19,162686,162687],{},"函数可以多次调用，每次调用都会执行函数体。",[14,162689,162691],{"id":162690},"_54-参数","5.4 参数",[19,162693,162694],{},"参数用于向函数传递数据。",[57,162696,162698],{"className":59,"code":162697,"language":61,"meta":62,"style":62},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[23,162699,162700,162709,162729,162733,162737,162746],{"__ignoreMap":62},[66,162701,162702,162704,162706],{"class":68,"line":69},[66,162703,33739],{"class":72},[66,162705,162555],{"class":3793},[66,162707,162708],{"class":76},"(name):\n",[66,162710,162711,162713,162715,162717,162719,162721,162723,162725,162727],{"class":68,"line":80},[66,162712,132],{"class":102},[66,162714,348],{"class":76},[66,162716,445],{"class":72},[66,162718,158804],{"class":356},[66,162720,451],{"class":102},[66,162722,81588],{"class":76},[66,162724,457],{"class":102},[66,162726,1130],{"class":356},[66,162728,313],{"class":76},[66,162730,162731],{"class":68,"line":112},[66,162732,109],{"emptyLinePlaceholder":108},[66,162734,162735],{"class":68,"line":129},[66,162736,109],{"emptyLinePlaceholder":108},[66,162738,162739,162742,162744],{"class":68,"line":138},[66,162740,162741],{"class":76},"say_hello(",[66,162743,691],{"class":356},[66,162745,313],{"class":76},[66,162747,162748,162750,162752],{"class":68,"line":227},[66,162749,162741],{"class":76},[66,162751,696],{"class":356},[66,162753,313],{"class":76},[19,162755,162756,162758,162759,162761],{},[23,162757,81588],{}," 是形参，",[23,162760,691],{}," 是实参。",[19,162763,162764],{},"多个参数：",[57,162766,162768],{"className":59,"code":162767,"language":61,"meta":62,"style":62},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[23,162769,162770,162778,162791,162797,162801,162805],{"__ignoreMap":62},[66,162771,162772,162774,162776],{"class":68,"line":69},[66,162773,33739],{"class":72},[66,162775,7022],{"class":3793},[66,162777,152855],{"class":76},[66,162779,162780,162783,162785,162787,162789],{"class":68,"line":80},[66,162781,162782],{"class":76},"    result ",[66,162784,99],{"class":72},[66,162786,12675],{"class":76},[66,162788,1184],{"class":72},[66,162790,152866],{"class":76},[66,162792,162793,162795],{"class":68,"line":112},[66,162794,132],{"class":102},[66,162796,78364],{"class":76},[66,162798,162799],{"class":68,"line":129},[66,162800,109],{"emptyLinePlaceholder":108},[66,162802,162803],{"class":68,"line":138},[66,162804,109],{"emptyLinePlaceholder":108},[66,162806,162807,162810,162812,162814,162816],{"class":68,"line":227},[66,162808,162809],{"class":76},"add(",[66,162811,790],{"class":102},[66,162813,307],{"class":76},[66,162815,2679],{"class":102},[66,162817,313],{"class":76},[19,162819,162820],{},"调用时参数数量必须匹配。",[14,162822,162824],{"id":162823},"_55-返回值","5.5 返回值",[19,162826,162827,162829],{},[23,162828,18849],{}," 用于把函数内部的结果返回给调用者。",[57,162831,162833],{"className":59,"code":162832,"language":61,"meta":62,"style":62},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[23,162834,162835,162843,162853,162857,162861,162879],{"__ignoreMap":62},[66,162836,162837,162839,162841],{"class":68,"line":69},[66,162838,33739],{"class":72},[66,162840,7022],{"class":3793},[66,162842,152855],{"class":76},[66,162844,162845,162847,162849,162851],{"class":68,"line":80},[66,162846,5907],{"class":72},[66,162848,12675],{"class":76},[66,162850,1184],{"class":72},[66,162852,152866],{"class":76},[66,162854,162855],{"class":68,"line":112},[66,162856,109],{"emptyLinePlaceholder":108},[66,162858,162859],{"class":68,"line":129},[66,162860,109],{"emptyLinePlaceholder":108},[66,162862,162863,162866,162868,162871,162873,162875,162877],{"class":68,"line":138},[66,162864,162865],{"class":76},"result ",[66,162867,99],{"class":72},[66,162869,162870],{"class":76}," add(",[66,162872,790],{"class":102},[66,162874,307],{"class":76},[66,162876,2679],{"class":102},[66,162878,313],{"class":76},[66,162880,162881,162883],{"class":68,"line":227},[66,162882,244],{"class":102},[66,162884,78364],{"class":76},[19,162886,162887,162888,162890,162891,158],{},"如果函数没有写 ",[23,162889,18849],{},"，默认返回 ",[23,162892,97461],{},[57,162894,162896],{"className":59,"code":162895,"language":61,"meta":62,"style":62},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[23,162897,162898,162906,162916,162920,162924,162933],{"__ignoreMap":62},[66,162899,162900,162902,162904],{"class":68,"line":69},[66,162901,33739],{"class":72},[66,162903,162555],{"class":3793},[66,162905,33745],{"class":76},[66,162907,162908,162910,162912,162914],{"class":68,"line":80},[66,162909,132],{"class":102},[66,162911,348],{"class":76},[66,162913,7655],{"class":356},[66,162915,313],{"class":76},[66,162917,162918],{"class":68,"line":112},[66,162919,109],{"emptyLinePlaceholder":108},[66,162921,162922],{"class":68,"line":129},[66,162923,109],{"emptyLinePlaceholder":108},[66,162925,162926,162928,162930],{"class":68,"line":138},[66,162927,162865],{"class":76},[66,162929,99],{"class":72},[66,162931,162932],{"class":76}," say_hello()\n",[66,162934,162935,162937,162940],{"class":68,"line":227},[66,162936,244],{"class":102},[66,162938,162939],{"class":76},"(result)  ",[66,162941,162942],{"class":758},"# None\n",[14,162944,162946],{"id":162945},"_56-return的作用","5.6 return的作用",[19,162948,162949,162951],{},[23,162950,18849],{}," 有两个作用：",[31,162953,162954,162957],{},[34,162955,162956],{},"返回结果。",[34,162958,162959],{},"结束函数。",[57,162961,162963],{"className":59,"code":162962,"language":61,"meta":62,"style":62},"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",[23,162964,162965,162975,162987,162994,162998,163010,163017,163021,163028,163032,163036,163047],{"__ignoreMap":62},[66,162966,162967,162969,162972],{"class":68,"line":69},[66,162968,33739],{"class":72},[66,162970,162971],{"class":3793}," check_age",[66,162973,162974],{"class":76},"(age):\n",[66,162976,162977,162979,162981,162983,162985],{"class":68,"line":80},[66,162978,380],{"class":72},[66,162980,17510],{"class":76},[66,162982,413],{"class":72},[66,162984,962],{"class":102},[66,162986,126],{"class":76},[66,162988,162989,162991],{"class":68,"line":112},[66,162990,16557],{"class":72},[66,162992,162993],{"class":356}," \"年龄不合法\"\n",[66,162995,162996],{"class":68,"line":129},[66,162997,109],{"emptyLinePlaceholder":108},[66,162999,163000,163002,163004,163006,163008],{"class":68,"line":138},[66,163001,380],{"class":72},[66,163003,17510],{"class":76},[66,163005,3540],{"class":72},[66,163007,158035],{"class":102},[66,163009,126],{"class":76},[66,163011,163012,163014],{"class":68,"line":227},[66,163013,16557],{"class":72},[66,163015,163016],{"class":356}," \"成年人\"\n",[66,163018,163019],{"class":68,"line":236},[66,163020,109],{"emptyLinePlaceholder":108},[66,163022,163023,163025],{"class":68,"line":241},[66,163024,5907],{"class":72},[66,163026,163027],{"class":356}," \"未成年人\"\n",[66,163029,163030],{"class":68,"line":372},[66,163031,109],{"emptyLinePlaceholder":108},[66,163033,163034],{"class":68,"line":377},[66,163035,109],{"emptyLinePlaceholder":108},[66,163037,163038,163040,163043,163045],{"class":68,"line":392},[66,163039,244],{"class":102},[66,163041,163042],{"class":76},"(check_age(",[66,163044,2679],{"class":102},[66,163046,360],{"class":76},[66,163048,163049,163051,163053,163055,163057],{"class":68,"line":405},[66,163050,244],{"class":102},[66,163052,163042],{"class":76},[66,163054,2511],{"class":72},[66,163056,304],{"class":102},[66,163058,360],{"class":76},[19,163060,163061,163062,163064],{},"函数执行到 ",[23,163063,18849],{}," 后，后面的代码不会继续执行。",[14,163066,163068],{"id":163067},"_57-none","5.7 None",[19,163070,163071,163073],{},[23,163072,97461],{}," 表示空值或没有结果。",[19,163075,163076],{},"常见使用场景：",[31,163078,163079,163082,163085],{},[34,163080,163081],{},"函数没有返回值。",[34,163083,163084],{},"变量暂时没有具体值。",[34,163086,163087],{},"表示查询不到结果。",[57,163089,163091],{"className":59,"code":163090,"language":61,"meta":62,"style":62},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[23,163092,163093,163101,163105,163118],{"__ignoreMap":62},[66,163094,163095,163097,163099],{"class":68,"line":69},[66,163096,162865],{"class":76},[66,163098,99],{"class":72},[66,163100,153932],{"class":102},[66,163102,163103],{"class":68,"line":80},[66,163104,109],{"emptyLinePlaceholder":108},[66,163106,163107,163109,163112,163114,163116],{"class":68,"line":112},[66,163108,3373],{"class":72},[66,163110,163111],{"class":76}," result ",[66,163113,40715],{"class":72},[66,163115,40721],{"class":102},[66,163117,126],{"class":76},[66,163119,163120,163122,163124,163127],{"class":68,"line":129},[66,163121,132],{"class":102},[66,163123,348],{"class":76},[66,163125,163126],{"class":356},"\"没有数据\"",[66,163128,313],{"class":76},[19,163130,163131,163132,163134,163135,163138,163139,158],{},"判断 ",[23,163133,97461],{}," 推荐使用 ",[23,163136,163137],{},"is None","，不要写成 ",[23,163140,163141],{},"== None",[14,163143,163145],{"id":163144},"_58-函数文档字符串","5.8 函数文档字符串",[19,163147,163148],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[57,163150,163152],{"className":59,"code":163151,"language":61,"meta":62,"style":62},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[23,163153,163154,163164,163169],{"__ignoreMap":62},[66,163155,163156,163158,163161],{"class":68,"line":69},[66,163157,33739],{"class":72},[66,163159,163160],{"class":3793}," calculate_bmi",[66,163162,163163],{"class":76},"(weight, height):\n",[66,163165,163166],{"class":68,"line":80},[66,163167,163168],{"class":356},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[66,163170,163171,163173,163176,163178,163181,163183],{"class":68,"line":112},[66,163172,5907],{"class":72},[66,163174,163175],{"class":76}," weight ",[66,163177,2563],{"class":72},[66,163179,163180],{"class":76}," height ",[66,163182,12467],{"class":72},[66,163184,49507],{"class":102},[19,163186,163187],{},"查看说明：",[57,163189,163191],{"className":59,"code":163190,"language":61,"meta":62,"style":62},"help(calculate_bmi)\n",[23,163192,163193],{"__ignoreMap":62},[66,163194,163195,163198],{"class":68,"line":69},[66,163196,163197],{"class":102},"help",[66,163199,163200],{"class":76},"(calculate_bmi)\n",[19,163202,163203],{},"较完整的写法：",[57,163205,163207],{"className":59,"code":163206,"language":61,"meta":62,"style":62},"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",[23,163208,163209,163217,163222,163227,163231,163236,163241,163246,163250],{"__ignoreMap":62},[66,163210,163211,163213,163215],{"class":68,"line":69},[66,163212,33739],{"class":72},[66,163214,163160],{"class":3793},[66,163216,163163],{"class":76},[66,163218,163219],{"class":68,"line":80},[66,163220,163221],{"class":356},"    \"\"\"\n",[66,163223,163224],{"class":68,"line":112},[66,163225,163226],{"class":356},"    计算BMI。\n",[66,163228,163229],{"class":68,"line":129},[66,163230,109],{"emptyLinePlaceholder":108},[66,163232,163233],{"class":68,"line":138},[66,163234,163235],{"class":356},"    :param weight: 体重，单位kg\n",[66,163237,163238],{"class":68,"line":227},[66,163239,163240],{"class":356},"    :param height: 身高，单位m\n",[66,163242,163243],{"class":68,"line":236},[66,163244,163245],{"class":356},"    :return: BMI数值\n",[66,163247,163248],{"class":68,"line":241},[66,163249,163221],{"class":356},[66,163251,163252,163254,163256,163258,163260,163262],{"class":68,"line":372},[66,163253,5907],{"class":72},[66,163255,163175],{"class":76},[66,163257,2563],{"class":72},[66,163259,163180],{"class":76},[66,163261,12467],{"class":72},[66,163263,49507],{"class":102},[14,163265,163267],{"id":163266},"_59-变量作用域","5.9 变量作用域",[484,163269,163271],{"id":163270},"_591-局部变量","5.9.1 局部变量",[19,163273,163274],{},"在函数内部定义的变量，只能在函数内部使用。",[57,163276,163278],{"className":59,"code":163277,"language":61,"meta":62,"style":62},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[23,163279,163280,163289,163297,163303,163307,163311,163316],{"__ignoreMap":62},[66,163281,163282,163284,163287],{"class":68,"line":69},[66,163283,33739],{"class":72},[66,163285,163286],{"class":3793}," test",[66,163288,33745],{"class":76},[66,163290,163291,163293,163295],{"class":68,"line":80},[66,163292,47379],{"class":76},[66,163294,99],{"class":72},[66,163296,60208],{"class":102},[66,163298,163299,163301],{"class":68,"line":112},[66,163300,132],{"class":102},[66,163302,2012],{"class":76},[66,163304,163305],{"class":68,"line":129},[66,163306,109],{"emptyLinePlaceholder":108},[66,163308,163309],{"class":68,"line":138},[66,163310,109],{"emptyLinePlaceholder":108},[66,163312,163313],{"class":68,"line":227},[66,163314,163315],{"class":76},"test()\n",[66,163317,163318,163320,163323],{"class":68,"line":236},[66,163319,244],{"class":102},[66,163321,163322],{"class":76},"(num)  ",[66,163324,163325],{"class":758},"# 报错\n",[484,163327,163329],{"id":163328},"_592-全局变量","5.9.2 全局变量",[19,163331,163332],{},"在函数外部定义的变量，可以在函数内部读取。",[57,163334,163336],{"className":59,"code":163335,"language":61,"meta":62,"style":62},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[23,163337,163338,163346,163350,163354,163362,163368,163372,163376],{"__ignoreMap":62},[66,163339,163340,163342,163344],{"class":68,"line":69},[66,163341,642],{"class":76},[66,163343,99],{"class":72},[66,163345,151118],{"class":356},[66,163347,163348],{"class":68,"line":80},[66,163349,109],{"emptyLinePlaceholder":108},[66,163351,163352],{"class":68,"line":112},[66,163353,109],{"emptyLinePlaceholder":108},[66,163355,163356,163358,163360],{"class":68,"line":129},[66,163357,33739],{"class":72},[66,163359,162555],{"class":3793},[66,163361,33745],{"class":76},[66,163363,163364,163366],{"class":68,"line":138},[66,163365,132],{"class":102},[66,163367,152423],{"class":76},[66,163369,163370],{"class":68,"line":227},[66,163371,109],{"emptyLinePlaceholder":108},[66,163373,163374],{"class":68,"line":236},[66,163375,109],{"emptyLinePlaceholder":108},[66,163377,163378],{"class":68,"line":241},[66,163379,162590],{"class":76},[19,163381,163382,163383,158],{},"如果要在函数内部修改全局变量，需要 ",[23,163384,163385],{},"global",[57,163387,163389],{"className":59,"code":163388,"language":61,"meta":62,"style":62},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[23,163390,163391,163399,163403,163407,163416,163424,163432,163436,163440,163445],{"__ignoreMap":62},[66,163392,163393,163395,163397],{"class":68,"line":69},[66,163394,318],{"class":76},[66,163396,99],{"class":72},[66,163398,197],{"class":102},[66,163400,163401],{"class":68,"line":80},[66,163402,109],{"emptyLinePlaceholder":108},[66,163404,163405],{"class":68,"line":112},[66,163406,109],{"emptyLinePlaceholder":108},[66,163408,163409,163411,163414],{"class":68,"line":129},[66,163410,33739],{"class":72},[66,163412,163413],{"class":3793}," add_count",[66,163415,33745],{"class":76},[66,163417,163418,163421],{"class":68,"line":138},[66,163419,163420],{"class":72},"    global",[66,163422,163423],{"class":76}," count\n",[66,163425,163426,163428,163430],{"class":68,"line":227},[66,163427,365],{"class":76},[66,163429,144],{"class":72},[66,163431,103],{"class":102},[66,163433,163434],{"class":68,"line":236},[66,163435,109],{"emptyLinePlaceholder":108},[66,163437,163438],{"class":68,"line":241},[66,163439,109],{"emptyLinePlaceholder":108},[66,163441,163442],{"class":68,"line":372},[66,163443,163444],{"class":76},"add_count()\n",[66,163446,163447,163449],{"class":68,"line":377},[66,163448,244],{"class":102},[66,163450,163451],{"class":76},"(count)\n",[19,163453,163454],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,163456,163458],{"id":163457},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,163460,163461],{},"一个函数中可以调用另一个函数。",[57,163463,163465],{"className":59,"code":163464,"language":61,"meta":62,"style":62},"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",[23,163466,163467,163476,163490,163494,163498,163507,163512,163532,163553,163557,163561,163565],{"__ignoreMap":62},[66,163468,163469,163471,163474],{"class":68,"line":69},[66,163470,33739],{"class":72},[66,163472,163473],{"class":3793}," print_line",[66,163475,33745],{"class":76},[66,163477,163478,163480,163482,163484,163486,163488],{"class":68,"line":80},[66,163479,132],{"class":102},[66,163481,348],{"class":76},[66,163483,34273],{"class":356},[66,163485,8329],{"class":72},[66,163487,80443],{"class":102},[66,163489,313],{"class":76},[66,163491,163492],{"class":68,"line":112},[66,163493,109],{"emptyLinePlaceholder":108},[66,163495,163496],{"class":68,"line":129},[66,163497,109],{"emptyLinePlaceholder":108},[66,163499,163500,163502,163505],{"class":68,"line":138},[66,163501,33739],{"class":72},[66,163503,163504],{"class":3793}," print_info",[66,163506,151140],{"class":76},[66,163508,163509],{"class":68,"line":227},[66,163510,163511],{"class":76},"    print_line()\n",[66,163513,163514,163516,163518,163520,163522,163524,163526,163528,163530],{"class":68,"line":236},[66,163515,132],{"class":102},[66,163517,348],{"class":76},[66,163519,445],{"class":72},[66,163521,158432],{"class":356},[66,163523,451],{"class":102},[66,163525,81588],{"class":76},[66,163527,457],{"class":102},[66,163529,1130],{"class":356},[66,163531,313],{"class":76},[66,163533,163534,163536,163538,163540,163543,163545,163547,163549,163551],{"class":68,"line":241},[66,163535,132],{"class":102},[66,163537,348],{"class":76},[66,163539,445],{"class":72},[66,163541,163542],{"class":356},"\"年龄:",[66,163544,451],{"class":102},[66,163546,72000],{"class":76},[66,163548,457],{"class":102},[66,163550,1130],{"class":356},[66,163552,313],{"class":76},[66,163554,163555],{"class":68,"line":372},[66,163556,163511],{"class":76},[66,163558,163559],{"class":68,"line":377},[66,163560,109],{"emptyLinePlaceholder":108},[66,163562,163563],{"class":68,"line":392},[66,163564,109],{"emptyLinePlaceholder":108},[66,163566,163567,163570,163572,163574,163576],{"class":68,"line":405},[66,163568,163569],{"class":76},"print_info(",[66,163571,691],{"class":356},[66,163573,307],{"class":76},[66,163575,2629],{"class":102},[66,163577,313],{"class":76},[19,163579,163580],{},"这种方式可以把小功能组合成大功能。",[14,163582,163584],{"id":163583},"_511-参数检查","5.11 参数检查",[19,163586,163587],{},"函数内部可以检查参数是否合法。",[57,163589,163591],{"className":59,"code":163590,"language":61,"meta":62,"style":62},"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",[23,163592,163593,163602,163614,163620,163630,163634,163638,163655,163659,163671,163682,163688],{"__ignoreMap":62},[66,163594,163595,163597,163600],{"class":68,"line":69},[66,163596,33739],{"class":72},[66,163598,163599],{"class":3793}," divide",[66,163601,152855],{"class":76},[66,163603,163604,163606,163608,163610,163612],{"class":68,"line":80},[66,163605,380],{"class":72},[66,163607,12688],{"class":76},[66,163609,531],{"class":72},[66,163611,962],{"class":102},[66,163613,126],{"class":76},[66,163615,163616,163618],{"class":68,"line":112},[66,163617,16557],{"class":72},[66,163619,153932],{"class":102},[66,163621,163622,163624,163626,163628],{"class":68,"line":129},[66,163623,5907],{"class":72},[66,163625,12675],{"class":76},[66,163627,2563],{"class":72},[66,163629,152866],{"class":76},[66,163631,163632],{"class":68,"line":138},[66,163633,109],{"emptyLinePlaceholder":108},[66,163635,163636],{"class":68,"line":227},[66,163637,109],{"emptyLinePlaceholder":108},[66,163639,163640,163642,163644,163647,163649,163651,163653],{"class":68,"line":236},[66,163641,162865],{"class":76},[66,163643,99],{"class":72},[66,163645,163646],{"class":76}," divide(",[66,163648,790],{"class":102},[66,163650,307],{"class":76},[66,163652,2183],{"class":102},[66,163654,313],{"class":76},[66,163656,163657],{"class":68,"line":241},[66,163658,109],{"emptyLinePlaceholder":108},[66,163660,163661,163663,163665,163667,163669],{"class":68,"line":372},[66,163662,3373],{"class":72},[66,163664,163111],{"class":76},[66,163666,40715],{"class":72},[66,163668,40721],{"class":102},[66,163670,126],{"class":76},[66,163672,163673,163675,163677,163680],{"class":68,"line":377},[66,163674,132],{"class":102},[66,163676,348],{"class":76},[66,163678,163679],{"class":356},"\"除数不能为0\"",[66,163681,313],{"class":76},[66,163683,163684,163686],{"class":68,"line":392},[66,163685,1292],{"class":72},[66,163687,126],{"class":76},[66,163689,163690,163692],{"class":68,"line":405},[66,163691,132],{"class":102},[66,163693,78364],{"class":76},[14,163695,163697],{"id":163696},"_512-类型提示","5.12 类型提示",[19,163699,163700],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[57,163702,163704],{"className":59,"code":163703,"language":61,"meta":62,"style":62},"def add(a: int, b: int) -> int:\n    return a + b\n",[23,163705,163706,163729],{"__ignoreMap":62},[66,163707,163708,163710,163712,163715,163717,163720,163722,163725,163727],{"class":68,"line":69},[66,163709,33739],{"class":72},[66,163711,7022],{"class":3793},[66,163713,163714],{"class":76},"(a: ",[66,163716,2003],{"class":102},[66,163718,163719],{"class":76},", b: ",[66,163721,2003],{"class":102},[66,163723,163724],{"class":76},") -> ",[66,163726,2003],{"class":102},[66,163728,126],{"class":76},[66,163730,163731,163733,163735,163737],{"class":68,"line":80},[66,163732,5907],{"class":72},[66,163734,12675],{"class":76},[66,163736,1184],{"class":72},[66,163738,152866],{"class":76},[19,163740,163741],{},"字符串参数：",[57,163743,163745],{"className":59,"code":163744,"language":61,"meta":62,"style":62},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[23,163746,163747,163764],{"__ignoreMap":62},[66,163748,163749,163751,163753,163756,163758,163760,163762],{"class":68,"line":69},[66,163750,33739],{"class":72},[66,163752,162555],{"class":3793},[66,163754,163755],{"class":76},"(name: ",[66,163757,3144],{"class":102},[66,163759,163724],{"class":76},[66,163761,97461],{"class":102},[66,163763,126],{"class":76},[66,163765,163766,163768,163770,163772,163774,163776,163778,163780,163782],{"class":68,"line":80},[66,163767,132],{"class":102},[66,163769,348],{"class":76},[66,163771,445],{"class":72},[66,163773,158804],{"class":356},[66,163775,451],{"class":102},[66,163777,81588],{"class":76},[66,163779,457],{"class":102},[66,163781,1130],{"class":356},[66,163783,313],{"class":76},[19,163785,163786],{},"列表参数：",[57,163788,163790],{"className":59,"code":163789,"language":61,"meta":62,"style":62},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[23,163791,163792,163811,163819,163831,163840],{"__ignoreMap":62},[66,163793,163794,163796,163799,163802,163804,163807,163809],{"class":68,"line":69},[66,163795,33739],{"class":72},[66,163797,163798],{"class":3793}," get_total",[66,163800,163801],{"class":76},"(numbers: list[",[66,163803,2003],{"class":102},[66,163805,163806],{"class":76},"]) -> ",[66,163808,2003],{"class":102},[66,163810,126],{"class":76},[66,163812,163813,163815,163817],{"class":68,"line":80},[66,163814,219],{"class":76},[66,163816,99],{"class":72},[66,163818,197],{"class":102},[66,163820,163821,163823,163826,163828],{"class":68,"line":112},[66,163822,1083],{"class":72},[66,163824,163825],{"class":76}," number ",[66,163827,507],{"class":72},[66,163829,163830],{"class":76}," numbers:\n",[66,163832,163833,163835,163837],{"class":68,"line":129},[66,163834,969],{"class":76},[66,163836,144],{"class":72},[66,163838,163839],{"class":76}," number\n",[66,163841,163842,163844],{"class":68,"line":138},[66,163843,5907],{"class":72},[66,163845,163846],{"class":76}," total\n",[19,163848,163849],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,163851,163853],{"id":163852},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[57,163855,163857],{"className":59,"code":163856,"language":61,"meta":62,"style":62},"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",[23,163858,163859,163869,163873,163877,163885,163896,163906,163916,163926,163936,163940,163944,163953,163975,163979,163983,163992,163998,164018,164030,164041,164045,164054,164065,164070,164074,164078,164087,164093,164112,164124,164134,164138,164149,164159,164163,164171,164182,164186,164190,164194,164202,164207,164221,164225,164237,164242,164254,164259,164271,164276,164288,164298,164302,164308],{"__ignoreMap":62},[66,163860,163861,163864,163866],{"class":68,"line":69},[66,163862,163863],{"class":76},"balance ",[66,163865,99],{"class":72},[66,163867,163868],{"class":102}," 1000\n",[66,163870,163871],{"class":68,"line":80},[66,163872,109],{"emptyLinePlaceholder":108},[66,163874,163875],{"class":68,"line":112},[66,163876,109],{"emptyLinePlaceholder":108},[66,163878,163879,163881,163883],{"class":68,"line":129},[66,163880,33739],{"class":72},[66,163882,153795],{"class":3793},[66,163884,33745],{"class":76},[66,163886,163887,163889,163891,163894],{"class":68,"line":138},[66,163888,132],{"class":102},[66,163890,348],{"class":76},[66,163892,163893],{"class":356},"\"====== ATM ======\"",[66,163895,313],{"class":76},[66,163897,163898,163900,163902,163904],{"class":68,"line":227},[66,163899,132],{"class":102},[66,163901,348],{"class":76},[66,163903,1657],{"class":356},[66,163905,313],{"class":76},[66,163907,163908,163910,163912,163914],{"class":68,"line":236},[66,163909,132],{"class":102},[66,163911,348],{"class":76},[66,163913,1668],{"class":356},[66,163915,313],{"class":76},[66,163917,163918,163920,163922,163924],{"class":68,"line":241},[66,163919,132],{"class":102},[66,163921,348],{"class":76},[66,163923,1679],{"class":356},[66,163925,313],{"class":76},[66,163927,163928,163930,163932,163934],{"class":68,"line":372},[66,163929,132],{"class":102},[66,163931,348],{"class":76},[66,163933,1690],{"class":356},[66,163935,313],{"class":76},[66,163937,163938],{"class":68,"line":377},[66,163939,109],{"emptyLinePlaceholder":108},[66,163941,163942],{"class":68,"line":392},[66,163943,109],{"emptyLinePlaceholder":108},[66,163945,163946,163948,163951],{"class":68,"line":405},[66,163947,33739],{"class":72},[66,163949,163950],{"class":3793}," show_balance",[66,163952,33745],{"class":76},[66,163954,163955,163957,163959,163961,163964,163966,163969,163971,163973],{"class":68,"line":418},[66,163956,132],{"class":102},[66,163958,348],{"class":76},[66,163960,445],{"class":72},[66,163962,163963],{"class":356},"\"当前余额:",[66,163965,451],{"class":102},[66,163967,163968],{"class":76},"balance",[66,163970,457],{"class":102},[66,163972,158762],{"class":356},[66,163974,313],{"class":76},[66,163976,163977],{"class":68,"line":430},[66,163978,109],{"emptyLinePlaceholder":108},[66,163980,163981],{"class":68,"line":438},[66,163982,109],{"emptyLinePlaceholder":108},[66,163984,163985,163987,163990],{"class":68,"line":465},[66,163986,33739],{"class":72},[66,163988,163989],{"class":3793}," save_money",[66,163991,33745],{"class":76},[66,163993,163994,163996],{"class":68,"line":1805},[66,163995,163420],{"class":72},[66,163997,151862],{"class":76},[66,163999,164000,164003,164005,164007,164009,164011,164013,164016],{"class":68,"line":1817},[66,164001,164002],{"class":76},"    money ",[66,164004,99],{"class":72},[66,164006,111569],{"class":102},[66,164008,348],{"class":76},[66,164010,351],{"class":102},[66,164012,348],{"class":76},[66,164014,164015],{"class":356},"\"请输入存款金额:\"",[66,164017,360],{"class":76},[66,164019,164020,164022,164024,164026,164028],{"class":68,"line":1822},[66,164021,380],{"class":72},[66,164023,151905],{"class":76},[66,164025,120],{"class":72},[66,164027,962],{"class":102},[66,164029,126],{"class":76},[66,164031,164032,164034,164036,164039],{"class":68,"line":1829},[66,164033,395],{"class":102},[66,164035,348],{"class":76},[66,164037,164038],{"class":356},"\"金额必须大于0\"",[66,164040,313],{"class":76},[66,164042,164043],{"class":68,"line":3529},[66,164044,154121],{"class":72},[66,164046,164047,164050,164052],{"class":68,"line":3557},[66,164048,164049],{"class":76},"    balance ",[66,164051,144],{"class":72},[66,164053,151938],{"class":76},[66,164055,164056,164058,164060,164063],{"class":68,"line":3562},[66,164057,132],{"class":102},[66,164059,348],{"class":76},[66,164061,164062],{"class":356},"\"存款成功\"",[66,164064,313],{"class":76},[66,164066,164067],{"class":68,"line":3579},[66,164068,164069],{"class":76},"    show_balance()\n",[66,164071,164072],{"class":68,"line":3584},[66,164073,109],{"emptyLinePlaceholder":108},[66,164075,164076],{"class":68,"line":3589},[66,164077,109],{"emptyLinePlaceholder":108},[66,164079,164080,164082,164085],{"class":68,"line":3594},[66,164081,33739],{"class":72},[66,164083,164084],{"class":3793}," withdraw_money",[66,164086,33745],{"class":76},[66,164088,164089,164091],{"class":68,"line":3608},[66,164090,163420],{"class":72},[66,164092,151862],{"class":76},[66,164094,164095,164097,164099,164101,164103,164105,164107,164110],{"class":68,"line":3613},[66,164096,164002],{"class":76},[66,164098,99],{"class":72},[66,164100,111569],{"class":102},[66,164102,348],{"class":76},[66,164104,351],{"class":102},[66,164106,348],{"class":76},[66,164108,164109],{"class":356},"\"请输入取款金额:\"",[66,164111,360],{"class":76},[66,164113,164114,164116,164118,164120,164122],{"class":68,"line":4401},[66,164115,380],{"class":72},[66,164117,151905],{"class":76},[66,164119,120],{"class":72},[66,164121,962],{"class":102},[66,164123,126],{"class":76},[66,164125,164126,164128,164130,164132],{"class":68,"line":4415},[66,164127,395],{"class":102},[66,164129,348],{"class":76},[66,164131,164038],{"class":356},[66,164133,313],{"class":76},[66,164135,164136],{"class":68,"line":4423},[66,164137,154121],{"class":72},[66,164139,164140,164142,164144,164146],{"class":68,"line":4428},[66,164141,380],{"class":72},[66,164143,151905],{"class":76},[66,164145,386],{"class":72},[66,164147,164148],{"class":76}," balance:\n",[66,164150,164151,164153,164155,164157],{"class":68,"line":4434},[66,164152,395],{"class":102},[66,164154,348],{"class":76},[66,164156,152000],{"class":356},[66,164158,313],{"class":76},[66,164160,164161],{"class":68,"line":4440},[66,164162,154121],{"class":72},[66,164164,164165,164167,164169],{"class":68,"line":4445},[66,164166,164049],{"class":76},[66,164168,152015],{"class":72},[66,164170,151938],{"class":76},[66,164172,164173,164175,164177,164180],{"class":68,"line":9759},[66,164174,132],{"class":102},[66,164176,348],{"class":76},[66,164178,164179],{"class":356},"\"取款成功\"",[66,164181,313],{"class":76},[66,164183,164184],{"class":68,"line":9783},[66,164185,164069],{"class":76},[66,164187,164188],{"class":68,"line":9788},[66,164189,109],{"emptyLinePlaceholder":108},[66,164191,164192],{"class":68,"line":9794},[66,164193,109],{"emptyLinePlaceholder":108},[66,164195,164196,164198,164200],{"class":68,"line":9821},[66,164197,73],{"class":72},[66,164199,333],{"class":102},[66,164201,126],{"class":76},[66,164203,164204],{"class":68,"line":9826},[66,164205,164206],{"class":76},"    show_menu()\n",[66,164208,164209,164211,164213,164215,164217,164219],{"class":68,"line":9832},[66,164210,1701],{"class":76},[66,164212,99],{"class":72},[66,164214,1532],{"class":102},[66,164216,348],{"class":76},[66,164218,1710],{"class":356},[66,164220,313],{"class":76},[66,164222,164223],{"class":68,"line":9844},[66,164224,109],{"emptyLinePlaceholder":108},[66,164226,164227,164229,164231,164233,164235],{"class":68,"line":9856},[66,164228,380],{"class":72},[66,164230,1723],{"class":76},[66,164232,531],{"class":72},[66,164234,1728],{"class":356},[66,164236,126],{"class":76},[66,164238,164239],{"class":68,"line":9868},[66,164240,164241],{"class":76},"        show_balance()\n",[66,164243,164244,164246,164248,164250,164252],{"class":68,"line":11523},[66,164245,408],{"class":72},[66,164247,1723],{"class":76},[66,164249,531],{"class":72},[66,164251,1752],{"class":356},[66,164253,126],{"class":76},[66,164255,164256],{"class":68,"line":11548},[66,164257,164258],{"class":76},"        save_money()\n",[66,164260,164261,164263,164265,164267,164269],{"class":68,"line":11571},[66,164262,408],{"class":72},[66,164264,1723],{"class":76},[66,164266,531],{"class":72},[66,164268,1776],{"class":356},[66,164270,126],{"class":76},[66,164272,164273],{"class":68,"line":11595},[66,164274,164275],{"class":76},"        withdraw_money()\n",[66,164277,164278,164280,164282,164284,164286],{"class":68,"line":11600},[66,164279,408],{"class":72},[66,164281,1723],{"class":76},[66,164283,531],{"class":72},[66,164285,1800],{"class":356},[66,164287,126],{"class":76},[66,164289,164290,164292,164294,164296],{"class":68,"line":11605},[66,164291,395],{"class":102},[66,164293,348],{"class":76},[66,164295,1812],{"class":356},[66,164297,313],{"class":76},[66,164299,164300],{"class":68,"line":11610},[66,164301,468],{"class":72},[66,164303,164304,164306],{"class":68,"line":11619},[66,164305,433],{"class":72},[66,164307,126],{"class":76},[66,164309,164310,164312,164314,164316],{"class":68,"line":11624},[66,164311,395],{"class":102},[66,164313,348],{"class":76},[66,164315,1836],{"class":356},[66,164317,313],{"class":76},[19,164319,164320],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,164322,164324],{"id":164323},"_514-易错点","5.14 易错点",[31,164326,164327,164330,164333,164338,164343,164346],{},[34,164328,164329],{},"函数定义后必须调用才会执行。",[34,164331,164332],{},"函数名后面有括号才是调用。",[34,164334,164335,164337],{},[23,164336,18849],{}," 后面的代码不会执行。",[34,164339,164340,164341,158],{},"没有返回值的函数默认返回 ",[23,164342,97461],{},[34,164344,164345],{},"局部变量不能在函数外部访问。",[34,164347,164348,164349,164351],{},"不要滥用 ",[23,164350,163385],{},"，更好的方式是让函数返回新值。",[19,164353,164354,164355,164357],{},"例如不用 ",[23,164356,163385],{}," 改写存款：",[57,164359,164361],{"className":59,"code":164360,"language":61,"meta":62,"style":62},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[23,164362,164363,164372,164383,164387,164391,164399,164412],{"__ignoreMap":62},[66,164364,164365,164367,164369],{"class":68,"line":69},[66,164366,33739],{"class":72},[66,164368,163989],{"class":3793},[66,164370,164371],{"class":76},"(balance, money):\n",[66,164373,164374,164376,164379,164381],{"class":68,"line":80},[66,164375,5907],{"class":72},[66,164377,164378],{"class":76}," balance ",[66,164380,1184],{"class":72},[66,164382,151938],{"class":76},[66,164384,164385],{"class":68,"line":112},[66,164386,109],{"emptyLinePlaceholder":108},[66,164388,164389],{"class":68,"line":129},[66,164390,109],{"emptyLinePlaceholder":108},[66,164392,164393,164395,164397],{"class":68,"line":138},[66,164394,163863],{"class":76},[66,164396,99],{"class":72},[66,164398,163868],{"class":102},[66,164400,164401,164403,164405,164408,164410],{"class":68,"line":227},[66,164402,163863],{"class":76},[66,164404,99],{"class":72},[66,164406,164407],{"class":76}," save_money(balance, ",[66,164409,3552],{"class":102},[66,164411,313],{"class":76},[66,164413,164414,164416],{"class":68,"line":236},[66,164415,244],{"class":102},[66,164417,164418],{"class":76},"(balance)\n",[14,164420,164422],{"id":164421},"_515-本章练习","5.15 本章练习",[31,164424,164425,164432,164438,164444,164450],{},[34,164426,164427,164428,164431],{},"定义函数 ",[23,164429,164430],{},"print_student(name, age)","，输出学生信息。",[34,164433,164427,164434,164437],{},[23,164435,164436],{},"get_max(a, b, c)","，返回三个数中的最大值。",[34,164439,164427,164440,164443],{},[23,164441,164442],{},"is_even(num)","，判断一个数是否为偶数。",[34,164445,164427,164446,164449],{},[23,164447,164448],{},"calculate_bmi(weight, height)","，返回 BMI。",[34,164451,164452],{},"把第 4 章的菜单程序拆分成多个函数。",[1903,164454,164455],{},"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":62,"searchDepth":80,"depth":80,"links":164457},[164458,164459,164460,164461,164462,164463,164464,164465,164466,164470,164471,164472,164473,164474,164475],{"id":162478,"depth":80,"text":162479},{"id":162519,"depth":80,"text":162520},{"id":162609,"depth":80,"text":162610},{"id":162690,"depth":80,"text":162691},{"id":162823,"depth":80,"text":162824},{"id":162945,"depth":80,"text":162946},{"id":163067,"depth":80,"text":163068},{"id":163144,"depth":80,"text":163145},{"id":163266,"depth":80,"text":163267,"children":164467},[164468,164469],{"id":163270,"depth":112,"text":163271},{"id":163328,"depth":112,"text":163329},{"id":163457,"depth":80,"text":163458},{"id":163583,"depth":80,"text":163584},{"id":163696,"depth":80,"text":163697},{"id":163852,"depth":80,"text":163853},{"id":164323,"depth":80,"text":164324},{"id":164421,"depth":80,"text":164422},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":162470,"description":1926},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":164482,"title":164483,"body":164484,"description":1926,"extension":1927,"meta":167528,"navigation":108,"path":167529,"seo":167530,"stem":167531,"__hash__":167532},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":164485,"toc":167509},[164486,164489,164493,164496,164499,164603,164606,164610,164613,164693,164696,164700,164703,164763,164766,164802,164805,164820,164824,164897,164900,164955,164958,165028,165031,165115,165125,165183,165187,165232,165235,165261,165264,165370,165374,165377,165419,165422,165486,165489,165493,165496,165557,165560,165590,165593,165631,165635,165638,165647,165650,165774,165777,165818,165822,165825,165836,165876,165879,165894,165899,165902,165969,165972,166062,166066,166069,166117,166120,166147,166149,166179,166182,166202,166205,166236,166239,166272,166276,166279,166303,166306,166330,166333,166357,166361,166364,166494,166497,166577,166580,166655,166659,166662,166712,166715,166757,166760,166784,166786,166810,166813,166868,166871,166937,166941,166944,166947,166985,166988,167041,167044,167090,167093,167126,167129,167133,167452,167456,167485,167489,167506],[10,164487,164483],{"id":164488},"_6-数据容器",[14,164490,164492],{"id":164491},"_61-什么是数据容器","6.1 什么是数据容器",[19,164494,164495],{},"数据容器用于一次保存多个数据。",[19,164497,164498],{},"常见容器：",[2129,164500,164501,164518],{},[2132,164502,164503],{},[2135,164504,164505,164507,164510,164513,164516],{},[2138,164506,27573],{},[2138,164508,164509],{},"是否有序",[2138,164511,164512],{},"是否可变",[2138,164514,164515],{},"是否允许重复",[2138,164517,29293],{},[2176,164519,164520,164538,164554,164569,164586],{},[2135,164521,164522,164525,164528,164531,164534],{},[2181,164523,164524],{},"list列表",[2181,164526,164527],{},"有序",[2181,164529,164530],{},"可变",[2181,164532,164533],{},"允许",[2181,164535,164536],{},[23,164537,157008],{},[2135,164539,164540,164543,164545,164548,164550],{},[2181,164541,164542],{},"tuple元组",[2181,164544,164527],{},[2181,164546,164547],{},"不可变",[2181,164549,164533],{},[2181,164551,164552],{},[23,164553,157021],{},[2135,164555,164556,164559,164561,164563,164565],{},[2181,164557,164558],{},"str字符串",[2181,164560,164527],{},[2181,164562,164547],{},[2181,164564,164533],{},[2181,164566,164567],{},[23,164568,157630],{},[2135,164570,164571,164574,164577,164579,164582],{},[2181,164572,164573],{},"set集合",[2181,164575,164576],{},"无序",[2181,164578,164530],{},[2181,164580,164581],{},"不允许",[2181,164583,164584],{},[23,164585,157046],{},[2135,164587,164588,164591,164593,164595,164598],{},[2181,164589,164590],{},"dict字典",[2181,164592,164527],{},[2181,164594,164530],{},[2181,164596,164597],{},"key不允许重复",[2181,164599,164600],{},[23,164601,164602],{},"{\"name\": \"小明\"}",[19,164604,164605],{},"Python 3.7 之后，字典保持插入顺序。",[14,164607,164609],{"id":164608},"_62-列表list","6.2 列表list",[19,164611,164612],{},"列表用于保存一组有顺序的数据。",[57,164614,164616],{"className":59,"code":164615,"language":61,"meta":62,"style":62},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[23,164617,164618,164638,164663,164684],{"__ignoreMap":62},[66,164619,164620,164622,164624,164626,164628,164630,164632,164634,164636],{"class":68,"line":69},[66,164621,1382],{"class":76},[66,164623,99],{"class":72},[66,164625,688],{"class":76},[66,164627,691],{"class":356},[66,164629,307],{"class":76},[66,164631,696],{"class":356},[66,164633,307],{"class":76},[66,164635,701],{"class":356},[66,164637,704],{"class":76},[66,164639,164640,164643,164645,164647,164649,164651,164653,164655,164657,164659,164661],{"class":68,"line":80},[66,164641,164642],{"class":76},"numbers ",[66,164644,99],{"class":72},[66,164646,688],{"class":76},[66,164648,304],{"class":102},[66,164650,307],{"class":76},[66,164652,795],{"class":102},[66,164654,307],{"class":76},[66,164656,1520],{"class":102},[66,164658,307],{"class":76},[66,164660,1076],{"class":102},[66,164662,704],{"class":76},[66,164664,164665,164668,164670,164672,164674,164676,164678,164680,164682],{"class":68,"line":112},[66,164666,164667],{"class":76},"mixed ",[66,164669,99],{"class":72},[66,164671,688],{"class":76},[66,164673,691],{"class":356},[66,164675,307],{"class":76},[66,164677,2629],{"class":102},[66,164679,307],{"class":76},[66,164681,33269],{"class":102},[66,164683,704],{"class":76},[66,164685,164686,164689,164691],{"class":68,"line":129},[66,164687,164688],{"class":76},"empty ",[66,164690,99],{"class":72},[66,164692,53622],{"class":76},[19,164694,164695],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,164697,164699],{"id":164698},"_63-列表索引","6.3 列表索引",[19,164701,164702],{},"正向索引从 0 开始：",[57,164704,164706],{"className":59,"code":164705,"language":61,"meta":62,"style":62},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[23,164707,164708,164728,164732,164743,164753],{"__ignoreMap":62},[66,164709,164710,164712,164714,164716,164718,164720,164722,164724,164726],{"class":68,"line":69},[66,164711,1382],{"class":76},[66,164713,99],{"class":72},[66,164715,688],{"class":76},[66,164717,691],{"class":356},[66,164719,307],{"class":76},[66,164721,696],{"class":356},[66,164723,307],{"class":76},[66,164725,701],{"class":356},[66,164727,704],{"class":76},[66,164729,164730],{"class":68,"line":80},[66,164731,109],{"emptyLinePlaceholder":108},[66,164733,164734,164736,164739,164741],{"class":68,"line":112},[66,164735,244],{"class":102},[66,164737,164738],{"class":76},"(names[",[66,164740,2183],{"class":102},[66,164742,6473],{"class":76},[66,164744,164745,164747,164749,164751],{"class":68,"line":129},[66,164746,244],{"class":102},[66,164748,164738],{"class":76},[66,164750,304],{"class":102},[66,164752,6473],{"class":76},[66,164754,164755,164757,164759,164761],{"class":68,"line":138},[66,164756,244],{"class":102},[66,164758,164738],{"class":76},[66,164760,795],{"class":102},[66,164762,6473],{"class":76},[19,164764,164765],{},"反向索引从 -1 开始：",[57,164767,164769],{"className":59,"code":164768,"language":61,"meta":62,"style":62},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[23,164770,164771,164787],{"__ignoreMap":62},[66,164772,164773,164775,164777,164779,164781,164784],{"class":68,"line":69},[66,164774,244],{"class":102},[66,164776,164738],{"class":76},[66,164778,2511],{"class":72},[66,164780,304],{"class":102},[66,164782,164783],{"class":76},"])  ",[66,164785,164786],{"class":758},"# 小刚\n",[66,164788,164789,164791,164793,164795,164797,164799],{"class":68,"line":80},[66,164790,244],{"class":102},[66,164792,164738],{"class":76},[66,164794,2511],{"class":72},[66,164796,795],{"class":102},[66,164798,164783],{"class":76},[66,164800,164801],{"class":758},"# 小红\n",[19,164803,164804],{},"索引越界会报错：",[57,164806,164808],{"className":59,"code":164807,"language":61,"meta":62,"style":62},"print(names[3])\n",[23,164809,164810],{"__ignoreMap":62},[66,164811,164812,164814,164816,164818],{"class":68,"line":69},[66,164813,244],{"class":102},[66,164815,164738],{"class":76},[66,164817,1520],{"class":102},[66,164819,6473],{"class":76},[14,164821,164823],{"id":164822},"_64-列表常用方法","6.4 列表常用方法",[57,164825,164827],{"className":59,"code":164826,"language":61,"meta":62,"style":62},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[23,164828,164829,164845,164849,164858,164872,164886,164890],{"__ignoreMap":62},[66,164830,164831,164833,164835,164837,164839,164841,164843],{"class":68,"line":69},[66,164832,1382],{"class":76},[66,164834,99],{"class":72},[66,164836,688],{"class":76},[66,164838,691],{"class":356},[66,164840,307],{"class":76},[66,164842,696],{"class":356},[66,164844,704],{"class":76},[66,164846,164847],{"class":68,"line":80},[66,164848,109],{"emptyLinePlaceholder":108},[66,164850,164851,164854,164856],{"class":68,"line":112},[66,164852,164853],{"class":76},"names.append(",[66,164855,701],{"class":356},[66,164857,313],{"class":76},[66,164859,164860,164863,164865,164867,164870],{"class":68,"line":129},[66,164861,164862],{"class":76},"names.insert(",[66,164864,304],{"class":102},[66,164866,307],{"class":76},[66,164868,164869],{"class":356},"\"小李\"",[66,164871,313],{"class":76},[66,164873,164874,164877,164879,164881,164884],{"class":68,"line":138},[66,164875,164876],{"class":76},"names.extend([",[66,164878,10494],{"class":356},[66,164880,307],{"class":76},[66,164882,164883],{"class":356},"\"小赵\"",[66,164885,6473],{"class":76},[66,164887,164888],{"class":68,"line":227},[66,164889,109],{"emptyLinePlaceholder":108},[66,164891,164892,164894],{"class":68,"line":236},[66,164893,244],{"class":102},[66,164895,164896],{"class":76},"(names)\n",[19,164898,164899],{},"删除元素：",[57,164901,164903],{"className":59,"code":164902,"language":61,"meta":62,"style":62},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[23,164904,164905,164914,164924,164938,164950],{"__ignoreMap":62},[66,164906,164907,164910,164912],{"class":68,"line":69},[66,164908,164909],{"class":76},"names.remove(",[66,164911,696],{"class":356},[66,164913,313],{"class":76},[66,164915,164916,164919,164921],{"class":68,"line":80},[66,164917,164918],{"class":76},"last ",[66,164920,99],{"class":72},[66,164922,164923],{"class":76}," names.pop()\n",[66,164925,164926,164929,164931,164934,164936],{"class":68,"line":112},[66,164927,164928],{"class":76},"first ",[66,164930,99],{"class":72},[66,164932,164933],{"class":76}," names.pop(",[66,164935,2183],{"class":102},[66,164937,313],{"class":76},[66,164939,164940,164943,164946,164948],{"class":68,"line":129},[66,164941,164942],{"class":72},"del",[66,164944,164945],{"class":76}," names[",[66,164947,2183],{"class":102},[66,164949,704],{"class":76},[66,164951,164952],{"class":68,"line":138},[66,164953,164954],{"class":76},"names.clear()\n",[19,164956,164957],{},"查询和统计：",[57,164959,164961],{"className":59,"code":164960,"language":61,"meta":62,"style":62},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[23,164962,164963,164991,164995,165006,165017],{"__ignoreMap":62},[66,164964,164965,164967,164969,164971,164973,164975,164977,164979,164981,164983,164985,164987,164989],{"class":68,"line":69},[66,164966,164642],{"class":76},[66,164968,99],{"class":72},[66,164970,688],{"class":76},[66,164972,304],{"class":102},[66,164974,307],{"class":76},[66,164976,795],{"class":102},[66,164978,307],{"class":76},[66,164980,1520],{"class":102},[66,164982,307],{"class":76},[66,164984,795],{"class":102},[66,164986,307],{"class":76},[66,164988,1076],{"class":102},[66,164990,704],{"class":76},[66,164992,164993],{"class":68,"line":80},[66,164994,109],{"emptyLinePlaceholder":108},[66,164996,164997,164999,165002,165004],{"class":68,"line":112},[66,164998,244],{"class":102},[66,165000,165001],{"class":76},"(numbers.index(",[66,165003,1520],{"class":102},[66,165005,360],{"class":76},[66,165007,165008,165010,165013,165015],{"class":68,"line":129},[66,165009,244],{"class":102},[66,165011,165012],{"class":76},"(numbers.count(",[66,165014,795],{"class":102},[66,165016,360],{"class":76},[66,165018,165019,165021,165023,165025],{"class":68,"line":138},[66,165020,244],{"class":102},[66,165022,348],{"class":76},[66,165024,9169],{"class":102},[66,165026,165027],{"class":76},"(numbers))\n",[19,165029,165030],{},"排序：",[57,165032,165034],{"className":59,"code":165033,"language":61,"meta":62,"style":62},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[23,165035,165036,165060,165064,165069,165076,165080,165094,165100,165104,165109],{"__ignoreMap":62},[66,165037,165038,165040,165042,165044,165046,165048,165050,165052,165054,165056,165058],{"class":68,"line":69},[66,165039,164642],{"class":76},[66,165041,99],{"class":72},[66,165043,688],{"class":76},[66,165045,1520],{"class":102},[66,165047,307],{"class":76},[66,165049,304],{"class":102},[66,165051,307],{"class":76},[66,165053,752],{"class":102},[66,165055,307],{"class":76},[66,165057,795],{"class":102},[66,165059,704],{"class":76},[66,165061,165062],{"class":68,"line":80},[66,165063,109],{"emptyLinePlaceholder":108},[66,165065,165066],{"class":68,"line":112},[66,165067,165068],{"class":76},"numbers.sort()\n",[66,165070,165071,165073],{"class":68,"line":129},[66,165072,244],{"class":102},[66,165074,165075],{"class":76},"(numbers)\n",[66,165077,165078],{"class":68,"line":138},[66,165079,109],{"emptyLinePlaceholder":108},[66,165081,165082,165085,165088,165090,165092],{"class":68,"line":227},[66,165083,165084],{"class":76},"numbers.sort(",[66,165086,165087],{"class":1234},"reverse",[66,165089,99],{"class":72},[66,165091,33269],{"class":102},[66,165093,313],{"class":76},[66,165095,165096,165098],{"class":68,"line":236},[66,165097,244],{"class":102},[66,165099,165075],{"class":76},[66,165101,165102],{"class":68,"line":241},[66,165103,109],{"emptyLinePlaceholder":108},[66,165105,165106],{"class":68,"line":372},[66,165107,165108],{"class":76},"numbers.reverse()\n",[66,165110,165111,165113],{"class":68,"line":377},[66,165112,244],{"class":102},[66,165114,165075],{"class":76},[19,165116,165117,165120,165121,165124],{},[23,165118,165119],{},"sort()"," 会修改原列表，",[23,165122,165123],{},"sorted()"," 返回新列表。",[57,165126,165128],{"className":59,"code":165127,"language":61,"meta":62,"style":62},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[23,165129,165130,165154,165166,165170,165176],{"__ignoreMap":62},[66,165131,165132,165134,165136,165138,165140,165142,165144,165146,165148,165150,165152],{"class":68,"line":69},[66,165133,164642],{"class":76},[66,165135,99],{"class":72},[66,165137,688],{"class":76},[66,165139,1520],{"class":102},[66,165141,307],{"class":76},[66,165143,304],{"class":102},[66,165145,307],{"class":76},[66,165147,752],{"class":102},[66,165149,307],{"class":76},[66,165151,795],{"class":102},[66,165153,704],{"class":76},[66,165155,165156,165159,165161,165164],{"class":68,"line":80},[66,165157,165158],{"class":76},"new_numbers ",[66,165160,99],{"class":72},[66,165162,165163],{"class":102}," sorted",[66,165165,165075],{"class":76},[66,165167,165168],{"class":68,"line":112},[66,165169,109],{"emptyLinePlaceholder":108},[66,165171,165172,165174],{"class":68,"line":129},[66,165173,244],{"class":102},[66,165175,165075],{"class":76},[66,165177,165178,165180],{"class":68,"line":138},[66,165179,244],{"class":102},[66,165181,165182],{"class":76},"(new_numbers)\n",[14,165184,165186],{"id":165185},"_65-列表遍历","6.5 列表遍历",[57,165188,165190],{"className":59,"code":165189,"language":61,"meta":62,"style":62},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[23,165191,165192,165212,165216,165226],{"__ignoreMap":62},[66,165193,165194,165196,165198,165200,165202,165204,165206,165208,165210],{"class":68,"line":69},[66,165195,1382],{"class":76},[66,165197,99],{"class":72},[66,165199,688],{"class":76},[66,165201,691],{"class":356},[66,165203,307],{"class":76},[66,165205,696],{"class":356},[66,165207,307],{"class":76},[66,165209,701],{"class":356},[66,165211,704],{"class":76},[66,165213,165214],{"class":68,"line":80},[66,165215,109],{"emptyLinePlaceholder":108},[66,165217,165218,165220,165222,165224],{"class":68,"line":112},[66,165219,502],{"class":72},[66,165221,1419],{"class":76},[66,165223,507],{"class":72},[66,165225,1424],{"class":76},[66,165227,165228,165230],{"class":68,"line":129},[66,165229,132],{"class":102},[66,165231,152423],{"class":76},[19,165233,165234],{},"需要索引时：",[57,165236,165238],{"className":59,"code":165237,"language":61,"meta":62,"style":62},"for index, name in enumerate(names):\n    print(index, name)\n",[23,165239,165240,165254],{"__ignoreMap":62},[66,165241,165242,165244,165247,165249,165251],{"class":68,"line":69},[66,165243,502],{"class":72},[66,165245,165246],{"class":76}," index, name ",[66,165248,507],{"class":72},[66,165250,33399],{"class":102},[66,165252,165253],{"class":76},"(names):\n",[66,165255,165256,165258],{"class":68,"line":80},[66,165257,132],{"class":102},[66,165259,165260],{"class":76},"(index, name)\n",[19,165262,165263],{},"统计总分：",[57,165265,165267],{"className":59,"code":165266,"language":61,"meta":62,"style":62},"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",[23,165268,165269,165294,165302,165306,165317,165325,165329,165346],{"__ignoreMap":62},[66,165270,165271,165274,165276,165278,165280,165282,165284,165286,165288,165290,165292],{"class":68,"line":69},[66,165272,165273],{"class":76},"scores ",[66,165275,99],{"class":72},[66,165277,688],{"class":76},[66,165279,2841],{"class":102},[66,165281,307],{"class":76},[66,165283,2715],{"class":102},[66,165285,307],{"class":76},[66,165287,2244],{"class":102},[66,165289,307],{"class":76},[66,165291,2540],{"class":102},[66,165293,704],{"class":76},[66,165295,165296,165298,165300],{"class":68,"line":80},[66,165297,192],{"class":76},[66,165299,99],{"class":72},[66,165301,197],{"class":102},[66,165303,165304],{"class":68,"line":112},[66,165305,109],{"emptyLinePlaceholder":108},[66,165307,165308,165310,165312,165314],{"class":68,"line":129},[66,165309,502],{"class":72},[66,165311,159531],{"class":76},[66,165313,507],{"class":72},[66,165315,165316],{"class":76}," scores:\n",[66,165318,165319,165321,165323],{"class":68,"line":138},[66,165320,219],{"class":76},[66,165322,144],{"class":72},[66,165324,3421],{"class":76},[66,165326,165327],{"class":68,"line":227},[66,165328,109],{"emptyLinePlaceholder":108},[66,165330,165331,165334,165336,165339,165341,165343],{"class":68,"line":236},[66,165332,165333],{"class":76},"avg ",[66,165335,99],{"class":72},[66,165337,165338],{"class":76}," total ",[66,165340,2563],{"class":72},[66,165342,9142],{"class":102},[66,165344,165345],{"class":76},"(scores)\n",[66,165347,165348,165350,165352,165354,165357,165359,165362,165364,165366,165368],{"class":68,"line":241},[66,165349,244],{"class":102},[66,165351,348],{"class":76},[66,165353,445],{"class":72},[66,165355,165356],{"class":356},"\"平均分:",[66,165358,451],{"class":102},[66,165360,165361],{"class":76},"avg",[66,165363,158909],{"class":72},[66,165365,457],{"class":102},[66,165367,1130],{"class":356},[66,165369,313],{"class":76},[14,165371,165373],{"id":165372},"_66-元组tuple","6.6 元组tuple",[19,165375,165376],{},"元组和列表类似，但不可修改。",[57,165378,165380],{"className":59,"code":165379,"language":61,"meta":62,"style":62},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[23,165381,165382,165399],{"__ignoreMap":62},[66,165383,165384,165387,165389,165391,165393,165395,165397],{"class":68,"line":69},[66,165385,165386],{"class":76},"point ",[66,165388,99],{"class":72},[66,165390,3492],{"class":76},[66,165392,790],{"class":102},[66,165394,307],{"class":76},[66,165396,2679],{"class":102},[66,165398,313],{"class":76},[66,165400,165401,165403,165405,165407,165409,165411,165413,165415,165417],{"class":68,"line":80},[66,165402,118085],{"class":76},[66,165404,99],{"class":72},[66,165406,3492],{"class":76},[66,165408,691],{"class":356},[66,165410,307],{"class":76},[66,165412,2629],{"class":102},[66,165414,307],{"class":76},[66,165416,71048],{"class":356},[66,165418,313],{"class":76},[19,165420,165421],{},"单元素元组必须加逗号：",[57,165423,165425],{"className":59,"code":165424,"language":61,"meta":62,"style":62},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[23,165426,165427,165441,165454,165458,165472],{"__ignoreMap":62},[66,165428,165429,165432,165434,165436,165438],{"class":68,"line":69},[66,165430,165431],{"class":76},"t1 ",[66,165433,99],{"class":72},[66,165435,3492],{"class":76},[66,165437,790],{"class":102},[66,165439,165440],{"class":76},",)\n",[66,165442,165443,165446,165448,165450,165452],{"class":68,"line":80},[66,165444,165445],{"class":76},"t2 ",[66,165447,99],{"class":72},[66,165449,3492],{"class":76},[66,165451,790],{"class":102},[66,165453,313],{"class":76},[66,165455,165456],{"class":68,"line":112},[66,165457,109],{"emptyLinePlaceholder":108},[66,165459,165460,165462,165464,165466,165469],{"class":68,"line":129},[66,165461,244],{"class":102},[66,165463,348],{"class":76},[66,165465,104880],{"class":102},[66,165467,165468],{"class":76},"(t1))  ",[66,165470,165471],{"class":758},"# tuple\n",[66,165473,165474,165476,165478,165480,165483],{"class":68,"line":138},[66,165475,244],{"class":102},[66,165477,348],{"class":76},[66,165479,104880],{"class":102},[66,165481,165482],{"class":76},"(t2))  ",[66,165484,165485],{"class":758},"# int\n",[19,165487,165488],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,165490,165492],{"id":165491},"_67-字符串str","6.7 字符串str",[19,165494,165495],{},"字符串也是序列，可以索引、切片和遍历。",[57,165497,165499],{"className":59,"code":165498,"language":61,"meta":62,"style":62},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[23,165500,165501,165509,165513,165524,165536,165540,165551],{"__ignoreMap":62},[66,165502,165503,165505,165507],{"class":68,"line":69},[66,165504,158194],{"class":76},[66,165506,99],{"class":72},[66,165508,647],{"class":356},[66,165510,165511],{"class":68,"line":80},[66,165512,109],{"emptyLinePlaceholder":108},[66,165514,165515,165517,165520,165522],{"class":68,"line":112},[66,165516,244],{"class":102},[66,165518,165519],{"class":76},"(text[",[66,165521,2183],{"class":102},[66,165523,6473],{"class":76},[66,165525,165526,165528,165530,165532,165534],{"class":68,"line":129},[66,165527,244],{"class":102},[66,165529,165519],{"class":76},[66,165531,2511],{"class":72},[66,165533,304],{"class":102},[66,165535,6473],{"class":76},[66,165537,165538],{"class":68,"line":138},[66,165539,109],{"emptyLinePlaceholder":108},[66,165541,165542,165544,165546,165548],{"class":68,"line":227},[66,165543,502],{"class":72},[66,165545,658],{"class":76},[66,165547,507],{"class":72},[66,165549,165550],{"class":76}," text:\n",[66,165552,165553,165555],{"class":68,"line":236},[66,165554,132],{"class":102},[66,165556,670],{"class":76},[19,165558,165559],{},"字符串不可变：",[57,165561,165563],{"className":59,"code":165562,"language":61,"meta":62,"style":62},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[23,165564,165565,165573],{"__ignoreMap":62},[66,165566,165567,165569,165571],{"class":68,"line":69},[66,165568,158194],{"class":76},[66,165570,99],{"class":72},[66,165572,647],{"class":356},[66,165574,165575,165578,165580,165582,165584,165587],{"class":68,"line":80},[66,165576,165577],{"class":76},"text[",[66,165579,2183],{"class":102},[66,165581,6259],{"class":76},[66,165583,99],{"class":72},[66,165585,165586],{"class":356}," \"P\"",[66,165588,165589],{"class":758},"  # 报错\n",[19,165591,165592],{},"如果要得到新字符串：",[57,165594,165596],{"className":59,"code":165595,"language":61,"meta":62,"style":62},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[23,165597,165598,165606,165624],{"__ignoreMap":62},[66,165599,165600,165602,165604],{"class":68,"line":69},[66,165601,158194],{"class":76},[66,165603,99],{"class":72},[66,165605,647],{"class":356},[66,165607,165608,165610,165612,165614,165616,165619,165621],{"class":68,"line":80},[66,165609,158194],{"class":76},[66,165611,99],{"class":72},[66,165613,165586],{"class":356},[66,165615,47352],{"class":72},[66,165617,165618],{"class":76}," text[",[66,165620,304],{"class":102},[66,165622,165623],{"class":76},":]\n",[66,165625,165626,165628],{"class":68,"line":112},[66,165627,244],{"class":102},[66,165629,165630],{"class":76},"(text)\n",[14,165632,165634],{"id":165633},"_68-切片","6.8 切片",[19,165636,165637],{},"切片用于从序列中取一部分。",[57,165639,165641],{"className":59,"code":165640,"language":61,"meta":62,"style":62},"序列[开始:结束:步长]\n",[23,165642,165643],{"__ignoreMap":62},[66,165644,165645],{"class":68,"line":69},[66,165646,165640],{"class":76},[19,165648,165649],{},"结束位置不包含。",[57,165651,165653],{"className":59,"code":165652,"language":61,"meta":62,"style":62},"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",[23,165654,165655,165692,165696,165715,165730,165744,165758],{"__ignoreMap":62},[66,165656,165657,165660,165662,165664,165666,165668,165670,165672,165674,165676,165678,165680,165682,165684,165686,165688,165690],{"class":68,"line":69},[66,165658,165659],{"class":76},"nums ",[66,165661,99],{"class":72},[66,165663,688],{"class":76},[66,165665,2183],{"class":102},[66,165667,307],{"class":76},[66,165669,304],{"class":102},[66,165671,307],{"class":76},[66,165673,795],{"class":102},[66,165675,307],{"class":76},[66,165677,1520],{"class":102},[66,165679,307],{"class":76},[66,165681,1076],{"class":102},[66,165683,307],{"class":76},[66,165685,752],{"class":102},[66,165687,307],{"class":76},[66,165689,519],{"class":102},[66,165691,704],{"class":76},[66,165693,165694],{"class":68,"line":80},[66,165695,109],{"emptyLinePlaceholder":108},[66,165697,165698,165700,165703,165705,165707,165709,165712],{"class":68,"line":112},[66,165699,244],{"class":102},[66,165701,165702],{"class":76},"(nums[",[66,165704,304],{"class":102},[66,165706,2838],{"class":76},[66,165708,1076],{"class":102},[66,165710,165711],{"class":76},"])    ",[66,165713,165714],{"class":758},"# [1, 2, 3]\n",[66,165716,165717,165719,165722,165724,165727],{"class":68,"line":129},[66,165718,244],{"class":102},[66,165720,165721],{"class":76},"(nums[:",[66,165723,1520],{"class":102},[66,165725,165726],{"class":76},"])     ",[66,165728,165729],{"class":758},"# [0, 1, 2]\n",[66,165731,165732,165734,165736,165738,165741],{"class":68,"line":138},[66,165733,244],{"class":102},[66,165735,165702],{"class":76},[66,165737,1520],{"class":102},[66,165739,165740],{"class":76},":])     ",[66,165742,165743],{"class":758},"# [3, 4, 5, 6]\n",[66,165745,165746,165748,165751,165753,165755],{"class":68,"line":227},[66,165747,244],{"class":102},[66,165749,165750],{"class":76},"(nums[::",[66,165752,795],{"class":102},[66,165754,165711],{"class":76},[66,165756,165757],{"class":758},"# [0, 2, 4, 6]\n",[66,165759,165760,165762,165764,165766,165768,165771],{"class":68,"line":236},[66,165761,244],{"class":102},[66,165763,165750],{"class":76},[66,165765,2511],{"class":72},[66,165767,304],{"class":102},[66,165769,165770],{"class":76},"])   ",[66,165772,165773],{"class":758},"# 反转\n",[19,165775,165776],{},"字符串切片：",[57,165778,165780],{"className":59,"code":165779,"language":61,"meta":62,"style":62},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[23,165781,165782,165791,165805],{"__ignoreMap":62},[66,165783,165784,165786,165788],{"class":68,"line":69},[66,165785,158194],{"class":76},[66,165787,99],{"class":72},[66,165789,165790],{"class":356}," \"abcdef\"\n",[66,165792,165793,165795,165797,165799,165801,165803],{"class":68,"line":80},[66,165794,244],{"class":102},[66,165796,165519],{"class":76},[66,165798,304],{"class":102},[66,165800,2838],{"class":76},[66,165802,1076],{"class":102},[66,165804,6473],{"class":76},[66,165806,165807,165809,165812,165814,165816],{"class":68,"line":112},[66,165808,244],{"class":102},[66,165810,165811],{"class":76},"(text[::",[66,165813,2511],{"class":72},[66,165815,304],{"class":102},[66,165817,6473],{"class":76},[14,165819,165821],{"id":165820},"_69-集合set","6.9 集合set",[19,165823,165824],{},"集合特点：",[31,165826,165827,165830,165833],{},[34,165828,165829],{},"无序。",[34,165831,165832],{},"元素不重复。",[34,165834,165835],{},"可以做交集、并集、差集。",[57,165837,165839],{"className":59,"code":165838,"language":61,"meta":62,"style":62},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[23,165840,165841,165869],{"__ignoreMap":62},[66,165842,165843,165845,165847,165849,165851,165853,165855,165857,165859,165861,165863,165865,165867],{"class":68,"line":69},[66,165844,165659],{"class":76},[66,165846,99],{"class":72},[66,165848,6264],{"class":76},[66,165850,304],{"class":102},[66,165852,307],{"class":76},[66,165854,795],{"class":102},[66,165856,307],{"class":76},[66,165858,1520],{"class":102},[66,165860,307],{"class":76},[66,165862,1520],{"class":102},[66,165864,307],{"class":76},[66,165866,1076],{"class":102},[66,165868,3407],{"class":76},[66,165870,165871,165873],{"class":68,"line":80},[66,165872,244],{"class":102},[66,165874,165875],{"class":76},"(nums)\n",[19,165877,165878],{},"创建空集合：",[57,165880,165882],{"className":59,"code":165881,"language":61,"meta":62,"style":62},"s = set()\n",[23,165883,165884],{"__ignoreMap":62},[66,165885,165886,165888,165890,165892],{"class":68,"line":69},[66,165887,12385],{"class":76},[66,165889,99],{"class":72},[66,165891,121493],{"class":102},[66,165893,1253],{"class":76},[19,165895,841,165896,165898],{},[23,165897,34249],{}," 是空字典，不是空集合。",[19,165900,165901],{},"集合常用操作：",[57,165903,165905],{"className":59,"code":165904,"language":61,"meta":62,"style":62},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[23,165906,165907,165927,165931,165940,165949,165958],{"__ignoreMap":62},[66,165908,165909,165911,165913,165915,165917,165919,165921,165923,165925],{"class":68,"line":69},[66,165910,12385],{"class":76},[66,165912,99],{"class":72},[66,165914,6264],{"class":76},[66,165916,304],{"class":102},[66,165918,307],{"class":76},[66,165920,795],{"class":102},[66,165922,307],{"class":76},[66,165924,1520],{"class":102},[66,165926,3407],{"class":76},[66,165928,165929],{"class":68,"line":80},[66,165930,109],{"emptyLinePlaceholder":108},[66,165932,165933,165936,165938],{"class":68,"line":112},[66,165934,165935],{"class":76},"s.add(",[66,165937,1076],{"class":102},[66,165939,313],{"class":76},[66,165941,165942,165945,165947],{"class":68,"line":129},[66,165943,165944],{"class":76},"s.remove(",[66,165946,795],{"class":102},[66,165948,313],{"class":76},[66,165950,165951,165954,165956],{"class":68,"line":138},[66,165952,165953],{"class":76},"s.discard(",[66,165955,790],{"class":102},[66,165957,313],{"class":76},[66,165959,165960,165962,165964,165966],{"class":68,"line":227},[66,165961,244],{"class":102},[66,165963,348],{"class":76},[66,165965,9169],{"class":102},[66,165967,165968],{"class":76},"(s))\n",[19,165970,165971],{},"交并差：",[57,165973,165975],{"className":59,"code":165974,"language":61,"meta":62,"style":62},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[23,165976,165977,165997,166017,166021,166036,166049],{"__ignoreMap":62},[66,165978,165979,165981,165983,165985,165987,165989,165991,165993,165995],{"class":68,"line":69},[66,165980,12725],{"class":76},[66,165982,99],{"class":72},[66,165984,6264],{"class":76},[66,165986,304],{"class":102},[66,165988,307],{"class":76},[66,165990,795],{"class":102},[66,165992,307],{"class":76},[66,165994,1520],{"class":102},[66,165996,3407],{"class":76},[66,165998,165999,166001,166003,166005,166007,166009,166011,166013,166015],{"class":68,"line":80},[66,166000,12751],{"class":76},[66,166002,99],{"class":72},[66,166004,6264],{"class":76},[66,166006,1520],{"class":102},[66,166008,307],{"class":76},[66,166010,1076],{"class":102},[66,166012,307],{"class":76},[66,166014,752],{"class":102},[66,166016,3407],{"class":76},[66,166018,166019],{"class":68,"line":112},[66,166020,109],{"emptyLinePlaceholder":108},[66,166022,166023,166025,166028,166030,166033],{"class":68,"line":129},[66,166024,244],{"class":102},[66,166026,166027],{"class":76},"(a ",[66,166029,2337],{"class":72},[66,166031,166032],{"class":76}," b)  ",[66,166034,166035],{"class":758},"# 交集\n",[66,166037,166038,166040,166042,166044,166046],{"class":68,"line":138},[66,166039,244],{"class":102},[66,166041,166027],{"class":76},[66,166043,2898],{"class":72},[66,166045,166032],{"class":76},[66,166047,166048],{"class":758},"# 并集\n",[66,166050,166051,166053,166055,166057,166059],{"class":68,"line":227},[66,166052,244],{"class":102},[66,166054,166027],{"class":76},[66,166056,2511],{"class":72},[66,166058,166032],{"class":76},[66,166060,166061],{"class":758},"# 差集\n",[14,166063,166065],{"id":166064},"_610-字典dict","6.10 字典dict",[19,166067,166068],{},"字典通过 key-value 保存数据。",[57,166070,166072],{"className":59,"code":166071,"language":61,"meta":62,"style":62},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[23,166073,166074,166082,166092,166103,166113],{"__ignoreMap":62},[66,166075,166076,166078,166080],{"class":68,"line":69},[66,166077,151246],{"class":76},[66,166079,99],{"class":72},[66,166081,17375],{"class":76},[66,166083,166084,166086,166088,166090],{"class":68,"line":80},[66,166085,148786],{"class":356},[66,166087,53221],{"class":76},[66,166089,691],{"class":356},[66,166091,33259],{"class":76},[66,166093,166094,166097,166099,166101],{"class":68,"line":112},[66,166095,166096],{"class":356},"    \"age\"",[66,166098,53221],{"class":76},[66,166100,2629],{"class":102},[66,166102,33259],{"class":76},[66,166104,166105,166108,166110],{"class":68,"line":129},[66,166106,166107],{"class":356},"    \"score\"",[66,166109,53221],{"class":76},[66,166111,166112],{"class":102},"95\n",[66,166114,166115],{"class":68,"line":138},[66,166116,3407],{"class":76},[19,166118,166119],{},"获取值：",[57,166121,166123],{"className":59,"code":166122,"language":61,"meta":62,"style":62},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[23,166124,166125,166136],{"__ignoreMap":62},[66,166126,166127,166129,166132,166134],{"class":68,"line":69},[66,166128,244],{"class":102},[66,166130,166131],{"class":76},"(student[",[66,166133,64458],{"class":356},[66,166135,6473],{"class":76},[66,166137,166138,166140,166143,166145],{"class":68,"line":80},[66,166139,244],{"class":102},[66,166141,166142],{"class":76},"(student.get(",[66,166144,64458],{"class":356},[66,166146,360],{"class":76},[19,166148,17191],{},[57,166150,166152],{"className":59,"code":166151,"language":61,"meta":62,"style":62},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[23,166153,166154,166167],{"__ignoreMap":62},[66,166155,166156,166158,166161,166164],{"class":68,"line":69},[66,166157,154619],{"class":76},[66,166159,166160],{"class":356},"\"address\"",[66,166162,166163],{"class":76},"]     ",[66,166165,166166],{"class":758},"# key不存在会报错\n",[66,166168,166169,166172,166174,166176],{"class":68,"line":80},[66,166170,166171],{"class":76},"student.get(",[66,166173,166160],{"class":356},[66,166175,15519],{"class":76},[66,166177,166178],{"class":758},"# key不存在返回None\n",[19,166180,166181],{},"设置默认值：",[57,166183,166185],{"className":59,"code":166184,"language":61,"meta":62,"style":62},"print(student.get(\"address\", \"未知\"))\n",[23,166186,166187],{"__ignoreMap":62},[66,166188,166189,166191,166193,166195,166197,166200],{"class":68,"line":69},[66,166190,244],{"class":102},[66,166192,166142],{"class":76},[66,166194,166160],{"class":356},[66,166196,307],{"class":76},[66,166198,166199],{"class":356},"\"未知\"",[66,166201,360],{"class":76},[19,166203,166204],{},"新增和修改：",[57,166206,166208],{"className":59,"code":166207,"language":61,"meta":62,"style":62},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[23,166209,166210,166223],{"__ignoreMap":62},[66,166211,166212,166214,166216,166218,166220],{"class":68,"line":69},[66,166213,154619],{"class":76},[66,166215,70903],{"class":356},[66,166217,6259],{"class":76},[66,166219,99],{"class":72},[66,166221,166222],{"class":102}," 19\n",[66,166224,166225,166227,166229,166231,166233],{"class":68,"line":80},[66,166226,154619],{"class":76},[66,166228,166160],{"class":356},[66,166230,6259],{"class":76},[66,166232,99],{"class":72},[66,166234,166235],{"class":356}," \"北京\"\n",[19,166237,166238],{},"删除：",[57,166240,166242],{"className":59,"code":166241,"language":61,"meta":62,"style":62},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[23,166243,166244,166257,166267],{"__ignoreMap":62},[66,166245,166246,166248,166250,166253,166255],{"class":68,"line":69},[66,166247,157109],{"class":76},[66,166249,99],{"class":72},[66,166251,166252],{"class":76}," student.pop(",[66,166254,153234],{"class":356},[66,166256,313],{"class":76},[66,166258,166259,166261,166263,166265],{"class":68,"line":80},[66,166260,164942],{"class":72},[66,166262,153909],{"class":76},[66,166264,70903],{"class":356},[66,166266,704],{"class":76},[66,166268,166269],{"class":68,"line":112},[66,166270,166271],{"class":76},"student.clear()\n",[14,166273,166275],{"id":166274},"_611-字典遍历","6.11 字典遍历",[19,166277,166278],{},"遍历 key：",[57,166280,166282],{"className":59,"code":166281,"language":61,"meta":62,"style":62},"for key in student:\n    print(key, student[key])\n",[23,166283,166284,166296],{"__ignoreMap":62},[66,166285,166286,166288,166291,166293],{"class":68,"line":69},[66,166287,502],{"class":72},[66,166289,166290],{"class":76}," key ",[66,166292,507],{"class":72},[66,166294,166295],{"class":76}," student:\n",[66,166297,166298,166300],{"class":68,"line":80},[66,166299,132],{"class":102},[66,166301,166302],{"class":76},"(key, student[key])\n",[19,166304,166305],{},"遍历 value：",[57,166307,166309],{"className":59,"code":166308,"language":61,"meta":62,"style":62},"for value in student.values():\n    print(value)\n",[23,166310,166311,166323],{"__ignoreMap":62},[66,166312,166313,166315,166318,166320],{"class":68,"line":69},[66,166314,502],{"class":72},[66,166316,166317],{"class":76}," value ",[66,166319,507],{"class":72},[66,166321,166322],{"class":76}," student.values():\n",[66,166324,166325,166327],{"class":68,"line":80},[66,166326,132],{"class":102},[66,166328,166329],{"class":76},"(value)\n",[19,166331,166332],{},"遍历 key 和 value：",[57,166334,166336],{"className":59,"code":166335,"language":61,"meta":62,"style":62},"for key, value in student.items():\n    print(key, value)\n",[23,166337,166338,166350],{"__ignoreMap":62},[66,166339,166340,166342,166345,166347],{"class":68,"line":69},[66,166341,502],{"class":72},[66,166343,166344],{"class":76}," key, value ",[66,166346,507],{"class":72},[66,166348,166349],{"class":76}," student.items():\n",[66,166351,166352,166354],{"class":68,"line":80},[66,166353,132],{"class":102},[66,166355,166356],{"class":76},"(key, value)\n",[14,166358,166360],{"id":166359},"_612-嵌套容器","6.12 嵌套容器",[19,166362,166363],{},"列表中保存字典，是项目中最常见的结构之一。",[57,166365,166367],{"className":59,"code":166366,"language":61,"meta":62,"style":62},"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",[23,166368,166369,166377,166405,166433,166461,166465,166469,166479],{"__ignoreMap":62},[66,166370,166371,166373,166375],{"class":68,"line":69},[66,166372,683],{"class":76},[66,166374,99],{"class":72},[66,166376,57228],{"class":76},[66,166378,166379,166381,166383,166385,166387,166389,166391,166393,166395,166397,166399,166401,166403],{"class":68,"line":80},[66,166380,150151],{"class":76},[66,166382,64458],{"class":356},[66,166384,53221],{"class":76},[66,166386,691],{"class":356},[66,166388,307],{"class":76},[66,166390,70903],{"class":356},[66,166392,53221],{"class":76},[66,166394,2629],{"class":102},[66,166396,307],{"class":76},[66,166398,153234],{"class":356},[66,166400,53221],{"class":76},[66,166402,2964],{"class":102},[66,166404,6746],{"class":76},[66,166406,166407,166409,166411,166413,166415,166417,166419,166421,166423,166425,166427,166429,166431],{"class":68,"line":112},[66,166408,150151],{"class":76},[66,166410,64458],{"class":356},[66,166412,53221],{"class":76},[66,166414,696],{"class":356},[66,166416,307],{"class":76},[66,166418,70903],{"class":356},[66,166420,53221],{"class":76},[66,166422,2604],{"class":102},[66,166424,307],{"class":76},[66,166426,153234],{"class":356},[66,166428,53221],{"class":76},[66,166430,2790],{"class":102},[66,166432,6746],{"class":76},[66,166434,166435,166437,166439,166441,166443,166445,166447,166449,166451,166453,166455,166457,166459],{"class":68,"line":129},[66,166436,150151],{"class":76},[66,166438,64458],{"class":356},[66,166440,53221],{"class":76},[66,166442,701],{"class":356},[66,166444,307],{"class":76},[66,166446,70903],{"class":356},[66,166448,53221],{"class":76},[66,166450,2654],{"class":102},[66,166452,307],{"class":76},[66,166454,153234],{"class":356},[66,166456,53221],{"class":76},[66,166458,2390],{"class":102},[66,166460,6746],{"class":76},[66,166462,166463],{"class":68,"line":138},[66,166464,704],{"class":76},[66,166466,166467],{"class":68,"line":227},[66,166468,109],{"emptyLinePlaceholder":108},[66,166470,166471,166473,166475,166477],{"class":68,"line":236},[66,166472,502],{"class":72},[66,166474,715],{"class":76},[66,166476,507],{"class":72},[66,166478,720],{"class":76},[66,166480,166481,166483,166485,166487,166490,166492],{"class":68,"line":241},[66,166482,132],{"class":102},[66,166484,166131],{"class":76},[66,166486,64458],{"class":356},[66,166488,166489],{"class":76},"], student[",[66,166491,153234],{"class":356},[66,166493,6473],{"class":76},[19,166495,166496],{},"统计平均分：",[57,166498,166500],{"className":59,"code":166499,"language":61,"meta":62,"style":62},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[23,166501,166502,166510,166514,166524,166536,166540,166555],{"__ignoreMap":62},[66,166503,166504,166506,166508],{"class":68,"line":69},[66,166505,192],{"class":76},[66,166507,99],{"class":72},[66,166509,197],{"class":102},[66,166511,166512],{"class":68,"line":80},[66,166513,109],{"emptyLinePlaceholder":108},[66,166515,166516,166518,166520,166522],{"class":68,"line":112},[66,166517,502],{"class":72},[66,166519,715],{"class":76},[66,166521,507],{"class":72},[66,166523,720],{"class":76},[66,166525,166526,166528,166530,166532,166534],{"class":68,"line":129},[66,166527,219],{"class":76},[66,166529,144],{"class":72},[66,166531,153909],{"class":76},[66,166533,153234],{"class":356},[66,166535,704],{"class":76},[66,166537,166538],{"class":68,"line":138},[66,166539,109],{"emptyLinePlaceholder":108},[66,166541,166542,166544,166546,166548,166550,166552],{"class":68,"line":227},[66,166543,165333],{"class":76},[66,166545,99],{"class":72},[66,166547,165338],{"class":76},[66,166549,2563],{"class":72},[66,166551,9142],{"class":102},[66,166553,166554],{"class":76},"(students)\n",[66,166556,166557,166559,166561,166563,166565,166567,166569,166571,166573,166575],{"class":68,"line":236},[66,166558,244],{"class":102},[66,166560,348],{"class":76},[66,166562,445],{"class":72},[66,166564,165356],{"class":356},[66,166566,451],{"class":102},[66,166568,165361],{"class":76},[66,166570,158909],{"class":72},[66,166572,457],{"class":102},[66,166574,1130],{"class":356},[66,166576,313],{"class":76},[19,166578,166579],{},"查找学生：",[57,166581,166583],{"className":59,"code":166582,"language":61,"meta":62,"style":62},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[23,166584,166585,166600,166604,166614,166628,166634,166638,166644],{"__ignoreMap":62},[66,166586,166587,166589,166591,166593,166595,166598],{"class":68,"line":69},[66,166588,1403],{"class":76},[66,166590,99],{"class":72},[66,166592,1532],{"class":102},[66,166594,348],{"class":76},[66,166596,166597],{"class":356},"\"请输入学生姓名:\"",[66,166599,313],{"class":76},[66,166601,166602],{"class":68,"line":80},[66,166603,109],{"emptyLinePlaceholder":108},[66,166605,166606,166608,166610,166612],{"class":68,"line":112},[66,166607,502],{"class":72},[66,166609,715],{"class":76},[66,166611,507],{"class":72},[66,166613,720],{"class":76},[66,166615,166616,166618,166620,166622,166624,166626],{"class":68,"line":129},[66,166617,380],{"class":72},[66,166619,153909],{"class":76},[66,166621,64458],{"class":356},[66,166623,6259],{"class":76},[66,166625,531],{"class":72},[66,166627,1435],{"class":76},[66,166629,166630,166632],{"class":68,"line":138},[66,166631,395],{"class":102},[66,166633,727],{"class":76},[66,166635,166636],{"class":68,"line":227},[66,166637,468],{"class":72},[66,166639,166640,166642],{"class":68,"line":236},[66,166641,1292],{"class":72},[66,166643,126],{"class":76},[66,166645,166646,166648,166650,166653],{"class":68,"line":241},[66,166647,132],{"class":102},[66,166649,348],{"class":76},[66,166651,166652],{"class":356},"\"没有找到\"",[66,166654,313],{"class":76},[14,166656,166658],{"id":166657},"_613-容器通用操作","6.13 容器通用操作",[19,166660,166661],{},"长度：",[57,166663,166665],{"className":59,"code":166664,"language":61,"meta":62,"style":62},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[23,166666,166667,166686,166696],{"__ignoreMap":62},[66,166668,166669,166671,166674,166676,166678,166680,166682,166684],{"class":68,"line":69},[66,166670,9169],{"class":102},[66,166672,166673],{"class":76},"([",[66,166675,304],{"class":102},[66,166677,307],{"class":76},[66,166679,795],{"class":102},[66,166681,307],{"class":76},[66,166683,1520],{"class":102},[66,166685,6473],{"class":76},[66,166687,166688,166690,166692,166694],{"class":68,"line":80},[66,166689,9169],{"class":102},[66,166691,348],{"class":76},[66,166693,157630],{"class":356},[66,166695,313],{"class":76},[66,166697,166698,166700,166703,166705,166707,166709],{"class":68,"line":112},[66,166699,9169],{"class":102},[66,166701,166702],{"class":76},"({",[66,166704,64458],{"class":356},[66,166706,53221],{"class":76},[66,166708,691],{"class":356},[66,166710,166711],{"class":76},"})\n",[19,166713,166714],{},"最大最小：",[57,166716,166718],{"className":59,"code":166717,"language":61,"meta":62,"style":62},"max([1, 2, 3])\nmin([1, 2, 3])\n",[23,166719,166720,166738],{"__ignoreMap":62},[66,166721,166722,166724,166726,166728,166730,166732,166734,166736],{"class":68,"line":69},[66,166723,7826],{"class":102},[66,166725,166673],{"class":76},[66,166727,304],{"class":102},[66,166729,307],{"class":76},[66,166731,795],{"class":102},[66,166733,307],{"class":76},[66,166735,1520],{"class":102},[66,166737,6473],{"class":76},[66,166739,166740,166743,166745,166747,166749,166751,166753,166755],{"class":68,"line":80},[66,166741,166742],{"class":102},"min",[66,166744,166673],{"class":76},[66,166746,304],{"class":102},[66,166748,307],{"class":76},[66,166750,795],{"class":102},[66,166752,307],{"class":76},[66,166754,1520],{"class":102},[66,166756,6473],{"class":76},[19,166758,166759],{},"求和：",[57,166761,166763],{"className":59,"code":166762,"language":61,"meta":62,"style":62},"sum([1, 2, 3])\n",[23,166764,166765],{"__ignoreMap":62},[66,166766,166767,166770,166772,166774,166776,166778,166780,166782],{"class":68,"line":69},[66,166768,166769],{"class":102},"sum",[66,166771,166673],{"class":76},[66,166773,304],{"class":102},[66,166775,307],{"class":76},[66,166777,795],{"class":102},[66,166779,307],{"class":76},[66,166781,1520],{"class":102},[66,166783,6473],{"class":76},[19,166785,165030],{},[57,166787,166789],{"className":59,"code":166788,"language":61,"meta":62,"style":62},"sorted([3, 1, 2])\n",[23,166790,166791],{"__ignoreMap":62},[66,166792,166793,166796,166798,166800,166802,166804,166806,166808],{"class":68,"line":69},[66,166794,166795],{"class":102},"sorted",[66,166797,166673],{"class":76},[66,166799,1520],{"class":102},[66,166801,307],{"class":76},[66,166803,304],{"class":102},[66,166805,307],{"class":76},[66,166807,795],{"class":102},[66,166809,6473],{"class":76},[19,166811,166812],{},"类型转换：",[57,166814,166816],{"className":59,"code":166815,"language":61,"meta":62,"style":62},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[23,166817,166818,166828,166846],{"__ignoreMap":62},[66,166819,166820,166822,166824,166826],{"class":68,"line":69},[66,166821,155822],{"class":102},[66,166823,348],{"class":76},[66,166825,157630],{"class":356},[66,166827,313],{"class":76},[66,166829,166830,166832,166834,166836,166838,166840,166842,166844],{"class":68,"line":80},[66,166831,157016],{"class":102},[66,166833,166673],{"class":76},[66,166835,304],{"class":102},[66,166837,307],{"class":76},[66,166839,795],{"class":102},[66,166841,307],{"class":76},[66,166843,1520],{"class":102},[66,166845,6473],{"class":76},[66,166847,166848,166850,166852,166854,166856,166858,166860,166862,166864,166866],{"class":68,"line":112},[66,166849,157041],{"class":102},[66,166851,166673],{"class":76},[66,166853,304],{"class":102},[66,166855,307],{"class":76},[66,166857,304],{"class":102},[66,166859,307],{"class":76},[66,166861,795],{"class":102},[66,166863,307],{"class":76},[66,166865,1520],{"class":102},[66,166867,6473],{"class":76},[19,166869,166870],{},"成员判断：",[57,166872,166874],{"className":59,"code":166873,"language":61,"meta":62,"style":62},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[23,166875,166876,166893,166917],{"__ignoreMap":62},[66,166877,166878,166880,166882,166885,166888,166891],{"class":68,"line":69},[66,166879,244],{"class":102},[66,166881,348],{"class":76},[66,166883,166884],{"class":356},"\"a\"",[66,166886,166887],{"class":72}," in",[66,166889,166890],{"class":356}," \"abc\"",[66,166892,313],{"class":76},[66,166894,166895,166897,166899,166901,166903,166905,166907,166909,166911,166913,166915],{"class":68,"line":80},[66,166896,244],{"class":102},[66,166898,348],{"class":76},[66,166900,304],{"class":102},[66,166902,166887],{"class":72},[66,166904,688],{"class":76},[66,166906,304],{"class":102},[66,166908,307],{"class":76},[66,166910,795],{"class":102},[66,166912,307],{"class":76},[66,166914,1520],{"class":102},[66,166916,6473],{"class":76},[66,166918,166919,166921,166923,166925,166927,166929,166931,166933,166935],{"class":68,"line":112},[66,166920,244],{"class":102},[66,166922,348],{"class":76},[66,166924,64458],{"class":356},[66,166926,166887],{"class":72},[66,166928,6264],{"class":76},[66,166930,64458],{"class":356},[66,166932,53221],{"class":76},[66,166934,691],{"class":356},[66,166936,166711],{"class":76},[14,166938,166940],{"id":166939},"_614-推导式","6.14 推导式",[19,166942,166943],{},"推导式用于快速生成容器。",[19,166945,166946],{},"列表推导式：",[57,166948,166950],{"className":59,"code":166949,"language":61,"meta":62,"style":62},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[23,166951,166952,166979],{"__ignoreMap":62},[66,166953,166954,166956,166958,166961,166963,166965,166967,166969,166971,166973,166975,166977],{"class":68,"line":69},[66,166955,165659],{"class":76},[66,166957,99],{"class":72},[66,166959,166960],{"class":76}," [i ",[66,166962,502],{"class":72},[66,166964,117],{"class":76},[66,166966,507],{"class":72},[66,166968,510],{"class":102},[66,166970,348],{"class":76},[66,166972,304],{"class":102},[66,166974,307],{"class":76},[66,166976,519],{"class":102},[66,166978,99075],{"class":76},[66,166980,166981,166983],{"class":68,"line":80},[66,166982,244],{"class":102},[66,166984,165875],{"class":76},[19,166986,166987],{},"带条件：",[57,166989,166991],{"className":59,"code":166990,"language":61,"meta":62,"style":62},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[23,166992,166993,167034],{"__ignoreMap":62},[66,166994,166995,166998,167000,167002,167004,167006,167008,167010,167012,167014,167016,167018,167020,167022,167024,167026,167028,167030,167032],{"class":68,"line":69},[66,166996,166997],{"class":76},"even_nums ",[66,166999,99],{"class":72},[66,167001,166960],{"class":76},[66,167003,502],{"class":72},[66,167005,117],{"class":76},[66,167007,507],{"class":72},[66,167009,510],{"class":102},[66,167011,348],{"class":76},[66,167013,304],{"class":102},[66,167015,307],{"class":76},[66,167017,884],{"class":102},[66,167019,15519],{"class":76},[66,167021,3373],{"class":72},[66,167023,117],{"class":76},[66,167025,953],{"class":72},[66,167027,956],{"class":102},[66,167029,959],{"class":72},[66,167031,962],{"class":102},[66,167033,704],{"class":76},[66,167035,167036,167038],{"class":68,"line":80},[66,167037,244],{"class":102},[66,167039,167040],{"class":76},"(even_nums)\n",[19,167042,167043],{},"字典推导式：",[57,167045,167047],{"className":59,"code":167046,"language":61,"meta":62,"style":62},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[23,167048,167049,167083],{"__ignoreMap":62},[66,167050,167051,167054,167056,167059,167061,167063,167066,167068,167070,167072,167074,167076,167078,167080],{"class":68,"line":69},[66,167052,167053],{"class":76},"squares ",[66,167055,99],{"class":72},[66,167057,167058],{"class":76}," {i: i ",[66,167060,12467],{"class":72},[66,167062,956],{"class":102},[66,167064,167065],{"class":72}," for",[66,167067,117],{"class":76},[66,167069,507],{"class":72},[66,167071,510],{"class":102},[66,167073,348],{"class":76},[66,167075,304],{"class":102},[66,167077,307],{"class":76},[66,167079,519],{"class":102},[66,167081,167082],{"class":76},")}\n",[66,167084,167085,167087],{"class":68,"line":80},[66,167086,244],{"class":102},[66,167088,167089],{"class":76},"(squares)\n",[19,167091,167092],{},"集合推导式：",[57,167094,167096],{"className":59,"code":167095,"language":61,"meta":62,"style":62},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[23,167097,167098,167119],{"__ignoreMap":62},[66,167099,167100,167103,167105,167108,167110,167112,167114,167117],{"class":68,"line":69},[66,167101,167102],{"class":76},"chars ",[66,167104,99],{"class":72},[66,167106,167107],{"class":76}," {ch ",[66,167109,502],{"class":72},[66,167111,658],{"class":76},[66,167113,507],{"class":72},[66,167115,167116],{"class":356}," \"hello\"",[66,167118,3407],{"class":76},[66,167120,167121,167123],{"class":68,"line":80},[66,167122,244],{"class":102},[66,167124,167125],{"class":76},"(chars)\n",[19,167127,167128],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,167130,167132],{"id":167131},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[57,167134,167136],{"className":59,"code":167135,"language":61,"meta":62,"style":62},"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",[23,167137,167138,167146,167166,167186,167206,167226,167230,167234,167242,167256,167265,167269,167279,167291,167295,167315,167324,167328,167344,167349,167353,167367,167371,167393,167429],{"__ignoreMap":62},[66,167139,167140,167142,167144],{"class":68,"line":69},[66,167141,683],{"class":76},[66,167143,99],{"class":72},[66,167145,57228],{"class":76},[66,167147,167148,167150,167152,167154,167156,167158,167160,167162,167164],{"class":68,"line":80},[66,167149,150151],{"class":76},[66,167151,64458],{"class":356},[66,167153,53221],{"class":76},[66,167155,691],{"class":356},[66,167157,307],{"class":76},[66,167159,153234],{"class":356},[66,167161,53221],{"class":76},[66,167163,2964],{"class":102},[66,167165,6746],{"class":76},[66,167167,167168,167170,167172,167174,167176,167178,167180,167182,167184],{"class":68,"line":112},[66,167169,150151],{"class":76},[66,167171,64458],{"class":356},[66,167173,53221],{"class":76},[66,167175,696],{"class":356},[66,167177,307],{"class":76},[66,167179,153234],{"class":356},[66,167181,53221],{"class":76},[66,167183,2790],{"class":102},[66,167185,6746],{"class":76},[66,167187,167188,167190,167192,167194,167196,167198,167200,167202,167204],{"class":68,"line":129},[66,167189,150151],{"class":76},[66,167191,64458],{"class":356},[66,167193,53221],{"class":76},[66,167195,701],{"class":356},[66,167197,307],{"class":76},[66,167199,153234],{"class":356},[66,167201,53221],{"class":76},[66,167203,2390],{"class":102},[66,167205,6746],{"class":76},[66,167207,167208,167210,167212,167214,167216,167218,167220,167222,167224],{"class":68,"line":138},[66,167209,150151],{"class":76},[66,167211,64458],{"class":356},[66,167213,53221],{"class":76},[66,167215,164869],{"class":356},[66,167217,307],{"class":76},[66,167219,153234],{"class":356},[66,167221,53221],{"class":76},[66,167223,2861],{"class":102},[66,167225,6746],{"class":76},[66,167227,167228],{"class":68,"line":227},[66,167229,704],{"class":76},[66,167231,167232],{"class":68,"line":236},[66,167233,109],{"emptyLinePlaceholder":108},[66,167235,167236,167238,167240],{"class":68,"line":241},[66,167237,192],{"class":76},[66,167239,99],{"class":72},[66,167241,197],{"class":102},[66,167243,167244,167247,167249,167252,167254],{"class":68,"line":372},[66,167245,167246],{"class":76},"max_student ",[66,167248,99],{"class":72},[66,167250,167251],{"class":76}," students[",[66,167253,2183],{"class":102},[66,167255,704],{"class":76},[66,167257,167258,167261,167263],{"class":68,"line":377},[66,167259,167260],{"class":76},"passed ",[66,167262,99],{"class":72},[66,167264,53622],{"class":76},[66,167266,167267],{"class":68,"line":392},[66,167268,109],{"emptyLinePlaceholder":108},[66,167270,167271,167273,167275,167277],{"class":68,"line":405},[66,167272,502],{"class":72},[66,167274,715],{"class":76},[66,167276,507],{"class":72},[66,167278,720],{"class":76},[66,167280,167281,167283,167285,167287,167289],{"class":68,"line":418},[66,167282,219],{"class":76},[66,167284,144],{"class":72},[66,167286,153909],{"class":76},[66,167288,153234],{"class":356},[66,167290,704],{"class":76},[66,167292,167293],{"class":68,"line":430},[66,167294,109],{"emptyLinePlaceholder":108},[66,167296,167297,167299,167301,167303,167305,167307,167310,167312],{"class":68,"line":438},[66,167298,380],{"class":72},[66,167300,153909],{"class":76},[66,167302,153234],{"class":356},[66,167304,6259],{"class":76},[66,167306,386],{"class":72},[66,167308,167309],{"class":76}," max_student[",[66,167311,153234],{"class":356},[66,167313,167314],{"class":76},"]:\n",[66,167316,167317,167320,167322],{"class":68,"line":465},[66,167318,167319],{"class":76},"        max_student ",[66,167321,99],{"class":72},[66,167323,153925],{"class":76},[66,167325,167326],{"class":68,"line":1805},[66,167327,109],{"emptyLinePlaceholder":108},[66,167329,167330,167332,167334,167336,167338,167340,167342],{"class":68,"line":1817},[66,167331,380],{"class":72},[66,167333,153909],{"class":76},[66,167335,153234],{"class":356},[66,167337,6259],{"class":76},[66,167339,3540],{"class":72},[66,167341,159585],{"class":102},[66,167343,126],{"class":76},[66,167345,167346],{"class":68,"line":1822},[66,167347,167348],{"class":76},"        passed.append(student)\n",[66,167350,167351],{"class":68,"line":1829},[66,167352,109],{"emptyLinePlaceholder":108},[66,167354,167355,167357,167359,167361,167363,167365],{"class":68,"line":3529},[66,167356,165333],{"class":76},[66,167358,99],{"class":72},[66,167360,165338],{"class":76},[66,167362,2563],{"class":72},[66,167364,9142],{"class":102},[66,167366,166554],{"class":76},[66,167368,167369],{"class":68,"line":3557},[66,167370,109],{"emptyLinePlaceholder":108},[66,167372,167373,167375,167377,167379,167381,167383,167385,167387,167389,167391],{"class":68,"line":3562},[66,167374,244],{"class":102},[66,167376,348],{"class":76},[66,167378,445],{"class":72},[66,167380,165356],{"class":356},[66,167382,451],{"class":102},[66,167384,165361],{"class":76},[66,167386,158909],{"class":72},[66,167388,457],{"class":102},[66,167390,1130],{"class":356},[66,167392,313],{"class":76},[66,167394,167395,167397,167399,167401,167404,167406,167409,167411,167413,167415,167417,167419,167421,167423,167425,167427],{"class":68,"line":3579},[66,167396,244],{"class":102},[66,167398,348],{"class":76},[66,167400,445],{"class":72},[66,167402,167403],{"class":356},"\"最高分学生:",[66,167405,451],{"class":102},[66,167407,167408],{"class":76},"max_student[",[66,167410,154642],{"class":356},[66,167412,2917],{"class":76},[66,167414,457],{"class":102},[66,167416,6264],{"class":102},[66,167418,167408],{"class":76},[66,167420,154680],{"class":356},[66,167422,2917],{"class":76},[66,167424,457],{"class":102},[66,167426,1130],{"class":356},[66,167428,313],{"class":76},[66,167430,167431,167433,167435,167437,167440,167443,167446,167448,167450],{"class":68,"line":3584},[66,167432,244],{"class":102},[66,167434,348],{"class":76},[66,167436,445],{"class":72},[66,167438,167439],{"class":356},"\"及格人数:",[66,167441,167442],{"class":102},"{len",[66,167444,167445],{"class":76},"(passed)",[66,167447,457],{"class":102},[66,167449,1130],{"class":356},[66,167451,313],{"class":76},[14,167453,167455],{"id":167454},"_616-易错点","6.16 易错点",[31,167457,167458,167461,167464,167467,167473,167482],{},[34,167459,167460],{},"列表可变，元组和字符串不可变。",[34,167462,167463],{},"切片结束位置不包含。",[34,167465,167466],{},"字典通过 key 取值，不是通过索引。",[34,167468,167469,167470,158],{},"空集合要用 ",[23,167471,167472],{},"set()",[34,167474,106139,167475,167478,167479,158],{},[23,167476,167477],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[23,167480,167481],{},"get()",[34,167483,167484],{},"嵌套容器要先看清楚每一层是什么类型。",[14,167486,167488],{"id":167487},"_617-本章练习","6.17 本章练习",[31,167490,167491,167494,167497,167500,167503],{},[34,167492,167493],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[34,167495,167496],{},"输入一句话，统计每个字符出现次数。",[34,167498,167499],{},"使用集合去除列表中的重复元素。",[34,167501,167502],{},"使用字典保存一个学生的信息，并实现修改成绩。",[34,167504,167505],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[1903,167507,167508],{},"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":62,"searchDepth":80,"depth":80,"links":167510},[167511,167512,167513,167514,167515,167516,167517,167518,167519,167520,167521,167522,167523,167524,167525,167526,167527],{"id":164491,"depth":80,"text":164492},{"id":164608,"depth":80,"text":164609},{"id":164698,"depth":80,"text":164699},{"id":164822,"depth":80,"text":164823},{"id":165185,"depth":80,"text":165186},{"id":165372,"depth":80,"text":165373},{"id":165491,"depth":80,"text":165492},{"id":165633,"depth":80,"text":165634},{"id":165820,"depth":80,"text":165821},{"id":166064,"depth":80,"text":166065},{"id":166274,"depth":80,"text":166275},{"id":166359,"depth":80,"text":166360},{"id":166657,"depth":80,"text":166658},{"id":166939,"depth":80,"text":166940},{"id":167131,"depth":80,"text":167132},{"id":167454,"depth":80,"text":167455},{"id":167487,"depth":80,"text":167488},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":164483,"description":1926},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":167534,"title":167535,"body":167536,"description":1926,"extension":1927,"meta":169708,"navigation":108,"path":169709,"seo":169710,"stem":169711,"__hash__":169712},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":167537,"toc":169683},[167538,167541,167545,167548,167628,167631,167652,167655,167659,167662,167724,167727,167744,167748,167751,167796,167798,167806,167810,167813,167895,167898,167901,167926,167929,167952,167956,167959,167961,168023,168026,168028,168079,168083,168087,168093,168198,168202,168208,168279,168283,168286,168354,168357,168437,168441,168447,168483,168486,168489,168599,168605,168609,168612,168684,168687,168691,168695,168700,168762,168766,168771,168839,168843,168848,168964,168968,168971,169051,169054,169058,169061,169165,169167,169182,169185,169189,169327,169335,169339,169341,169352,169354,169612,169616,169648,169652,169680],[10,167539,167535],{"id":167540},"_7-函数进阶",[14,167542,167544],{"id":167543},"_71-多返回值","7.1 多返回值",[19,167546,167547],{},"Python 函数可以返回多个值，本质上返回的是元组。",[57,167549,167551],{"className":59,"code":167550,"language":61,"meta":62,"style":62},"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",[23,167552,167553,167562,167570,167578,167587,167594,167598,167602,167611,167617],{"__ignoreMap":62},[66,167554,167555,167557,167560],{"class":68,"line":69},[66,167556,33739],{"class":72},[66,167558,167559],{"class":3793}," get_info",[66,167561,33745],{"class":76},[66,167563,167564,167566,167568],{"class":68,"line":80},[66,167565,154130],{"class":76},[66,167567,99],{"class":72},[66,167569,151118],{"class":356},[66,167571,167572,167574,167576],{"class":68,"line":112},[66,167573,154146],{"class":76},[66,167575,99],{"class":72},[66,167577,148318],{"class":102},[66,167579,167580,167582,167584],{"class":68,"line":129},[66,167581,154161],{"class":76},[66,167583,99],{"class":72},[66,167585,167586],{"class":102}," 95\n",[66,167588,167589,167591],{"class":68,"line":138},[66,167590,5907],{"class":72},[66,167592,167593],{"class":76}," name, age, score\n",[66,167595,167596],{"class":68,"line":227},[66,167597,109],{"emptyLinePlaceholder":108},[66,167599,167600],{"class":68,"line":236},[66,167601,109],{"emptyLinePlaceholder":108},[66,167603,167604,167606,167608],{"class":68,"line":241},[66,167605,162865],{"class":76},[66,167607,99],{"class":72},[66,167609,167610],{"class":76}," get_info()\n",[66,167612,167613,167615],{"class":68,"line":372},[66,167614,244],{"class":102},[66,167616,78364],{"class":76},[66,167618,167619,167621,167623,167625],{"class":68,"line":377},[66,167620,244],{"class":102},[66,167622,348],{"class":76},[66,167624,104880],{"class":102},[66,167626,167627],{"class":76},"(result))\n",[19,167629,167630],{},"可以直接解包：",[57,167632,167634],{"className":59,"code":167633,"language":61,"meta":62,"style":62},"name, age, score = get_info()\nprint(name, age, score)\n",[23,167635,167636,167645],{"__ignoreMap":62},[66,167637,167638,167641,167643],{"class":68,"line":69},[66,167639,167640],{"class":76},"name, age, score ",[66,167642,99],{"class":72},[66,167644,167610],{"class":76},[66,167646,167647,167649],{"class":68,"line":80},[66,167648,244],{"class":102},[66,167650,167651],{"class":76},"(name, age, score)\n",[19,167653,167654],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,167656,167658],{"id":167657},"_72-位置参数","7.2 位置参数",[19,167660,167661],{},"位置参数按顺序传递。",[57,167663,167665],{"className":59,"code":167664,"language":61,"meta":62,"style":62},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[23,167666,167667,167675,167703,167707,167711],{"__ignoreMap":62},[66,167668,167669,167671,167673],{"class":68,"line":69},[66,167670,33739],{"class":72},[66,167672,151137],{"class":3793},[66,167674,151140],{"class":76},[66,167676,167677,167679,167681,167683,167685,167687,167689,167691,167693,167695,167697,167699,167701],{"class":68,"line":80},[66,167678,132],{"class":102},[66,167680,348],{"class":76},[66,167682,445],{"class":72},[66,167684,151151],{"class":356},[66,167686,451],{"class":102},[66,167688,81588],{"class":76},[66,167690,457],{"class":102},[66,167692,151160],{"class":356},[66,167694,451],{"class":102},[66,167696,72000],{"class":76},[66,167698,457],{"class":102},[66,167700,151169],{"class":356},[66,167702,313],{"class":76},[66,167704,167705],{"class":68,"line":112},[66,167706,109],{"emptyLinePlaceholder":108},[66,167708,167709],{"class":68,"line":129},[66,167710,109],{"emptyLinePlaceholder":108},[66,167712,167713,167716,167718,167720,167722],{"class":68,"line":138},[66,167714,167715],{"class":76},"introduce(",[66,167717,691],{"class":356},[66,167719,307],{"class":76},[66,167721,2629],{"class":102},[66,167723,313],{"class":76},[19,167725,167726],{},"顺序错了就会得到错误含义：",[57,167728,167730],{"className":59,"code":167729,"language":61,"meta":62,"style":62},"introduce(18, \"小明\")\n",[23,167731,167732],{"__ignoreMap":62},[66,167733,167734,167736,167738,167740,167742],{"class":68,"line":69},[66,167735,167715],{"class":76},[66,167737,2629],{"class":102},[66,167739,307],{"class":76},[66,167741,691],{"class":356},[66,167743,313],{"class":76},[14,167745,167747],{"id":167746},"_73-关键字参数","7.3 关键字参数",[19,167749,167750],{},"关键字参数按参数名传递。",[57,167752,167754],{"className":59,"code":167753,"language":61,"meta":62,"style":62},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[23,167755,167756,167776],{"__ignoreMap":62},[66,167757,167758,167760,167762,167764,167766,167768,167770,167772,167774],{"class":68,"line":69},[66,167759,167715],{"class":76},[66,167761,81588],{"class":1234},[66,167763,99],{"class":72},[66,167765,691],{"class":356},[66,167767,307],{"class":76},[66,167769,72000],{"class":1234},[66,167771,99],{"class":72},[66,167773,2629],{"class":102},[66,167775,313],{"class":76},[66,167777,167778,167780,167782,167784,167786,167788,167790,167792,167794],{"class":68,"line":80},[66,167779,167715],{"class":76},[66,167781,72000],{"class":1234},[66,167783,99],{"class":72},[66,167785,2629],{"class":102},[66,167787,307],{"class":76},[66,167789,81588],{"class":1234},[66,167791,99],{"class":72},[66,167793,691],{"class":356},[66,167795,313],{"class":76},[19,167797,119705],{},[31,167799,167800,167803],{},[34,167801,167802],{},"顺序不容易错。",[34,167804,167805],{},"调用时可读性更强。",[14,167807,167809],{"id":167808},"_74-默认参数","7.4 默认参数",[19,167811,167812],{},"默认参数给参数设置默认值。",[57,167814,167816],{"className":59,"code":167815,"language":61,"meta":62,"style":62},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[23,167817,167818,167834,167864,167868,167872,167882],{"__ignoreMap":62},[66,167819,167820,167822,167824,167827,167829,167832],{"class":68,"line":69},[66,167821,33739],{"class":72},[66,167823,123864],{"class":3793},[66,167825,167826],{"class":76},"(host, port",[66,167828,99],{"class":72},[66,167830,167831],{"class":102},"3306",[66,167833,522],{"class":76},[66,167835,167836,167838,167840,167842,167845,167847,167849,167851,167853,167855,167858,167860,167862],{"class":68,"line":80},[66,167837,132],{"class":102},[66,167839,348],{"class":76},[66,167841,445],{"class":72},[66,167843,167844],{"class":356},"\"连接",[66,167846,451],{"class":102},[66,167848,29196],{"class":76},[66,167850,457],{"class":102},[66,167852,2838],{"class":356},[66,167854,451],{"class":102},[66,167856,167857],{"class":76},"port",[66,167859,457],{"class":102},[66,167861,1130],{"class":356},[66,167863,313],{"class":76},[66,167865,167866],{"class":68,"line":112},[66,167867,109],{"emptyLinePlaceholder":108},[66,167869,167870],{"class":68,"line":129},[66,167871,109],{"emptyLinePlaceholder":108},[66,167873,167874,167877,167880],{"class":68,"line":138},[66,167875,167876],{"class":76},"connect(",[66,167878,167879],{"class":356},"\"localhost\"",[66,167881,313],{"class":76},[66,167883,167884,167886,167888,167890,167893],{"class":68,"line":227},[66,167885,167876],{"class":76},[66,167887,167879],{"class":356},[66,167889,307],{"class":76},[66,167891,167892],{"class":102},"6379",[66,167894,313],{"class":76},[19,167896,167897],{},"注意：默认参数必须放在非默认参数后面。",[19,167899,167900],{},"错误：",[57,167902,167904],{"className":59,"code":167903,"language":61,"meta":62,"style":62},"def connect(port=3306, host):\n    pass\n",[23,167905,167906,167922],{"__ignoreMap":62},[66,167907,167908,167910,167912,167915,167917,167919],{"class":68,"line":69},[66,167909,33739],{"class":72},[66,167911,123864],{"class":3793},[66,167913,167914],{"class":76},"(port",[66,167916,99],{"class":72},[66,167918,167831],{"class":102},[66,167920,167921],{"class":76},", host):\n",[66,167923,167924],{"class":68,"line":80},[66,167925,151302],{"class":72},[19,167927,167928],{},"正确：",[57,167930,167932],{"className":59,"code":167931,"language":61,"meta":62,"style":62},"def connect(host, port=3306):\n    pass\n",[23,167933,167934,167948],{"__ignoreMap":62},[66,167935,167936,167938,167940,167942,167944,167946],{"class":68,"line":69},[66,167937,33739],{"class":72},[66,167939,123864],{"class":3793},[66,167941,167826],{"class":76},[66,167943,99],{"class":72},[66,167945,167831],{"class":102},[66,167947,522],{"class":76},[66,167949,167950],{"class":68,"line":80},[66,167951,151302],{"class":72},[14,167953,167955],{"id":167954},"_75-默认参数的坑","7.5 默认参数的坑",[19,167957,167958],{},"不要使用可变对象作为默认参数。",[19,167960,159371],{},[57,167962,167964],{"className":59,"code":167963,"language":61,"meta":62,"style":62},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[23,167965,167966,167981,167986,167993,167997,168001,168012],{"__ignoreMap":62},[66,167967,167968,167970,167973,167976,167978],{"class":68,"line":69},[66,167969,33739],{"class":72},[66,167971,167972],{"class":3793}," add_item",[66,167974,167975],{"class":76},"(item, items",[66,167977,99],{"class":72},[66,167979,167980],{"class":76},"[]):\n",[66,167982,167983],{"class":68,"line":80},[66,167984,167985],{"class":76},"    items.append(item)\n",[66,167987,167988,167990],{"class":68,"line":112},[66,167989,5907],{"class":72},[66,167991,167992],{"class":76}," items\n",[66,167994,167995],{"class":68,"line":129},[66,167996,109],{"emptyLinePlaceholder":108},[66,167998,167999],{"class":68,"line":138},[66,168000,109],{"emptyLinePlaceholder":108},[66,168002,168003,168005,168008,168010],{"class":68,"line":227},[66,168004,244],{"class":102},[66,168006,168007],{"class":76},"(add_item(",[66,168009,166884],{"class":356},[66,168011,360],{"class":76},[66,168013,168014,168016,168018,168021],{"class":68,"line":236},[66,168015,244],{"class":102},[66,168017,168007],{"class":76},[66,168019,168020],{"class":356},"\"b\"",[66,168022,360],{"class":76},[19,168024,168025],{},"第二次调用会复用第一次的列表。",[19,168027,157638],{},[57,168029,168031],{"className":59,"code":168030,"language":61,"meta":62,"style":62},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[23,168032,168033,168047,168060,168069,168073],{"__ignoreMap":62},[66,168034,168035,168037,168039,168041,168043,168045],{"class":68,"line":69},[66,168036,33739],{"class":72},[66,168038,167972],{"class":3793},[66,168040,167975],{"class":76},[66,168042,99],{"class":72},[66,168044,97461],{"class":102},[66,168046,522],{"class":76},[66,168048,168049,168051,168054,168056,168058],{"class":68,"line":80},[66,168050,380],{"class":72},[66,168052,168053],{"class":76}," items ",[66,168055,40715],{"class":72},[66,168057,40721],{"class":102},[66,168059,126],{"class":76},[66,168061,168062,168065,168067],{"class":68,"line":112},[66,168063,168064],{"class":76},"        items ",[66,168066,99],{"class":72},[66,168068,53622],{"class":76},[66,168070,168071],{"class":68,"line":129},[66,168072,167985],{"class":76},[66,168074,168075,168077],{"class":68,"line":138},[66,168076,5907],{"class":72},[66,168078,167992],{"class":76},[14,168080,168082],{"id":168081},"_76-不定长参数","7.6 不定长参数",[484,168084,168086],{"id":168085},"_761-args","7.6.1 *args",[19,168088,168089,168092],{},[23,168090,168091],{},"*args"," 接收任意数量的位置参数，得到元组。",[57,168094,168096],{"className":59,"code":168095,"language":61,"meta":62,"style":62},"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",[23,168097,168098,168111,168119,168130,168139,168145,168149,168153,168172],{"__ignoreMap":62},[66,168099,168100,168102,168104,168106,168108],{"class":68,"line":69},[66,168101,33739],{"class":72},[66,168103,7022],{"class":3793},[66,168105,348],{"class":76},[66,168107,1208],{"class":72},[66,168109,168110],{"class":76},"args):\n",[66,168112,168113,168115,168117],{"class":68,"line":80},[66,168114,219],{"class":76},[66,168116,99],{"class":72},[66,168118,197],{"class":102},[66,168120,168121,168123,168125,168127],{"class":68,"line":112},[66,168122,1083],{"class":72},[66,168124,157930],{"class":76},[66,168126,507],{"class":72},[66,168128,168129],{"class":76}," args:\n",[66,168131,168132,168134,168136],{"class":68,"line":129},[66,168133,969],{"class":76},[66,168135,144],{"class":72},[66,168137,168138],{"class":76}," num\n",[66,168140,168141,168143],{"class":68,"line":138},[66,168142,5907],{"class":72},[66,168144,163846],{"class":76},[66,168146,168147],{"class":68,"line":227},[66,168148,109],{"emptyLinePlaceholder":108},[66,168150,168151],{"class":68,"line":236},[66,168152,109],{"emptyLinePlaceholder":108},[66,168154,168155,168157,168160,168162,168164,168166,168168,168170],{"class":68,"line":241},[66,168156,244],{"class":102},[66,168158,168159],{"class":76},"(add(",[66,168161,304],{"class":102},[66,168163,307],{"class":76},[66,168165,795],{"class":102},[66,168167,307],{"class":76},[66,168169,1520],{"class":102},[66,168171,360],{"class":76},[66,168173,168174,168176,168178,168180,168182,168184,168186,168188,168190,168192,168194,168196],{"class":68,"line":372},[66,168175,244],{"class":102},[66,168177,168159],{"class":76},[66,168179,304],{"class":102},[66,168181,307],{"class":76},[66,168183,795],{"class":102},[66,168185,307],{"class":76},[66,168187,1520],{"class":102},[66,168189,307],{"class":76},[66,168191,1076],{"class":102},[66,168193,307],{"class":76},[66,168195,752],{"class":102},[66,168197,360],{"class":76},[484,168199,168201],{"id":168200},"_762-kwargs","7.6.2 **kwargs",[19,168203,168204,168207],{},[23,168205,168206],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[57,168209,168211],{"className":59,"code":168210,"language":61,"meta":62,"style":62},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[23,168212,168213,168226,168237,168243,168247,168251],{"__ignoreMap":62},[66,168214,168215,168217,168219,168221,168223],{"class":68,"line":69},[66,168216,33739],{"class":72},[66,168218,163504],{"class":3793},[66,168220,348],{"class":76},[66,168222,12467],{"class":72},[66,168224,168225],{"class":76},"kwargs):\n",[66,168227,168228,168230,168232,168234],{"class":68,"line":80},[66,168229,1083],{"class":72},[66,168231,166344],{"class":76},[66,168233,507],{"class":72},[66,168235,168236],{"class":76}," kwargs.items():\n",[66,168238,168239,168241],{"class":68,"line":112},[66,168240,395],{"class":102},[66,168242,166356],{"class":76},[66,168244,168245],{"class":68,"line":129},[66,168246,109],{"emptyLinePlaceholder":108},[66,168248,168249],{"class":68,"line":138},[66,168250,109],{"emptyLinePlaceholder":108},[66,168252,168253,168255,168257,168259,168261,168263,168265,168267,168269,168271,168273,168275,168277],{"class":68,"line":227},[66,168254,163569],{"class":76},[66,168256,81588],{"class":1234},[66,168258,99],{"class":72},[66,168260,691],{"class":356},[66,168262,307],{"class":76},[66,168264,72000],{"class":1234},[66,168266,99],{"class":72},[66,168268,2629],{"class":102},[66,168270,307],{"class":76},[66,168272,72051],{"class":1234},[66,168274,99],{"class":72},[66,168276,71048],{"class":356},[66,168278,313],{"class":76},[14,168280,168282],{"id":168281},"_77-参数解包","7.7 参数解包",[19,168284,168285],{},"列表或元组解包为位置参数：",[57,168287,168289],{"className":59,"code":168288,"language":61,"meta":62,"style":62},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[23,168290,168291,168300,168315,168319,168323,168343],{"__ignoreMap":62},[66,168292,168293,168295,168297],{"class":68,"line":69},[66,168294,33739],{"class":72},[66,168296,7022],{"class":3793},[66,168298,168299],{"class":76},"(a, b, c):\n",[66,168301,168302,168304,168306,168308,168310,168312],{"class":68,"line":80},[66,168303,5907],{"class":72},[66,168305,12675],{"class":76},[66,168307,1184],{"class":72},[66,168309,12688],{"class":76},[66,168311,1184],{"class":72},[66,168313,168314],{"class":76}," c\n",[66,168316,168317],{"class":68,"line":112},[66,168318,109],{"emptyLinePlaceholder":108},[66,168320,168321],{"class":68,"line":129},[66,168322,109],{"emptyLinePlaceholder":108},[66,168324,168325,168327,168329,168331,168333,168335,168337,168339,168341],{"class":68,"line":138},[66,168326,165659],{"class":76},[66,168328,99],{"class":72},[66,168330,688],{"class":76},[66,168332,304],{"class":102},[66,168334,307],{"class":76},[66,168336,795],{"class":102},[66,168338,307],{"class":76},[66,168340,1520],{"class":102},[66,168342,704],{"class":76},[66,168344,168345,168347,168349,168351],{"class":68,"line":227},[66,168346,244],{"class":102},[66,168348,168159],{"class":76},[66,168350,1208],{"class":72},[66,168352,168353],{"class":76},"nums))\n",[19,168355,168356],{},"字典解包为关键字参数：",[57,168358,168360],{"className":59,"code":168359,"language":61,"meta":62,"style":62},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[23,168361,168362,168370,168396,168400,168404,168428],{"__ignoreMap":62},[66,168363,168364,168366,168368],{"class":68,"line":69},[66,168365,33739],{"class":72},[66,168367,151137],{"class":3793},[66,168369,151140],{"class":76},[66,168371,168372,168374,168376,168378,168380,168382,168384,168386,168388,168390,168392,168394],{"class":68,"line":80},[66,168373,132],{"class":102},[66,168375,348],{"class":76},[66,168377,445],{"class":72},[66,168379,1130],{"class":356},[66,168381,451],{"class":102},[66,168383,81588],{"class":76},[66,168385,457],{"class":102},[66,168387,6264],{"class":102},[66,168389,72000],{"class":76},[66,168391,457],{"class":102},[66,168393,1130],{"class":356},[66,168395,313],{"class":76},[66,168397,168398],{"class":68,"line":112},[66,168399,109],{"emptyLinePlaceholder":108},[66,168401,168402],{"class":68,"line":129},[66,168403,109],{"emptyLinePlaceholder":108},[66,168405,168406,168408,168410,168412,168414,168416,168418,168420,168422,168424,168426],{"class":68,"line":138},[66,168407,118085],{"class":76},[66,168409,99],{"class":72},[66,168411,6264],{"class":76},[66,168413,64458],{"class":356},[66,168415,53221],{"class":76},[66,168417,691],{"class":356},[66,168419,307],{"class":76},[66,168421,70903],{"class":356},[66,168423,53221],{"class":76},[66,168425,2629],{"class":102},[66,168427,3407],{"class":76},[66,168429,168430,168432,168434],{"class":68,"line":227},[66,168431,167715],{"class":76},[66,168433,12467],{"class":72},[66,168435,168436],{"class":76},"info)\n",[14,168438,168440],{"id":168439},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,168442,168443,168446],{},[23,168444,168445],{},"lambda"," 用于定义简单匿名函数。",[57,168448,168450],{"className":59,"code":168449,"language":61,"meta":62,"style":62},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[23,168451,168452,168469],{"__ignoreMap":62},[66,168453,168454,168457,168459,168462,168465,168467],{"class":68,"line":69},[66,168455,168456],{"class":76},"add ",[66,168458,99],{"class":72},[66,168460,168461],{"class":72}," lambda",[66,168463,168464],{"class":76}," a, b: a ",[66,168466,1184],{"class":72},[66,168468,152866],{"class":76},[66,168470,168471,168473,168475,168477,168479,168481],{"class":68,"line":80},[66,168472,244],{"class":102},[66,168474,168159],{"class":76},[66,168476,304],{"class":102},[66,168478,307],{"class":76},[66,168480,795],{"class":102},[66,168482,360],{"class":76},[19,168484,168485],{},"常和排序、过滤等函数一起使用。",[19,168487,168488],{},"按分数排序：",[57,168490,168492],{"className":59,"code":168491,"language":61,"meta":62,"style":62},"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",[23,168493,168494,168502,168522,168542,168562,168566,168570,168593],{"__ignoreMap":62},[66,168495,168496,168498,168500],{"class":68,"line":69},[66,168497,683],{"class":76},[66,168499,99],{"class":72},[66,168501,57228],{"class":76},[66,168503,168504,168506,168508,168510,168512,168514,168516,168518,168520],{"class":68,"line":80},[66,168505,150151],{"class":76},[66,168507,64458],{"class":356},[66,168509,53221],{"class":76},[66,168511,691],{"class":356},[66,168513,307],{"class":76},[66,168515,153234],{"class":356},[66,168517,53221],{"class":76},[66,168519,2964],{"class":102},[66,168521,6746],{"class":76},[66,168523,168524,168526,168528,168530,168532,168534,168536,168538,168540],{"class":68,"line":112},[66,168525,150151],{"class":76},[66,168527,64458],{"class":356},[66,168529,53221],{"class":76},[66,168531,696],{"class":356},[66,168533,307],{"class":76},[66,168535,153234],{"class":356},[66,168537,53221],{"class":76},[66,168539,2790],{"class":102},[66,168541,6746],{"class":76},[66,168543,168544,168546,168548,168550,168552,168554,168556,168558,168560],{"class":68,"line":129},[66,168545,150151],{"class":76},[66,168547,64458],{"class":356},[66,168549,53221],{"class":76},[66,168551,701],{"class":356},[66,168553,307],{"class":76},[66,168555,153234],{"class":356},[66,168557,53221],{"class":76},[66,168559,2390],{"class":102},[66,168561,6746],{"class":76},[66,168563,168564],{"class":68,"line":138},[66,168565,704],{"class":76},[66,168567,168568],{"class":68,"line":227},[66,168569,109],{"emptyLinePlaceholder":108},[66,168571,168572,168575,168577,168579,168581,168583,168585,168587,168589,168591],{"class":68,"line":236},[66,168573,168574],{"class":76},"students.sort(",[66,168576,155698],{"class":1234},[66,168578,155701],{"class":72},[66,168580,155704],{"class":76},[66,168582,153234],{"class":356},[66,168584,113973],{"class":76},[66,168586,165087],{"class":1234},[66,168588,99],{"class":72},[66,168590,33269],{"class":102},[66,168592,313],{"class":76},[66,168594,168595,168597],{"class":68,"line":241},[66,168596,244],{"class":102},[66,168598,166554],{"class":76},[19,168600,168601,168602,168604],{},"如果逻辑复杂，不要硬写 ",[23,168603,168445],{},"，定义普通函数更清晰。",[14,168606,168608],{"id":168607},"_79-函数作为参数","7.9 函数作为参数",[19,168610,168611],{},"函数可以作为参数传给另一个函数。",[57,168613,168615],{"className":59,"code":168614,"language":61,"meta":62,"style":62},"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",[23,168616,168617,168625,168635,168639,168643,168653,168660,168664,168668],{"__ignoreMap":62},[66,168618,168619,168621,168623],{"class":68,"line":69},[66,168620,33739],{"class":72},[66,168622,7022],{"class":3793},[66,168624,152855],{"class":76},[66,168626,168627,168629,168631,168633],{"class":68,"line":80},[66,168628,5907],{"class":72},[66,168630,12675],{"class":76},[66,168632,1184],{"class":72},[66,168634,152866],{"class":76},[66,168636,168637],{"class":68,"line":112},[66,168638,109],{"emptyLinePlaceholder":108},[66,168640,168641],{"class":68,"line":129},[66,168642,109],{"emptyLinePlaceholder":108},[66,168644,168645,168647,168650],{"class":68,"line":138},[66,168646,33739],{"class":72},[66,168648,168649],{"class":3793}," calculate",[66,168651,168652],{"class":76},"(a, b, func):\n",[66,168654,168655,168657],{"class":68,"line":227},[66,168656,5907],{"class":72},[66,168658,168659],{"class":76}," func(a, b)\n",[66,168661,168662],{"class":68,"line":236},[66,168663,109],{"emptyLinePlaceholder":108},[66,168665,168666],{"class":68,"line":241},[66,168667,109],{"emptyLinePlaceholder":108},[66,168669,168670,168672,168675,168677,168679,168681],{"class":68,"line":372},[66,168671,244],{"class":102},[66,168673,168674],{"class":76},"(calculate(",[66,168676,790],{"class":102},[66,168678,307],{"class":76},[66,168680,2679],{"class":102},[66,168682,168683],{"class":76},", add))\n",[19,168685,168686],{},"这种思想在排序、回调、框架中经常出现。",[14,168688,168690],{"id":168689},"_710-mapfiltersorted","7.10 map、filter、sorted",[484,168692,168694],{"id":168693},"_7101-map","7.10.1 map",[19,168696,168697,168699],{},[23,168698,75823],{}," 对每个元素执行函数。",[57,168701,168703],{"className":59,"code":168702,"language":61,"meta":62,"style":62},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[23,168704,168705,168729,168752],{"__ignoreMap":62},[66,168706,168707,168709,168711,168713,168715,168717,168719,168721,168723,168725,168727],{"class":68,"line":69},[66,168708,165659],{"class":76},[66,168710,99],{"class":72},[66,168712,688],{"class":76},[66,168714,304],{"class":102},[66,168716,307],{"class":76},[66,168718,795],{"class":102},[66,168720,307],{"class":76},[66,168722,1520],{"class":102},[66,168724,307],{"class":76},[66,168726,1076],{"class":102},[66,168728,704],{"class":76},[66,168730,168731,168733,168735,168738,168740,168742,168745,168747,168749],{"class":68,"line":80},[66,168732,162865],{"class":76},[66,168734,99],{"class":72},[66,168736,168737],{"class":102}," map",[66,168739,348],{"class":76},[66,168741,168445],{"class":72},[66,168743,168744],{"class":76}," x: x ",[66,168746,1208],{"class":72},[66,168748,956],{"class":102},[66,168750,168751],{"class":76},", nums)\n",[66,168753,168754,168756,168758,168760],{"class":68,"line":112},[66,168755,244],{"class":102},[66,168757,348],{"class":76},[66,168759,155822],{"class":102},[66,168761,167627],{"class":76},[484,168763,168765],{"id":168764},"_7102-filter","7.10.2 filter",[19,168767,168768,168770],{},[23,168769,81829],{}," 保留满足条件的元素。",[57,168772,168774],{"className":59,"code":168773,"language":61,"meta":62,"style":62},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[23,168775,168776,168804,168829],{"__ignoreMap":62},[66,168777,168778,168780,168782,168784,168786,168788,168790,168792,168794,168796,168798,168800,168802],{"class":68,"line":69},[66,168779,165659],{"class":76},[66,168781,99],{"class":72},[66,168783,688],{"class":76},[66,168785,304],{"class":102},[66,168787,307],{"class":76},[66,168789,795],{"class":102},[66,168791,307],{"class":76},[66,168793,1520],{"class":102},[66,168795,307],{"class":76},[66,168797,1076],{"class":102},[66,168799,307],{"class":76},[66,168801,752],{"class":102},[66,168803,704],{"class":76},[66,168805,168806,168808,168810,168813,168815,168817,168819,168821,168823,168825,168827],{"class":68,"line":80},[66,168807,162865],{"class":76},[66,168809,99],{"class":72},[66,168811,168812],{"class":102}," filter",[66,168814,348],{"class":76},[66,168816,168445],{"class":72},[66,168818,168744],{"class":76},[66,168820,953],{"class":72},[66,168822,956],{"class":102},[66,168824,959],{"class":72},[66,168826,962],{"class":102},[66,168828,168751],{"class":76},[66,168830,168831,168833,168835,168837],{"class":68,"line":112},[66,168832,244],{"class":102},[66,168834,348],{"class":76},[66,168836,155822],{"class":102},[66,168838,167627],{"class":76},[484,168840,168842],{"id":168841},"_7103-sorted","7.10.3 sorted",[19,168844,168845,168847],{},[23,168846,166795],{}," 返回排序后的新列表。",[57,168849,168851],{"className":59,"code":168850,"language":61,"meta":62,"style":62},"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",[23,168852,168853,168861,168881,168901,168921,168925,168929,168958],{"__ignoreMap":62},[66,168854,168855,168857,168859],{"class":68,"line":69},[66,168856,683],{"class":76},[66,168858,99],{"class":72},[66,168860,57228],{"class":76},[66,168862,168863,168865,168867,168869,168871,168873,168875,168877,168879],{"class":68,"line":80},[66,168864,150151],{"class":76},[66,168866,64458],{"class":356},[66,168868,53221],{"class":76},[66,168870,691],{"class":356},[66,168872,307],{"class":76},[66,168874,153234],{"class":356},[66,168876,53221],{"class":76},[66,168878,2964],{"class":102},[66,168880,6746],{"class":76},[66,168882,168883,168885,168887,168889,168891,168893,168895,168897,168899],{"class":68,"line":112},[66,168884,150151],{"class":76},[66,168886,64458],{"class":356},[66,168888,53221],{"class":76},[66,168890,696],{"class":356},[66,168892,307],{"class":76},[66,168894,153234],{"class":356},[66,168896,53221],{"class":76},[66,168898,2790],{"class":102},[66,168900,6746],{"class":76},[66,168902,168903,168905,168907,168909,168911,168913,168915,168917,168919],{"class":68,"line":129},[66,168904,150151],{"class":76},[66,168906,64458],{"class":356},[66,168908,53221],{"class":76},[66,168910,701],{"class":356},[66,168912,307],{"class":76},[66,168914,153234],{"class":356},[66,168916,53221],{"class":76},[66,168918,2390],{"class":102},[66,168920,6746],{"class":76},[66,168922,168923],{"class":68,"line":138},[66,168924,704],{"class":76},[66,168926,168927],{"class":68,"line":227},[66,168928,109],{"emptyLinePlaceholder":108},[66,168930,168931,168933,168935,168937,168940,168942,168944,168946,168948,168950,168952,168954,168956],{"class":68,"line":236},[66,168932,162865],{"class":76},[66,168934,99],{"class":72},[66,168936,165163],{"class":102},[66,168938,168939],{"class":76},"(students, ",[66,168941,155698],{"class":1234},[66,168943,155701],{"class":72},[66,168945,155704],{"class":76},[66,168947,153234],{"class":356},[66,168949,113973],{"class":76},[66,168951,165087],{"class":1234},[66,168953,99],{"class":72},[66,168955,33269],{"class":102},[66,168957,313],{"class":76},[66,168959,168960,168962],{"class":68,"line":241},[66,168961,244],{"class":102},[66,168963,78364],{"class":76},[14,168965,168967],{"id":168966},"_711-闭包入门","7.11 闭包入门",[19,168969,168970],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[57,168972,168974],{"className":59,"code":168973,"language":61,"meta":62,"style":62},"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",[23,168975,168976,168986,168996,169007,169011,169018,169022,169026,169040],{"__ignoreMap":62},[66,168977,168978,168980,168983],{"class":68,"line":69},[66,168979,33739],{"class":72},[66,168981,168982],{"class":3793}," outer",[66,168984,168985],{"class":76},"(base):\n",[66,168987,168988,168990,168993],{"class":68,"line":80},[66,168989,32595],{"class":72},[66,168991,168992],{"class":3793}," inner",[66,168994,168995],{"class":76},"(num):\n",[66,168997,168998,169000,169003,169005],{"class":68,"line":112},[66,168999,16557],{"class":72},[66,169001,169002],{"class":76}," base ",[66,169004,1184],{"class":72},[66,169006,168138],{"class":76},[66,169008,169009],{"class":68,"line":129},[66,169010,109],{"emptyLinePlaceholder":108},[66,169012,169013,169015],{"class":68,"line":138},[66,169014,5907],{"class":72},[66,169016,169017],{"class":76}," inner\n",[66,169019,169020],{"class":68,"line":227},[66,169021,109],{"emptyLinePlaceholder":108},[66,169023,169024],{"class":68,"line":236},[66,169025,109],{"emptyLinePlaceholder":108},[66,169027,169028,169031,169033,169036,169038],{"class":68,"line":241},[66,169029,169030],{"class":76},"add_10 ",[66,169032,99],{"class":72},[66,169034,169035],{"class":76}," outer(",[66,169037,790],{"class":102},[66,169039,313],{"class":76},[66,169041,169042,169044,169047,169049],{"class":68,"line":372},[66,169043,244],{"class":102},[66,169045,169046],{"class":76},"(add_10(",[66,169048,752],{"class":102},[66,169050,360],{"class":76},[19,169052,169053],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,169055,169057],{"id":169056},"_712-装饰器入门","7.12 装饰器入门",[19,169059,169060],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[57,169062,169064],{"className":59,"code":169063,"language":61,"meta":62,"style":62},"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",[23,169065,169066,169075,169084,169095,169100,169111,169115,169122,169126,169130,169135,169143,169153,169157,169161],{"__ignoreMap":62},[66,169067,169068,169070,169072],{"class":68,"line":69},[66,169069,33739],{"class":72},[66,169071,88967],{"class":3793},[66,169073,169074],{"class":76},"(func):\n",[66,169076,169077,169079,169082],{"class":68,"line":80},[66,169078,32595],{"class":72},[66,169080,169081],{"class":3793}," wrapper",[66,169083,33745],{"class":76},[66,169085,169086,169088,169090,169093],{"class":68,"line":112},[66,169087,395],{"class":102},[66,169089,348],{"class":76},[66,169091,169092],{"class":356},"\"函数开始执行\"",[66,169094,313],{"class":76},[66,169096,169097],{"class":68,"line":129},[66,169098,169099],{"class":76},"        func()\n",[66,169101,169102,169104,169106,169109],{"class":68,"line":138},[66,169103,395],{"class":102},[66,169105,348],{"class":76},[66,169107,169108],{"class":356},"\"函数执行结束\"",[66,169110,313],{"class":76},[66,169112,169113],{"class":68,"line":227},[66,169114,109],{"emptyLinePlaceholder":108},[66,169116,169117,169119],{"class":68,"line":236},[66,169118,5907],{"class":72},[66,169120,169121],{"class":76}," wrapper\n",[66,169123,169124],{"class":68,"line":241},[66,169125,109],{"emptyLinePlaceholder":108},[66,169127,169128],{"class":68,"line":372},[66,169129,109],{"emptyLinePlaceholder":108},[66,169131,169132],{"class":68,"line":377},[66,169133,169134],{"class":3793},"@log\n",[66,169136,169137,169139,169141],{"class":68,"line":392},[66,169138,33739],{"class":72},[66,169140,162555],{"class":3793},[66,169142,33745],{"class":76},[66,169144,169145,169147,169149,169151],{"class":68,"line":405},[66,169146,132],{"class":102},[66,169148,348],{"class":76},[66,169150,7655],{"class":356},[66,169152,313],{"class":76},[66,169154,169155],{"class":68,"line":418},[66,169156,109],{"emptyLinePlaceholder":108},[66,169158,169159],{"class":68,"line":430},[66,169160,109],{"emptyLinePlaceholder":108},[66,169162,169163],{"class":68,"line":438},[66,169164,162590],{"class":76},[19,169166,160021],{},[57,169168,169170],{"className":59,"code":169169,"language":61,"meta":62,"style":62},"say_hello = log(say_hello)\n",[23,169171,169172],{"__ignoreMap":62},[66,169173,169174,169177,169179],{"class":68,"line":69},[66,169175,169176],{"class":76},"say_hello ",[66,169178,99],{"class":72},[66,169180,169181],{"class":76}," log(say_hello)\n",[19,169183,169184],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,169186,169188],{"id":169187},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[57,169190,169192],{"className":59,"code":169191,"language":61,"meta":62,"style":62},"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",[23,169193,169194,169202,169219,169229,169248,169258,169265,169269,169275,169279,169283,169287,169295,169305,169309,169313],{"__ignoreMap":62},[66,169195,169196,169198,169200],{"class":68,"line":69},[66,169197,33739],{"class":72},[66,169199,88967],{"class":3793},[66,169201,169074],{"class":76},[66,169203,169204,169206,169208,169210,169212,169215,169217],{"class":68,"line":80},[66,169205,32595],{"class":72},[66,169207,169081],{"class":3793},[66,169209,348],{"class":76},[66,169211,1208],{"class":72},[66,169213,169214],{"class":76},"args, ",[66,169216,12467],{"class":72},[66,169218,168225],{"class":76},[66,169220,169221,169223,169225,169227],{"class":68,"line":112},[66,169222,395],{"class":102},[66,169224,348],{"class":76},[66,169226,169092],{"class":356},[66,169228,313],{"class":76},[66,169230,169231,169234,169236,169239,169241,169243,169245],{"class":68,"line":129},[66,169232,169233],{"class":76},"        result ",[66,169235,99],{"class":72},[66,169237,169238],{"class":76}," func(",[66,169240,1208],{"class":72},[66,169242,169214],{"class":76},[66,169244,12467],{"class":72},[66,169246,169247],{"class":76},"kwargs)\n",[66,169249,169250,169252,169254,169256],{"class":68,"line":138},[66,169251,395],{"class":102},[66,169253,348],{"class":76},[66,169255,169108],{"class":356},[66,169257,313],{"class":76},[66,169259,169260,169262],{"class":68,"line":227},[66,169261,16557],{"class":72},[66,169263,169264],{"class":76}," result\n",[66,169266,169267],{"class":68,"line":236},[66,169268,109],{"emptyLinePlaceholder":108},[66,169270,169271,169273],{"class":68,"line":241},[66,169272,5907],{"class":72},[66,169274,169121],{"class":76},[66,169276,169277],{"class":68,"line":372},[66,169278,109],{"emptyLinePlaceholder":108},[66,169280,169281],{"class":68,"line":377},[66,169282,109],{"emptyLinePlaceholder":108},[66,169284,169285],{"class":68,"line":392},[66,169286,169134],{"class":3793},[66,169288,169289,169291,169293],{"class":68,"line":405},[66,169290,33739],{"class":72},[66,169292,7022],{"class":3793},[66,169294,152855],{"class":76},[66,169296,169297,169299,169301,169303],{"class":68,"line":418},[66,169298,5907],{"class":72},[66,169300,12675],{"class":76},[66,169302,1184],{"class":72},[66,169304,152866],{"class":76},[66,169306,169307],{"class":68,"line":430},[66,169308,109],{"emptyLinePlaceholder":108},[66,169310,169311],{"class":68,"line":438},[66,169312,109],{"emptyLinePlaceholder":108},[66,169314,169315,169317,169319,169321,169323,169325],{"class":68,"line":465},[66,169316,244],{"class":102},[66,169318,168159],{"class":76},[66,169320,790],{"class":102},[66,169322,307],{"class":76},[66,169324,2679],{"class":102},[66,169326,360],{"class":76},[19,169328,169329,169330,102792,169332,169334],{},"这个写法使用 ",[23,169331,168091],{},[23,169333,168206],{}," 接收原函数的所有参数。",[14,169336,169338],{"id":169337},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,169340,1472],{},[31,169342,169343,169346,169349],{},[34,169344,169345],{},"给定一组学生数据。",[34,169347,169348],{},"封装函数，根据传入规则筛选学生。",[34,169350,169351],{},"筛选及格、优秀、未成年学生。",[19,169353,1486],{},[57,169355,169357],{"className":59,"code":169356,"language":61,"meta":62,"style":62},"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",[23,169358,169359,169367,169395,169423,169451,169455,169459,169463,169473,169481,169491,169498,169503,169509,169513,169517,169541,169564,169587,169591,169598,169605],{"__ignoreMap":62},[66,169360,169361,169363,169365],{"class":68,"line":69},[66,169362,683],{"class":76},[66,169364,99],{"class":72},[66,169366,57228],{"class":76},[66,169368,169369,169371,169373,169375,169377,169379,169381,169383,169385,169387,169389,169391,169393],{"class":68,"line":80},[66,169370,150151],{"class":76},[66,169372,64458],{"class":356},[66,169374,53221],{"class":76},[66,169376,691],{"class":356},[66,169378,307],{"class":76},[66,169380,70903],{"class":356},[66,169382,53221],{"class":76},[66,169384,2629],{"class":102},[66,169386,307],{"class":76},[66,169388,153234],{"class":356},[66,169390,53221],{"class":76},[66,169392,2964],{"class":102},[66,169394,6746],{"class":76},[66,169396,169397,169399,169401,169403,169405,169407,169409,169411,169413,169415,169417,169419,169421],{"class":68,"line":112},[66,169398,150151],{"class":76},[66,169400,64458],{"class":356},[66,169402,53221],{"class":76},[66,169404,696],{"class":356},[66,169406,307],{"class":76},[66,169408,70903],{"class":356},[66,169410,53221],{"class":76},[66,169412,2604],{"class":102},[66,169414,307],{"class":76},[66,169416,153234],{"class":356},[66,169418,53221],{"class":76},[66,169420,2790],{"class":102},[66,169422,6746],{"class":76},[66,169424,169425,169427,169429,169431,169433,169435,169437,169439,169441,169443,169445,169447,169449],{"class":68,"line":129},[66,169426,150151],{"class":76},[66,169428,64458],{"class":356},[66,169430,53221],{"class":76},[66,169432,701],{"class":356},[66,169434,307],{"class":76},[66,169436,70903],{"class":356},[66,169438,53221],{"class":76},[66,169440,2654],{"class":102},[66,169442,307],{"class":76},[66,169444,153234],{"class":356},[66,169446,53221],{"class":76},[66,169448,2861],{"class":102},[66,169450,6746],{"class":76},[66,169452,169453],{"class":68,"line":138},[66,169454,704],{"class":76},[66,169456,169457],{"class":68,"line":227},[66,169458,109],{"emptyLinePlaceholder":108},[66,169460,169461],{"class":68,"line":236},[66,169462,109],{"emptyLinePlaceholder":108},[66,169464,169465,169467,169470],{"class":68,"line":241},[66,169466,33739],{"class":72},[66,169468,169469],{"class":3793}," filter_students",[66,169471,169472],{"class":76},"(students, condition):\n",[66,169474,169475,169477,169479],{"class":68,"line":372},[66,169476,162782],{"class":76},[66,169478,99],{"class":72},[66,169480,53622],{"class":76},[66,169482,169483,169485,169487,169489],{"class":68,"line":377},[66,169484,1083],{"class":72},[66,169486,715],{"class":76},[66,169488,507],{"class":72},[66,169490,720],{"class":76},[66,169492,169493,169495],{"class":68,"line":392},[66,169494,4321],{"class":72},[66,169496,169497],{"class":76}," condition(student):\n",[66,169499,169500],{"class":68,"line":405},[66,169501,169502],{"class":76},"            result.append(student)\n",[66,169504,169505,169507],{"class":68,"line":418},[66,169506,5907],{"class":72},[66,169508,169264],{"class":76},[66,169510,169511],{"class":68,"line":430},[66,169512,109],{"emptyLinePlaceholder":108},[66,169514,169515],{"class":68,"line":438},[66,169516,109],{"emptyLinePlaceholder":108},[66,169518,169519,169521,169523,169526,169528,169531,169533,169535,169537,169539],{"class":68,"line":465},[66,169520,167260],{"class":76},[66,169522,99],{"class":72},[66,169524,169525],{"class":76}," filter_students(students, ",[66,169527,168445],{"class":72},[66,169529,169530],{"class":76}," s: s[",[66,169532,153234],{"class":356},[66,169534,6259],{"class":76},[66,169536,3540],{"class":72},[66,169538,159585],{"class":102},[66,169540,313],{"class":76},[66,169542,169543,169546,169548,169550,169552,169554,169556,169558,169560,169562],{"class":68,"line":1805},[66,169544,169545],{"class":76},"excellent ",[66,169547,99],{"class":72},[66,169549,169525],{"class":76},[66,169551,168445],{"class":72},[66,169553,169530],{"class":76},[66,169555,153234],{"class":356},[66,169557,6259],{"class":76},[66,169559,3540],{"class":72},[66,169561,159536],{"class":102},[66,169563,313],{"class":76},[66,169565,169566,169569,169571,169573,169575,169577,169579,169581,169583,169585],{"class":68,"line":1817},[66,169567,169568],{"class":76},"under_age ",[66,169570,99],{"class":72},[66,169572,169525],{"class":76},[66,169574,168445],{"class":72},[66,169576,169530],{"class":76},[66,169578,70903],{"class":356},[66,169580,6259],{"class":76},[66,169582,413],{"class":72},[66,169584,158035],{"class":102},[66,169586,313],{"class":76},[66,169588,169589],{"class":68,"line":1822},[66,169590,109],{"emptyLinePlaceholder":108},[66,169592,169593,169595],{"class":68,"line":1829},[66,169594,244],{"class":102},[66,169596,169597],{"class":76},"(passed)\n",[66,169599,169600,169602],{"class":68,"line":3529},[66,169601,244],{"class":102},[66,169603,169604],{"class":76},"(excellent)\n",[66,169606,169607,169609],{"class":68,"line":3557},[66,169608,244],{"class":102},[66,169610,169611],{"class":76},"(under_age)\n",[14,169613,169615],{"id":169614},"_715-易错点","7.15 易错点",[31,169617,169618,169621,169629,169634,169645],{},[34,169619,169620],{},"默认参数不要写可变对象。",[34,169622,169623,169625,169626,169628],{},[23,169624,168091],{}," 是元组，",[23,169627,168206],{}," 是字典。",[34,169630,169631,169633],{},[23,169632,168445],{}," 只适合简单表达式。",[34,169635,169636,102792,169638,169640,169641,169644],{},[23,169637,75823],{},[23,169639,81829],{}," 的结果是迭代器，常用 ",[23,169642,169643],{},"list()"," 转换查看。",[34,169646,169647],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,169649,169651],{"id":169650},"_716-本章练习","7.16 本章练习",[31,169653,169654,169661,169667,169672,169677],{},[34,169655,169656,169657,169660],{},"写函数 ",[23,169658,169659],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[34,169662,169656,169663,169666],{},[23,169664,169665],{},"print_user(**kwargs)","，输出用户所有字段。",[34,169668,106139,169669,169671],{},[23,169670,168445],{}," 对学生列表按年龄排序。",[34,169673,106139,169674,169676],{},[23,169675,81829],{}," 找出成绩不及格的学生。",[34,169678,169679],{},"写一个装饰器，统计函数执行前后的提示信息。",[1903,169681,169682],{},"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":62,"searchDepth":80,"depth":80,"links":169684},[169685,169686,169687,169688,169689,169690,169694,169695,169696,169697,169702,169703,169704,169705,169706,169707],{"id":167543,"depth":80,"text":167544},{"id":167657,"depth":80,"text":167658},{"id":167746,"depth":80,"text":167747},{"id":167808,"depth":80,"text":167809},{"id":167954,"depth":80,"text":167955},{"id":168081,"depth":80,"text":168082,"children":169691},[169692,169693],{"id":168085,"depth":112,"text":168086},{"id":168200,"depth":112,"text":168201},{"id":168281,"depth":80,"text":168282},{"id":168439,"depth":80,"text":168440},{"id":168607,"depth":80,"text":168608},{"id":168689,"depth":80,"text":168690,"children":169698},[169699,169700,169701],{"id":168693,"depth":112,"text":168694},{"id":168764,"depth":112,"text":168765},{"id":168841,"depth":112,"text":168842},{"id":168966,"depth":80,"text":168967},{"id":169056,"depth":80,"text":169057},{"id":169187,"depth":80,"text":169188},{"id":169337,"depth":80,"text":169338},{"id":169614,"depth":80,"text":169615},{"id":169650,"depth":80,"text":169651},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":167535,"description":1926},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":169714,"title":169715,"body":169716,"description":1926,"extension":1927,"meta":172235,"navigation":108,"path":172236,"seo":172237,"stem":172238,"__hash__":172239},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":169717,"toc":172210},[169718,169721,169725,169728,169731,169762,169766,169770,169773,169800,169804,169807,169858,169861,169876,169879,169914,169918,169920,169944,169947,170007,170011,170015,170018,170075,170078,170098,170102,170105,170168,170172,170175,170231,170238,170262,170266,170269,170332,170336,170341,170392,170395,170399,170404,170471,170474,170556,170560,170565,170616,170619,170623,170626,170629,170637,170640,170686,170689,170735,170739,170745,170789,170792,170838,170841,170881,170884,170945,170949,170952,171042,171045,171187,171190,171257,171261,171264,171267,171408,171411,171489,171492,171668,171672,171674,171685,171687,171886,171890,172134,172138,172172,172176,172207],[10,169719,169715],{"id":169720},"_8-文件操作",[14,169722,169724],{"id":169723},"_81-文件操作的意义","8.1 文件操作的意义",[19,169726,169727],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,169729,169730],{},"常见文件类型：",[31,169732,169733,169739,169745,169751,169757],{},[34,169734,169735,169738],{},[23,169736,169737],{},".txt","：普通文本。",[34,169740,169741,169744],{},[23,169742,169743],{},".csv","：表格文本。",[34,169746,169747,169750],{},[23,169748,169749],{},".json","：结构化数据。",[34,169752,169753,169756],{},[23,169754,169755],{},".log","：日志文件。",[34,169758,169759,169761],{},[23,169760,148122],{},"：Python 源代码。",[14,169763,169765],{"id":169764},"_82-路径","8.2 路径",[484,169767,169769],{"id":169768},"_821-相对路径","8.2.1 相对路径",[19,169771,169772],{},"相对当前运行目录：",[57,169774,169776],{"className":59,"code":169775,"language":61,"meta":62,"style":62},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[23,169777,169778],{"__ignoreMap":62},[66,169779,169780,169782,169784,169786,169788,169790,169792,169794,169796,169798],{"class":68,"line":69},[66,169781,88691],{"class":102},[66,169783,348],{"class":76},[66,169785,148562],{"class":356},[66,169787,307],{"class":76},[66,169789,148567],{"class":356},[66,169791,307],{"class":76},[66,169793,148572],{"class":1234},[66,169795,99],{"class":72},[66,169797,148577],{"class":356},[66,169799,313],{"class":76},[484,169801,169803],{"id":169802},"_822-绝对路径","8.2.2 绝对路径",[19,169805,169806],{},"从根目录或盘符开始：",[57,169808,169810],{"className":59,"code":169809,"language":61,"meta":62,"style":62},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[23,169811,169812,169835],{"__ignoreMap":62},[66,169813,169814,169816,169818,169821,169823,169825,169827,169829,169831,169833],{"class":68,"line":69},[66,169815,88691],{"class":102},[66,169817,348],{"class":76},[66,169819,169820],{"class":356},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[66,169822,307],{"class":76},[66,169824,148567],{"class":356},[66,169826,307],{"class":76},[66,169828,148572],{"class":1234},[66,169830,99],{"class":72},[66,169832,148577],{"class":356},[66,169834,313],{"class":76},[66,169836,169837,169839,169841,169844,169846,169848,169850,169852,169854,169856],{"class":68,"line":80},[66,169838,88691],{"class":102},[66,169840,348],{"class":76},[66,169842,169843],{"class":356},"\"D:\u002Fdata\u002Fdata.txt\"",[66,169845,307],{"class":76},[66,169847,148567],{"class":356},[66,169849,307],{"class":76},[66,169851,148572],{"class":1234},[66,169853,99],{"class":72},[66,169855,148577],{"class":356},[66,169857,313],{"class":76},[19,169859,169860],{},"Windows 路径建议写成：",[57,169862,169864],{"className":59,"code":169863,"language":61,"meta":62,"style":62},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[23,169865,169866],{"__ignoreMap":62},[66,169867,169868,169871,169873],{"class":68,"line":69},[66,169869,169870],{"class":76},"path ",[66,169872,99],{"class":72},[66,169874,169875],{"class":356}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,169877,169878],{},"或原始字符串：",[57,169880,169882],{"className":59,"code":169881,"language":61,"meta":62,"style":62},"path = r\"D:\\data\\data.txt\"\n",[23,169883,169884],{"__ignoreMap":62},[66,169885,169886,169888,169890,169892,169894,169897,169900,169903,169905,169907,169909,169912],{"class":68,"line":69},[66,169887,169870],{"class":76},[66,169889,99],{"class":72},[66,169891,18924],{"class":72},[66,169893,1130],{"class":356},[66,169895,169896],{"class":49761},"D:",[66,169898,169899],{"class":102},"\\d",[66,169901,169902],{"class":49761},"ata",[66,169904,169899],{"class":102},[66,169906,169902],{"class":49761},[66,169908,2537],{"class":102},[66,169910,169911],{"class":49761},"txt",[66,169913,26935],{"class":356},[14,169915,169917],{"id":169916},"_83-open函数","8.3 open函数",[19,169919,55],{},[57,169921,169923],{"className":59,"code":169922,"language":61,"meta":62,"style":62},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[23,169924,169925],{"__ignoreMap":62},[66,169926,169927,169929,169931,169933,169936,169938,169940,169942],{"class":68,"line":69},[66,169928,47140],{"class":1234},[66,169930,15369],{"class":72},[66,169932,148557],{"class":102},[66,169934,169935],{"class":76},"(文件路径, 打开模式, ",[66,169937,148572],{"class":1234},[66,169939,99],{"class":72},[66,169941,148577],{"class":356},[66,169943,313],{"class":76},[19,169945,169946],{},"常见模式：",[2129,169948,169949,169958],{},[2132,169950,169951],{},[2135,169952,169953,169956],{},[2138,169954,169955],{},"模式",[2138,169957,27671],{},[2176,169959,169960,169969,169978,169987,169997],{},[2135,169961,169962,169966],{},[2181,169963,169964],{},[23,169965,2649],{},[2181,169967,169968],{},"只读，文件不存在会报错",[2135,169970,169971,169975],{},[2181,169972,169973],{},[23,169974,2774],{},[2181,169976,169977],{},"只写，文件不存在会创建，存在会清空",[2135,169979,169980,169984],{},[2181,169981,169982],{},[23,169983,2229],{},[2181,169985,169986],{},"追加，文件不存在会创建",[2135,169988,169989,169994],{},[2181,169990,169991],{},[23,169992,169993],{},"rb",[2181,169995,169996],{},"二进制只读",[2135,169998,169999,170004],{},[2181,170000,170001],{},[23,170002,170003],{},"wb",[2181,170005,170006],{},"二进制只写",[14,170008,170010],{"id":170009},"_84-读取文件","8.4 读取文件",[484,170012,170014],{"id":170013},"_841-read","8.4.1 read",[19,170016,170017],{},"一次读取全部内容：",[57,170019,170021],{"className":59,"code":170020,"language":61,"meta":62,"style":62},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[23,170022,170023,170049,170061,170068],{"__ignoreMap":62},[66,170024,170025,170027,170029,170031,170033,170035,170037,170039,170041,170043,170045,170047],{"class":68,"line":69},[66,170026,47140],{"class":1234},[66,170028,15369],{"class":72},[66,170030,148557],{"class":102},[66,170032,348],{"class":76},[66,170034,148562],{"class":356},[66,170036,307],{"class":76},[66,170038,148567],{"class":356},[66,170040,307],{"class":76},[66,170042,148572],{"class":1234},[66,170044,99],{"class":72},[66,170046,148577],{"class":356},[66,170048,313],{"class":76},[66,170050,170051,170054,170056,170058],{"class":68,"line":80},[66,170052,170053],{"class":76},"content ",[66,170055,99],{"class":72},[66,170057,149919],{"class":1234},[66,170059,170060],{"class":76},".read()\n",[66,170062,170063,170065],{"class":68,"line":112},[66,170064,244],{"class":102},[66,170066,170067],{"class":76},"(content)\n",[66,170069,170070,170072],{"class":68,"line":129},[66,170071,47140],{"class":1234},[66,170073,170074],{"class":76},".close()\n",[19,170076,170077],{},"可以指定读取字符数：",[57,170079,170081],{"className":59,"code":170080,"language":61,"meta":62,"style":62},"content = file.read(10)\n",[23,170082,170083],{"__ignoreMap":62},[66,170084,170085,170087,170089,170091,170094,170096],{"class":68,"line":69},[66,170086,170053],{"class":76},[66,170088,99],{"class":72},[66,170090,149919],{"class":1234},[66,170092,170093],{"class":76},".read(",[66,170095,790],{"class":102},[66,170097,313],{"class":76},[484,170099,170101],{"id":170100},"_842-readline","8.4.2 readline",[19,170103,170104],{},"一次读取一行：",[57,170106,170108],{"className":59,"code":170107,"language":61,"meta":62,"style":62},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[23,170109,170110,170136,170140,170151,170158,170162],{"__ignoreMap":62},[66,170111,170112,170114,170116,170118,170120,170122,170124,170126,170128,170130,170132,170134],{"class":68,"line":69},[66,170113,47140],{"class":1234},[66,170115,15369],{"class":72},[66,170117,148557],{"class":102},[66,170119,348],{"class":76},[66,170121,148562],{"class":356},[66,170123,307],{"class":76},[66,170125,148567],{"class":356},[66,170127,307],{"class":76},[66,170129,148572],{"class":1234},[66,170131,99],{"class":72},[66,170133,148577],{"class":356},[66,170135,313],{"class":76},[66,170137,170138],{"class":68,"line":80},[66,170139,109],{"emptyLinePlaceholder":108},[66,170141,170142,170144,170146,170148],{"class":68,"line":112},[66,170143,149018],{"class":76},[66,170145,99],{"class":72},[66,170147,149919],{"class":1234},[66,170149,170150],{"class":76},".readline()\n",[66,170152,170153,170155],{"class":68,"line":129},[66,170154,244],{"class":102},[66,170156,170157],{"class":76},"(line)\n",[66,170159,170160],{"class":68,"line":138},[66,170161,109],{"emptyLinePlaceholder":108},[66,170163,170164,170166],{"class":68,"line":227},[66,170165,47140],{"class":1234},[66,170167,170074],{"class":76},[484,170169,170171],{"id":170170},"_843-readlines","8.4.3 readlines",[19,170173,170174],{},"读取所有行，返回列表：",[57,170176,170178],{"className":59,"code":170177,"language":61,"meta":62,"style":62},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[23,170179,170180,170206,170218,170225],{"__ignoreMap":62},[66,170181,170182,170184,170186,170188,170190,170192,170194,170196,170198,170200,170202,170204],{"class":68,"line":69},[66,170183,47140],{"class":1234},[66,170185,15369],{"class":72},[66,170187,148557],{"class":102},[66,170189,348],{"class":76},[66,170191,148562],{"class":356},[66,170193,307],{"class":76},[66,170195,148567],{"class":356},[66,170197,307],{"class":76},[66,170199,148572],{"class":1234},[66,170201,99],{"class":72},[66,170203,148577],{"class":356},[66,170205,313],{"class":76},[66,170207,170208,170211,170213,170215],{"class":68,"line":80},[66,170209,170210],{"class":76},"lines ",[66,170212,99],{"class":72},[66,170214,149919],{"class":1234},[66,170216,170217],{"class":76},".readlines()\n",[66,170219,170220,170222],{"class":68,"line":112},[66,170221,244],{"class":102},[66,170223,170224],{"class":76},"(lines)\n",[66,170226,170227,170229],{"class":68,"line":129},[66,170228,47140],{"class":1234},[66,170230,170074],{"class":76},[19,170232,170233,170234,170237],{},"每一行通常带有换行符，可以用 ",[23,170235,170236],{},"strip()"," 去掉：",[57,170239,170241],{"className":59,"code":170240,"language":61,"meta":62,"style":62},"for line in lines:\n    print(line.strip())\n",[23,170242,170243,170255],{"__ignoreMap":62},[66,170244,170245,170247,170250,170252],{"class":68,"line":69},[66,170246,502],{"class":72},[66,170248,170249],{"class":76}," line ",[66,170251,507],{"class":72},[66,170253,170254],{"class":76}," lines:\n",[66,170256,170257,170259],{"class":68,"line":80},[66,170258,132],{"class":102},[66,170260,170261],{"class":76},"(line.strip())\n",[484,170263,170265],{"id":170264},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,170267,170268],{},"推荐读取大文件时使用：",[57,170270,170272],{"className":59,"code":170271,"language":61,"meta":62,"style":62},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[23,170273,170274,170300,170304,170316,170322,170326],{"__ignoreMap":62},[66,170275,170276,170278,170280,170282,170284,170286,170288,170290,170292,170294,170296,170298],{"class":68,"line":69},[66,170277,47140],{"class":1234},[66,170279,15369],{"class":72},[66,170281,148557],{"class":102},[66,170283,348],{"class":76},[66,170285,148562],{"class":356},[66,170287,307],{"class":76},[66,170289,148567],{"class":356},[66,170291,307],{"class":76},[66,170293,148572],{"class":1234},[66,170295,99],{"class":72},[66,170297,148577],{"class":356},[66,170299,313],{"class":76},[66,170301,170302],{"class":68,"line":80},[66,170303,109],{"emptyLinePlaceholder":108},[66,170305,170306,170308,170310,170312,170314],{"class":68,"line":112},[66,170307,502],{"class":72},[66,170309,170249],{"class":76},[66,170311,507],{"class":72},[66,170313,149919],{"class":1234},[66,170315,126],{"class":76},[66,170317,170318,170320],{"class":68,"line":129},[66,170319,132],{"class":102},[66,170321,170261],{"class":76},[66,170323,170324],{"class":68,"line":138},[66,170325,109],{"emptyLinePlaceholder":108},[66,170327,170328,170330],{"class":68,"line":227},[66,170329,47140],{"class":1234},[66,170331,170074],{"class":76},[14,170333,170335],{"id":170334},"_85-with语句","8.5 with语句",[19,170337,170338,170340],{},[23,170339,109606],{}," 会自动关闭文件，推荐使用。",[57,170342,170344],{"className":59,"code":170343,"language":61,"meta":62,"style":62},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[23,170345,170346,170376,170386],{"__ignoreMap":62},[66,170347,170348,170350,170352,170354,170356,170358,170360,170362,170364,170366,170368,170370,170372,170374],{"class":68,"line":69},[66,170349,109606],{"class":72},[66,170351,148557],{"class":102},[66,170353,348],{"class":76},[66,170355,148562],{"class":356},[66,170357,307],{"class":76},[66,170359,148567],{"class":356},[66,170361,307],{"class":76},[66,170363,148572],{"class":1234},[66,170365,99],{"class":72},[66,170367,148577],{"class":356},[66,170369,15519],{"class":76},[66,170371,33176],{"class":72},[66,170373,149919],{"class":1234},[66,170375,126],{"class":76},[66,170377,170378,170380,170382,170384],{"class":68,"line":80},[66,170379,148589],{"class":76},[66,170381,99],{"class":72},[66,170383,149919],{"class":1234},[66,170385,170060],{"class":76},[66,170387,170388,170390],{"class":68,"line":112},[66,170389,132],{"class":102},[66,170391,170067],{"class":76},[19,170393,170394],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,170396,170398],{"id":170397},"_86-写入文件","8.6 写入文件",[19,170400,170401,170403],{},[23,170402,2774],{}," 模式会清空原文件。",[57,170405,170407],{"className":59,"code":170406,"language":61,"meta":62,"style":62},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[23,170408,170409,170439,170456],{"__ignoreMap":62},[66,170410,170411,170413,170415,170417,170419,170421,170423,170425,170427,170429,170431,170433,170435,170437],{"class":68,"line":69},[66,170412,109606],{"class":72},[66,170414,148557],{"class":102},[66,170416,348],{"class":76},[66,170418,148562],{"class":356},[66,170420,307],{"class":76},[66,170422,153738],{"class":356},[66,170424,307],{"class":76},[66,170426,148572],{"class":1234},[66,170428,99],{"class":72},[66,170430,148577],{"class":356},[66,170432,15519],{"class":76},[66,170434,33176],{"class":72},[66,170436,149919],{"class":1234},[66,170438,126],{"class":76},[66,170440,170441,170444,170447,170450,170452,170454],{"class":68,"line":80},[66,170442,170443],{"class":1234},"    file",[66,170445,170446],{"class":76},".write(",[66,170448,170449],{"class":356},"\"hello",[66,170451,158275],{"class":102},[66,170453,1130],{"class":356},[66,170455,313],{"class":76},[66,170457,170458,170460,170462,170465,170467,170469],{"class":68,"line":112},[66,170459,170443],{"class":1234},[66,170461,170446],{"class":76},[66,170463,170464],{"class":356},"\"python",[66,170466,158275],{"class":102},[66,170468,1130],{"class":356},[66,170470,313],{"class":76},[19,170472,170473],{},"写入多行：",[57,170475,170477],{"className":59,"code":170476,"language":61,"meta":62,"style":62},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[23,170478,170479,170514,170518,170549],{"__ignoreMap":62},[66,170480,170481,170483,170485,170487,170490,170492,170494,170496,170499,170501,170503,170505,170508,170510,170512],{"class":68,"line":69},[66,170482,170210],{"class":76},[66,170484,99],{"class":72},[66,170486,688],{"class":76},[66,170488,170489],{"class":356},"\"小明,18",[66,170491,158275],{"class":102},[66,170493,1130],{"class":356},[66,170495,307],{"class":76},[66,170497,170498],{"class":356},"\"小红,17",[66,170500,158275],{"class":102},[66,170502,1130],{"class":356},[66,170504,307],{"class":76},[66,170506,170507],{"class":356},"\"小刚,19",[66,170509,158275],{"class":102},[66,170511,1130],{"class":356},[66,170513,704],{"class":76},[66,170515,170516],{"class":68,"line":80},[66,170517,109],{"emptyLinePlaceholder":108},[66,170519,170520,170522,170524,170526,170529,170531,170533,170535,170537,170539,170541,170543,170545,170547],{"class":68,"line":112},[66,170521,109606],{"class":72},[66,170523,148557],{"class":102},[66,170525,348],{"class":76},[66,170527,170528],{"class":356},"\"students.txt\"",[66,170530,307],{"class":76},[66,170532,153738],{"class":356},[66,170534,307],{"class":76},[66,170536,148572],{"class":1234},[66,170538,99],{"class":72},[66,170540,148577],{"class":356},[66,170542,15519],{"class":76},[66,170544,33176],{"class":72},[66,170546,149919],{"class":1234},[66,170548,126],{"class":76},[66,170550,170551,170553],{"class":68,"line":129},[66,170552,170443],{"class":1234},[66,170554,170555],{"class":76},".writelines(lines)\n",[14,170557,170559],{"id":170558},"_87-追加文件","8.7 追加文件",[19,170561,170562,170564],{},[23,170563,2229],{}," 模式不会清空原内容，而是在末尾追加。",[57,170566,170568],{"className":59,"code":170567,"language":61,"meta":62,"style":62},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[23,170569,170570,170601],{"__ignoreMap":62},[66,170571,170572,170574,170576,170578,170581,170583,170585,170587,170589,170591,170593,170595,170597,170599],{"class":68,"line":69},[66,170573,109606],{"class":72},[66,170575,148557],{"class":102},[66,170577,348],{"class":76},[66,170579,170580],{"class":356},"\"log.txt\"",[66,170582,307],{"class":76},[66,170584,166884],{"class":356},[66,170586,307],{"class":76},[66,170588,148572],{"class":1234},[66,170590,99],{"class":72},[66,170592,148577],{"class":356},[66,170594,15519],{"class":76},[66,170596,33176],{"class":72},[66,170598,149919],{"class":1234},[66,170600,126],{"class":76},[66,170602,170603,170605,170607,170610,170612,170614],{"class":68,"line":80},[66,170604,170443],{"class":1234},[66,170606,170446],{"class":76},[66,170608,170609],{"class":356},"\"程序启动",[66,170611,158275],{"class":102},[66,170613,1130],{"class":356},[66,170615,313],{"class":76},[19,170617,170618],{},"日志类文件常用追加模式。",[14,170620,170622],{"id":170621},"_88-文件编码","8.8 文件编码",[19,170624,170625],{},"编码决定文字如何保存为字节。",[19,170627,170628],{},"常见编码：",[31,170630,170631,170634],{},[34,170632,170633],{},"UTF-8：推荐。",[34,170635,170636],{},"GBK：部分 Windows 中文文件常见。",[19,170638,170639],{},"读取文件乱码时，可以尝试：",[57,170641,170643],{"className":59,"code":170642,"language":61,"meta":62,"style":62},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[23,170644,170645,170676],{"__ignoreMap":62},[66,170646,170647,170649,170651,170653,170655,170657,170659,170661,170663,170665,170668,170670,170672,170674],{"class":68,"line":69},[66,170648,109606],{"class":72},[66,170650,148557],{"class":102},[66,170652,348],{"class":76},[66,170654,148562],{"class":356},[66,170656,307],{"class":76},[66,170658,148567],{"class":356},[66,170660,307],{"class":76},[66,170662,148572],{"class":1234},[66,170664,99],{"class":72},[66,170666,170667],{"class":356},"\"gbk\"",[66,170669,15519],{"class":76},[66,170671,33176],{"class":72},[66,170673,149919],{"class":1234},[66,170675,126],{"class":76},[66,170677,170678,170680,170682,170684],{"class":68,"line":80},[66,170679,148589],{"class":76},[66,170681,99],{"class":72},[66,170683,149919],{"class":1234},[66,170685,170060],{"class":76},[19,170687,170688],{},"写文件时建议统一 UTF-8：",[57,170690,170692],{"className":59,"code":170691,"language":61,"meta":62,"style":62},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[23,170693,170694,170724],{"__ignoreMap":62},[66,170695,170696,170698,170700,170702,170704,170706,170708,170710,170712,170714,170716,170718,170720,170722],{"class":68,"line":69},[66,170697,109606],{"class":72},[66,170699,148557],{"class":102},[66,170701,348],{"class":76},[66,170703,148562],{"class":356},[66,170705,307],{"class":76},[66,170707,153738],{"class":356},[66,170709,307],{"class":76},[66,170711,148572],{"class":1234},[66,170713,99],{"class":72},[66,170715,148577],{"class":356},[66,170717,15519],{"class":76},[66,170719,33176],{"class":72},[66,170721,149919],{"class":1234},[66,170723,126],{"class":76},[66,170725,170726,170728,170730,170733],{"class":68,"line":80},[66,170727,170443],{"class":1234},[66,170729,170446],{"class":76},[66,170731,170732],{"class":356},"\"中文内容\"",[66,170734,313],{"class":76},[14,170736,170738],{"id":170737},"_89-pathlib","8.9 pathlib",[19,170740,170741,170744],{},[23,170742,170743],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[57,170746,170748],{"className":59,"code":170747,"language":61,"meta":62,"style":62},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[23,170749,170750,170760,170764,170782],{"__ignoreMap":62},[66,170751,170752,170754,170756,170758],{"class":68,"line":69},[66,170753,32532],{"class":72},[66,170755,110084],{"class":76},[66,170757,284],{"class":72},[66,170759,110089],{"class":76},[66,170761,170762],{"class":68,"line":80},[66,170763,109],{"emptyLinePlaceholder":108},[66,170765,170766,170768,170770,170772,170775,170777,170779],{"class":68,"line":112},[66,170767,169870],{"class":76},[66,170769,99],{"class":72},[66,170771,110318],{"class":76},[66,170773,170774],{"class":356},"\"data\"",[66,170776,15519],{"class":76},[66,170778,2563],{"class":72},[66,170780,170781],{"class":356}," \"students.txt\"\n",[66,170783,170784,170786],{"class":68,"line":129},[66,170785,244],{"class":102},[66,170787,170788],{"class":76},"(path)\n",[19,170790,170791],{},"创建目录：",[57,170793,170795],{"className":59,"code":170794,"language":61,"meta":62,"style":62},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[23,170796,170797,170807,170811,170824],{"__ignoreMap":62},[66,170798,170799,170801,170803,170805],{"class":68,"line":69},[66,170800,32532],{"class":72},[66,170802,110084],{"class":76},[66,170804,284],{"class":72},[66,170806,110089],{"class":76},[66,170808,170809],{"class":68,"line":80},[66,170810,109],{"emptyLinePlaceholder":108},[66,170812,170813,170816,170818,170820,170822],{"class":68,"line":112},[66,170814,170815],{"class":76},"data_dir ",[66,170817,99],{"class":72},[66,170819,110318],{"class":76},[66,170821,170774],{"class":356},[66,170823,313],{"class":76},[66,170825,170826,170829,170832,170834,170836],{"class":68,"line":129},[66,170827,170828],{"class":76},"data_dir.mkdir(",[66,170830,170831],{"class":1234},"exist_ok",[66,170833,99],{"class":72},[66,170835,33269],{"class":102},[66,170837,313],{"class":76},[19,170839,170840],{},"判断文件是否存在：",[57,170842,170844],{"className":59,"code":170843,"language":61,"meta":62,"style":62},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[23,170845,170846,170859,170863,170870],{"__ignoreMap":62},[66,170847,170848,170850,170852,170854,170857],{"class":68,"line":69},[66,170849,169870],{"class":76},[66,170851,99],{"class":72},[66,170853,110318],{"class":76},[66,170855,170856],{"class":356},"\"data\u002Fstudents.txt\"",[66,170858,313],{"class":76},[66,170860,170861],{"class":68,"line":80},[66,170862,109],{"emptyLinePlaceholder":108},[66,170864,170865,170867],{"class":68,"line":112},[66,170866,3373],{"class":72},[66,170868,170869],{"class":76}," path.exists():\n",[66,170871,170872,170874,170876,170879],{"class":68,"line":129},[66,170873,132],{"class":102},[66,170875,348],{"class":76},[66,170877,170878],{"class":356},"\"文件存在\"",[66,170880,313],{"class":76},[19,170882,170883],{},"读写文本：",[57,170885,170887],{"className":59,"code":170886,"language":61,"meta":62,"style":62},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[23,170888,170889,170901,170905,170922,170939],{"__ignoreMap":62},[66,170890,170891,170893,170895,170897,170899],{"class":68,"line":69},[66,170892,169870],{"class":76},[66,170894,99],{"class":72},[66,170896,110318],{"class":76},[66,170898,148562],{"class":356},[66,170900,313],{"class":76},[66,170902,170903],{"class":68,"line":80},[66,170904,109],{"emptyLinePlaceholder":108},[66,170906,170907,170910,170912,170914,170916,170918,170920],{"class":68,"line":112},[66,170908,170909],{"class":76},"path.write_text(",[66,170911,147646],{"class":356},[66,170913,307],{"class":76},[66,170915,148572],{"class":1234},[66,170917,99],{"class":72},[66,170919,148577],{"class":356},[66,170921,313],{"class":76},[66,170923,170924,170926,170928,170931,170933,170935,170937],{"class":68,"line":129},[66,170925,170053],{"class":76},[66,170927,99],{"class":72},[66,170929,170930],{"class":76}," path.read_text(",[66,170932,148572],{"class":1234},[66,170934,99],{"class":72},[66,170936,148577],{"class":356},[66,170938,313],{"class":76},[66,170940,170941,170943],{"class":68,"line":138},[66,170942,244],{"class":102},[66,170944,170067],{"class":76},[14,170946,170948],{"id":170947},"_810-json文件","8.10 JSON文件",[19,170950,170951],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[57,170953,170955],{"className":59,"code":170954,"language":61,"meta":62,"style":62},"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",[23,170956,170957,170963,170967,170975,170985,170995,171003,171007,171011,171036],{"__ignoreMap":62},[66,170958,170959,170961],{"class":68,"line":69},[66,170960,284],{"class":72},[66,170962,148857],{"class":76},[66,170964,170965],{"class":68,"line":80},[66,170966,109],{"emptyLinePlaceholder":108},[66,170968,170969,170971,170973],{"class":68,"line":112},[66,170970,151246],{"class":76},[66,170972,99],{"class":72},[66,170974,17375],{"class":76},[66,170976,170977,170979,170981,170983],{"class":68,"line":129},[66,170978,148786],{"class":356},[66,170980,53221],{"class":76},[66,170982,691],{"class":356},[66,170984,33259],{"class":76},[66,170986,170987,170989,170991,170993],{"class":68,"line":138},[66,170988,166096],{"class":356},[66,170990,53221],{"class":76},[66,170992,2629],{"class":102},[66,170994,33259],{"class":76},[66,170996,170997,170999,171001],{"class":68,"line":227},[66,170998,166107],{"class":356},[66,171000,53221],{"class":76},[66,171002,166112],{"class":102},[66,171004,171005],{"class":68,"line":236},[66,171006,3407],{"class":76},[66,171008,171009],{"class":68,"line":241},[66,171010,109],{"emptyLinePlaceholder":108},[66,171012,171013,171015,171017,171020,171022,171024,171026,171028,171030,171032,171034],{"class":68,"line":372},[66,171014,158194],{"class":76},[66,171016,99],{"class":72},[66,171018,171019],{"class":76}," json.dumps(student, ",[66,171021,148903],{"class":1234},[66,171023,99],{"class":72},[66,171025,35775],{"class":102},[66,171027,307],{"class":76},[66,171029,153774],{"class":1234},[66,171031,99],{"class":72},[66,171033,795],{"class":102},[66,171035,313],{"class":76},[66,171037,171038,171040],{"class":68,"line":377},[66,171039,244],{"class":102},[66,171041,165630],{"class":76},[19,171043,171044],{},"写入 JSON 文件：",[57,171046,171048],{"className":59,"code":171047,"language":61,"meta":62,"style":62},"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",[23,171049,171050,171056,171060,171068,171096,171124,171128,171132,171162],{"__ignoreMap":62},[66,171051,171052,171054],{"class":68,"line":69},[66,171053,284],{"class":72},[66,171055,148857],{"class":76},[66,171057,171058],{"class":68,"line":80},[66,171059,109],{"emptyLinePlaceholder":108},[66,171061,171062,171064,171066],{"class":68,"line":112},[66,171063,683],{"class":76},[66,171065,99],{"class":72},[66,171067,57228],{"class":76},[66,171069,171070,171072,171074,171076,171078,171080,171082,171084,171086,171088,171090,171092,171094],{"class":68,"line":129},[66,171071,150151],{"class":76},[66,171073,64458],{"class":356},[66,171075,53221],{"class":76},[66,171077,691],{"class":356},[66,171079,307],{"class":76},[66,171081,70903],{"class":356},[66,171083,53221],{"class":76},[66,171085,2629],{"class":102},[66,171087,307],{"class":76},[66,171089,153234],{"class":356},[66,171091,53221],{"class":76},[66,171093,2964],{"class":102},[66,171095,6746],{"class":76},[66,171097,171098,171100,171102,171104,171106,171108,171110,171112,171114,171116,171118,171120,171122],{"class":68,"line":138},[66,171099,150151],{"class":76},[66,171101,64458],{"class":356},[66,171103,53221],{"class":76},[66,171105,696],{"class":356},[66,171107,307],{"class":76},[66,171109,70903],{"class":356},[66,171111,53221],{"class":76},[66,171113,2604],{"class":102},[66,171115,307],{"class":76},[66,171117,153234],{"class":356},[66,171119,53221],{"class":76},[66,171121,2790],{"class":102},[66,171123,6746],{"class":76},[66,171125,171126],{"class":68,"line":227},[66,171127,704],{"class":76},[66,171129,171130],{"class":68,"line":236},[66,171131,109],{"emptyLinePlaceholder":108},[66,171133,171134,171136,171138,171140,171142,171144,171146,171148,171150,171152,171154,171156,171158,171160],{"class":68,"line":241},[66,171135,109606],{"class":72},[66,171137,148557],{"class":102},[66,171139,348],{"class":76},[66,171141,153593],{"class":356},[66,171143,307],{"class":76},[66,171145,153738],{"class":356},[66,171147,307],{"class":76},[66,171149,148572],{"class":1234},[66,171151,99],{"class":72},[66,171153,148577],{"class":356},[66,171155,15519],{"class":76},[66,171157,33176],{"class":72},[66,171159,149919],{"class":1234},[66,171161,126],{"class":76},[66,171163,171164,171167,171169,171171,171173,171175,171177,171179,171181,171183,171185],{"class":68,"line":372},[66,171165,171166],{"class":76},"    json.dump(students, ",[66,171168,47140],{"class":1234},[66,171170,307],{"class":76},[66,171172,148903],{"class":1234},[66,171174,99],{"class":72},[66,171176,35775],{"class":102},[66,171178,307],{"class":76},[66,171180,153774],{"class":1234},[66,171182,99],{"class":72},[66,171184,795],{"class":102},[66,171186,313],{"class":76},[19,171188,171189],{},"读取 JSON 文件：",[57,171191,171193],{"className":59,"code":171192,"language":61,"meta":62,"style":62},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[23,171194,171195,171201,171205,171235,171247,171251],{"__ignoreMap":62},[66,171196,171197,171199],{"class":68,"line":69},[66,171198,284],{"class":72},[66,171200,148857],{"class":76},[66,171202,171203],{"class":68,"line":80},[66,171204,109],{"emptyLinePlaceholder":108},[66,171206,171207,171209,171211,171213,171215,171217,171219,171221,171223,171225,171227,171229,171231,171233],{"class":68,"line":112},[66,171208,109606],{"class":72},[66,171210,148557],{"class":102},[66,171212,348],{"class":76},[66,171214,153593],{"class":356},[66,171216,307],{"class":76},[66,171218,148567],{"class":356},[66,171220,307],{"class":76},[66,171222,148572],{"class":1234},[66,171224,99],{"class":72},[66,171226,148577],{"class":356},[66,171228,15519],{"class":76},[66,171230,33176],{"class":72},[66,171232,149919],{"class":1234},[66,171234,126],{"class":76},[66,171236,171237,171239,171241,171243,171245],{"class":68,"line":129},[66,171238,154797],{"class":76},[66,171240,99],{"class":72},[66,171242,149930],{"class":76},[66,171244,47140],{"class":1234},[66,171246,313],{"class":76},[66,171248,171249],{"class":68,"line":138},[66,171250,109],{"emptyLinePlaceholder":108},[66,171252,171253,171255],{"class":68,"line":227},[66,171254,244],{"class":102},[66,171256,166554],{"class":76},[14,171258,171260],{"id":171259},"_811-csv文件","8.11 CSV文件",[19,171262,171263],{},"CSV 是逗号分隔值，常用于表格数据。",[19,171265,171266],{},"写入 CSV：",[57,171268,171270],{"className":59,"code":171269,"language":61,"meta":62,"style":62},"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",[23,171271,171272,171279,171283,171291,171309,171325,171341,171345,171349,171389,171403],{"__ignoreMap":62},[66,171273,171274,171276],{"class":68,"line":69},[66,171275,284],{"class":72},[66,171277,171278],{"class":76}," csv\n",[66,171280,171281],{"class":68,"line":80},[66,171282,109],{"emptyLinePlaceholder":108},[66,171284,171285,171287,171289],{"class":68,"line":112},[66,171286,683],{"class":76},[66,171288,99],{"class":72},[66,171290,57228],{"class":76},[66,171292,171293,171296,171298,171300,171302,171304,171307],{"class":68,"line":129},[66,171294,171295],{"class":76},"    [",[66,171297,74878],{"class":356},[66,171299,307],{"class":76},[66,171301,74911],{"class":356},[66,171303,307],{"class":76},[66,171305,171306],{"class":356},"\"成绩\"",[66,171308,89612],{"class":76},[66,171310,171311,171313,171315,171317,171319,171321,171323],{"class":68,"line":138},[66,171312,171295],{"class":76},[66,171314,691],{"class":356},[66,171316,307],{"class":76},[66,171318,2629],{"class":102},[66,171320,307],{"class":76},[66,171322,2964],{"class":102},[66,171324,89612],{"class":76},[66,171326,171327,171329,171331,171333,171335,171337,171339],{"class":68,"line":227},[66,171328,171295],{"class":76},[66,171330,696],{"class":356},[66,171332,307],{"class":76},[66,171334,2604],{"class":102},[66,171336,307],{"class":76},[66,171338,2790],{"class":102},[66,171340,89612],{"class":76},[66,171342,171343],{"class":68,"line":236},[66,171344,704],{"class":76},[66,171346,171347],{"class":68,"line":241},[66,171348,109],{"emptyLinePlaceholder":108},[66,171350,171351,171353,171355,171357,171360,171362,171364,171366,171368,171370,171372,171374,171377,171379,171381,171383,171385,171387],{"class":68,"line":372},[66,171352,109606],{"class":72},[66,171354,148557],{"class":102},[66,171356,348],{"class":76},[66,171358,171359],{"class":356},"\"students.csv\"",[66,171361,307],{"class":76},[66,171363,153738],{"class":356},[66,171365,307],{"class":76},[66,171367,148572],{"class":1234},[66,171369,99],{"class":72},[66,171371,148577],{"class":356},[66,171373,307],{"class":76},[66,171375,171376],{"class":1234},"newline",[66,171378,99],{"class":72},[66,171380,9463],{"class":356},[66,171382,15519],{"class":76},[66,171384,33176],{"class":72},[66,171386,149919],{"class":1234},[66,171388,126],{"class":76},[66,171390,171391,171394,171396,171399,171401],{"class":68,"line":377},[66,171392,171393],{"class":76},"    writer ",[66,171395,99],{"class":72},[66,171397,171398],{"class":76}," csv.writer(",[66,171400,47140],{"class":1234},[66,171402,313],{"class":76},[66,171404,171405],{"class":68,"line":392},[66,171406,171407],{"class":76},"    writer.writerows(students)\n",[19,171409,171410],{},"读取 CSV：",[57,171412,171414],{"className":59,"code":171413,"language":61,"meta":62,"style":62},"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",[23,171415,171416,171422,171426,171456,171470,171482],{"__ignoreMap":62},[66,171417,171418,171420],{"class":68,"line":69},[66,171419,284],{"class":72},[66,171421,171278],{"class":76},[66,171423,171424],{"class":68,"line":80},[66,171425,109],{"emptyLinePlaceholder":108},[66,171427,171428,171430,171432,171434,171436,171438,171440,171442,171444,171446,171448,171450,171452,171454],{"class":68,"line":112},[66,171429,109606],{"class":72},[66,171431,148557],{"class":102},[66,171433,348],{"class":76},[66,171435,171359],{"class":356},[66,171437,307],{"class":76},[66,171439,148567],{"class":356},[66,171441,307],{"class":76},[66,171443,148572],{"class":1234},[66,171445,99],{"class":72},[66,171447,148577],{"class":356},[66,171449,15519],{"class":76},[66,171451,33176],{"class":72},[66,171453,149919],{"class":1234},[66,171455,126],{"class":76},[66,171457,171458,171461,171463,171466,171468],{"class":68,"line":129},[66,171459,171460],{"class":76},"    reader ",[66,171462,99],{"class":72},[66,171464,171465],{"class":76}," csv.reader(",[66,171467,47140],{"class":1234},[66,171469,313],{"class":76},[66,171471,171472,171474,171477,171479],{"class":68,"line":138},[66,171473,1083],{"class":72},[66,171475,171476],{"class":76}," row ",[66,171478,507],{"class":72},[66,171480,171481],{"class":76}," reader:\n",[66,171483,171484,171486],{"class":68,"line":227},[66,171485,395],{"class":102},[66,171487,171488],{"class":76},"(row)\n",[19,171490,171491],{},"使用字典写入：",[57,171493,171495],{"className":59,"code":171494,"language":61,"meta":62,"style":62},"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",[23,171496,171497,171503,171507,171515,171543,171571,171575,171579,171617,171638,171659,171664],{"__ignoreMap":62},[66,171498,171499,171501],{"class":68,"line":69},[66,171500,284],{"class":72},[66,171502,171278],{"class":76},[66,171504,171505],{"class":68,"line":80},[66,171506,109],{"emptyLinePlaceholder":108},[66,171508,171509,171511,171513],{"class":68,"line":112},[66,171510,683],{"class":76},[66,171512,99],{"class":72},[66,171514,57228],{"class":76},[66,171516,171517,171519,171521,171523,171525,171527,171529,171531,171533,171535,171537,171539,171541],{"class":68,"line":129},[66,171518,150151],{"class":76},[66,171520,64458],{"class":356},[66,171522,53221],{"class":76},[66,171524,691],{"class":356},[66,171526,307],{"class":76},[66,171528,70903],{"class":356},[66,171530,53221],{"class":76},[66,171532,2629],{"class":102},[66,171534,307],{"class":76},[66,171536,153234],{"class":356},[66,171538,53221],{"class":76},[66,171540,2964],{"class":102},[66,171542,6746],{"class":76},[66,171544,171545,171547,171549,171551,171553,171555,171557,171559,171561,171563,171565,171567,171569],{"class":68,"line":138},[66,171546,150151],{"class":76},[66,171548,64458],{"class":356},[66,171550,53221],{"class":76},[66,171552,696],{"class":356},[66,171554,307],{"class":76},[66,171556,70903],{"class":356},[66,171558,53221],{"class":76},[66,171560,2604],{"class":102},[66,171562,307],{"class":76},[66,171564,153234],{"class":356},[66,171566,53221],{"class":76},[66,171568,2790],{"class":102},[66,171570,6746],{"class":76},[66,171572,171573],{"class":68,"line":227},[66,171574,704],{"class":76},[66,171576,171577],{"class":68,"line":236},[66,171578,109],{"emptyLinePlaceholder":108},[66,171580,171581,171583,171585,171587,171589,171591,171593,171595,171597,171599,171601,171603,171605,171607,171609,171611,171613,171615],{"class":68,"line":241},[66,171582,109606],{"class":72},[66,171584,148557],{"class":102},[66,171586,348],{"class":76},[66,171588,171359],{"class":356},[66,171590,307],{"class":76},[66,171592,153738],{"class":356},[66,171594,307],{"class":76},[66,171596,148572],{"class":1234},[66,171598,99],{"class":72},[66,171600,148577],{"class":356},[66,171602,307],{"class":76},[66,171604,171376],{"class":1234},[66,171606,99],{"class":72},[66,171608,9463],{"class":356},[66,171610,15519],{"class":76},[66,171612,33176],{"class":72},[66,171614,149919],{"class":1234},[66,171616,126],{"class":76},[66,171618,171619,171622,171624,171626,171628,171630,171632,171634,171636],{"class":68,"line":372},[66,171620,171621],{"class":76},"    fieldnames ",[66,171623,99],{"class":72},[66,171625,688],{"class":76},[66,171627,64458],{"class":356},[66,171629,307],{"class":76},[66,171631,70903],{"class":356},[66,171633,307],{"class":76},[66,171635,153234],{"class":356},[66,171637,704],{"class":76},[66,171639,171640,171642,171644,171647,171649,171651,171654,171656],{"class":68,"line":377},[66,171641,171393],{"class":76},[66,171643,99],{"class":72},[66,171645,171646],{"class":76}," csv.DictWriter(",[66,171648,47140],{"class":1234},[66,171650,307],{"class":76},[66,171652,171653],{"class":1234},"fieldnames",[66,171655,99],{"class":72},[66,171657,171658],{"class":76},"fieldnames)\n",[66,171660,171661],{"class":68,"line":392},[66,171662,171663],{"class":76},"    writer.writeheader()\n",[66,171665,171666],{"class":68,"line":405},[66,171667,171407],{"class":76},[14,171669,171671],{"id":171670},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,171673,1472],{},[31,171675,171676,171679,171682],{},[34,171677,171678],{},"读取文本文件。",[34,171680,171681],{},"统计每个单词出现次数。",[34,171683,171684],{},"输出出现次数最多的前 10 个单词。",[19,171686,1486],{},[57,171688,171690],{"className":59,"code":171689,"language":61,"meta":62,"style":62},"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",[23,171691,171692,171702,171706,171719,171735,171739,171749,171758,171762,171774,171794,171803,171807,171825,171829,171859,171863,171879],{"__ignoreMap":62},[66,171693,171694,171696,171698,171700],{"class":68,"line":69},[66,171695,32532],{"class":72},[66,171697,110084],{"class":76},[66,171699,284],{"class":72},[66,171701,110089],{"class":76},[66,171703,171704],{"class":68,"line":80},[66,171705,109],{"emptyLinePlaceholder":108},[66,171707,171708,171710,171712,171714,171717],{"class":68,"line":112},[66,171709,169870],{"class":76},[66,171711,99],{"class":72},[66,171713,110318],{"class":76},[66,171715,171716],{"class":356},"\"article.txt\"",[66,171718,313],{"class":76},[66,171720,171721,171723,171725,171727,171729,171731,171733],{"class":68,"line":129},[66,171722,170053],{"class":76},[66,171724,99],{"class":72},[66,171726,170930],{"class":76},[66,171728,148572],{"class":1234},[66,171730,99],{"class":72},[66,171732,148577],{"class":356},[66,171734,313],{"class":76},[66,171736,171737],{"class":68,"line":138},[66,171738,109],{"emptyLinePlaceholder":108},[66,171740,171741,171744,171746],{"class":68,"line":227},[66,171742,171743],{"class":76},"words ",[66,171745,99],{"class":72},[66,171747,171748],{"class":76}," content.lower().split()\n",[66,171750,171751,171754,171756],{"class":68,"line":236},[66,171752,171753],{"class":76},"counter ",[66,171755,99],{"class":72},[66,171757,89644],{"class":76},[66,171759,171760],{"class":68,"line":241},[66,171761,109],{"emptyLinePlaceholder":108},[66,171763,171764,171766,171769,171771],{"class":68,"line":372},[66,171765,502],{"class":72},[66,171767,171768],{"class":76}," word ",[66,171770,507],{"class":72},[66,171772,171773],{"class":76}," words:\n",[66,171775,171776,171779,171781,171784,171787,171789,171792],{"class":68,"line":377},[66,171777,171778],{"class":76},"    word ",[66,171780,99],{"class":72},[66,171782,171783],{"class":76}," word.strip(",[66,171785,171786],{"class":356},"\".,!?;:",[66,171788,158245],{"class":102},[66,171790,171791],{"class":356},"'()[]\"",[66,171793,313],{"class":76},[66,171795,171796,171798,171800],{"class":68,"line":392},[66,171797,380],{"class":72},[66,171799,40718],{"class":72},[66,171801,171802],{"class":76}," word:\n",[66,171804,171805],{"class":68,"line":405},[66,171806,609],{"class":72},[66,171808,171809,171812,171814,171817,171819,171821,171823],{"class":68,"line":418},[66,171810,171811],{"class":76},"    counter[word] ",[66,171813,99],{"class":72},[66,171815,171816],{"class":76}," counter.get(word, ",[66,171818,2183],{"class":102},[66,171820,15519],{"class":76},[66,171822,1184],{"class":72},[66,171824,103],{"class":102},[66,171826,171827],{"class":68,"line":430},[66,171828,109],{"emptyLinePlaceholder":108},[66,171830,171831,171834,171836,171838,171841,171843,171845,171847,171849,171851,171853,171855,171857],{"class":68,"line":438},[66,171832,171833],{"class":76},"items ",[66,171835,99],{"class":72},[66,171837,165163],{"class":102},[66,171839,171840],{"class":76},"(counter.items(), ",[66,171842,155698],{"class":1234},[66,171844,155701],{"class":72},[66,171846,155704],{"class":76},[66,171848,304],{"class":102},[66,171850,113973],{"class":76},[66,171852,165087],{"class":1234},[66,171854,99],{"class":72},[66,171856,33269],{"class":102},[66,171858,313],{"class":76},[66,171860,171861],{"class":68,"line":465},[66,171862,109],{"emptyLinePlaceholder":108},[66,171864,171865,171867,171870,171872,171875,171877],{"class":68,"line":1805},[66,171866,502],{"class":72},[66,171868,171869],{"class":76}," word, count ",[66,171871,507],{"class":72},[66,171873,171874],{"class":76}," items[:",[66,171876,790],{"class":102},[66,171878,167314],{"class":76},[66,171880,171881,171883],{"class":68,"line":1817},[66,171882,132],{"class":102},[66,171884,171885],{"class":76},"(word, count)\n",[14,171887,171889],{"id":171888},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[57,171891,171893],{"className":59,"code":171892,"language":61,"meta":62,"style":62},"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",[23,171894,171895,171901,171911,171915,171927,171931,171935,171943,171953,171959,171963,171993,172003,172007,172011,172019,172049,172073,172077,172081,172089,172118,172123],{"__ignoreMap":62},[66,171896,171897,171899],{"class":68,"line":69},[66,171898,284],{"class":72},[66,171900,148857],{"class":76},[66,171902,171903,171905,171907,171909],{"class":68,"line":80},[66,171904,32532],{"class":72},[66,171906,110084],{"class":76},[66,171908,284],{"class":72},[66,171910,110089],{"class":76},[66,171912,171913],{"class":68,"line":112},[66,171914,109],{"emptyLinePlaceholder":108},[66,171916,171917,171919,171921,171923,171925],{"class":68,"line":129},[66,171918,153586],{"class":102},[66,171920,15369],{"class":72},[66,171922,110318],{"class":76},[66,171924,153593],{"class":356},[66,171926,313],{"class":76},[66,171928,171929],{"class":68,"line":138},[66,171930,109],{"emptyLinePlaceholder":108},[66,171932,171933],{"class":68,"line":227},[66,171934,109],{"emptyLinePlaceholder":108},[66,171936,171937,171939,171941],{"class":68,"line":236},[66,171938,33739],{"class":72},[66,171940,153610],{"class":3793},[66,171942,33745],{"class":76},[66,171944,171945,171947,171949,171951],{"class":68,"line":241},[66,171946,380],{"class":72},[66,171948,40718],{"class":72},[66,171950,153621],{"class":102},[66,171952,153624],{"class":76},[66,171954,171955,171957],{"class":68,"line":372},[66,171956,16557],{"class":72},[66,171958,53622],{"class":76},[66,171960,171961],{"class":68,"line":377},[66,171962,109],{"emptyLinePlaceholder":108},[66,171964,171965,171967,171969,171971,171973,171975,171977,171979,171981,171983,171985,171987,171989,171991],{"class":68,"line":392},[66,171966,35966],{"class":72},[66,171968,148557],{"class":102},[66,171970,348],{"class":76},[66,171972,153586],{"class":102},[66,171974,307],{"class":76},[66,171976,148567],{"class":356},[66,171978,307],{"class":76},[66,171980,148572],{"class":1234},[66,171982,99],{"class":72},[66,171984,148577],{"class":356},[66,171986,15519],{"class":76},[66,171988,33176],{"class":72},[66,171990,149919],{"class":1234},[66,171992,126],{"class":76},[66,171994,171995,171997,171999,172001],{"class":68,"line":405},[66,171996,16557],{"class":72},[66,171998,149930],{"class":76},[66,172000,47140],{"class":1234},[66,172002,313],{"class":76},[66,172004,172005],{"class":68,"line":418},[66,172006,109],{"emptyLinePlaceholder":108},[66,172008,172009],{"class":68,"line":430},[66,172010,109],{"emptyLinePlaceholder":108},[66,172012,172013,172015,172017],{"class":68,"line":438},[66,172014,33739],{"class":72},[66,172016,153720],{"class":3793},[66,172018,153723],{"class":76},[66,172020,172021,172023,172025,172027,172029,172031,172033,172035,172037,172039,172041,172043,172045,172047],{"class":68,"line":465},[66,172022,35966],{"class":72},[66,172024,148557],{"class":102},[66,172026,348],{"class":76},[66,172028,153586],{"class":102},[66,172030,307],{"class":76},[66,172032,153738],{"class":356},[66,172034,307],{"class":76},[66,172036,148572],{"class":1234},[66,172038,99],{"class":72},[66,172040,148577],{"class":356},[66,172042,15519],{"class":76},[66,172044,33176],{"class":72},[66,172046,149919],{"class":1234},[66,172048,126],{"class":76},[66,172050,172051,172053,172055,172057,172059,172061,172063,172065,172067,172069,172071],{"class":68,"line":1805},[66,172052,153759],{"class":76},[66,172054,47140],{"class":1234},[66,172056,307],{"class":76},[66,172058,148903],{"class":1234},[66,172060,99],{"class":72},[66,172062,35775],{"class":102},[66,172064,307],{"class":76},[66,172066,153774],{"class":1234},[66,172068,99],{"class":72},[66,172070,795],{"class":102},[66,172072,313],{"class":76},[66,172074,172075],{"class":68,"line":1817},[66,172076,109],{"emptyLinePlaceholder":108},[66,172078,172079],{"class":68,"line":1822},[66,172080,109],{"emptyLinePlaceholder":108},[66,172082,172083,172085,172087],{"class":68,"line":1829},[66,172084,683],{"class":76},[66,172086,99],{"class":72},[66,172088,154802],{"class":76},[66,172090,172091,172094,172096,172098,172100,172102,172104,172106,172108,172110,172112,172114,172116],{"class":68,"line":3529},[66,172092,172093],{"class":76},"students.append({",[66,172095,64458],{"class":356},[66,172097,53221],{"class":76},[66,172099,691],{"class":356},[66,172101,307],{"class":76},[66,172103,70903],{"class":356},[66,172105,53221],{"class":76},[66,172107,2629],{"class":102},[66,172109,307],{"class":76},[66,172111,153234],{"class":356},[66,172113,53221],{"class":76},[66,172115,2964],{"class":102},[66,172117,166711],{"class":76},[66,172119,172120],{"class":68,"line":3557},[66,172121,172122],{"class":76},"save_students(students)\n",[66,172124,172125,172127,172129,172132],{"class":68,"line":3562},[66,172126,244],{"class":102},[66,172128,348],{"class":76},[66,172130,172131],{"class":356},"\"保存成功\"",[66,172133,313],{"class":76},[14,172135,172137],{"id":172136},"_814-易错点","8.14 易错点",[31,172139,172140,172144,172150,172155,172162,172169],{},[34,172141,172142,170403],{},[23,172143,2774],{},[34,172145,172146,172147,158],{},"读写中文要指定 ",[23,172148,172149],{},"encoding=\"utf-8\"",[34,172151,172152,172153,158],{},"打开文件后要关闭，推荐使用 ",[23,172154,109606],{},[34,172156,172157,172158,172161],{},"读取大文件不要直接 ",[23,172159,172160],{},"read()"," 全部内容。",[34,172163,172164,172165,172168],{},"Windows 写 CSV 时建议加 ",[23,172166,172167],{},"newline=\"\"","，避免空行。",[34,172170,172171],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,172173,172175],{"id":172174},"_815-本章练习","8.15 本章练习",[31,172177,172178,172185,172190,172193,172196],{},[34,172179,172180,172181,172184],{},"写入一个 ",[23,172182,172183],{},"students.txt","，每行保存一个学生姓名。",[34,172186,106128,172187,172189],{},[23,172188,172183],{}," 并输出所有学生。",[34,172191,172192],{},"把学生列表保存为 JSON 文件。",[34,172194,172195],{},"从 JSON 文件读取学生数据，计算平均分。",[34,172197,172198,172199,172202,172203,172206],{},"写一个日志函数 ",[23,172200,172201],{},"write_log(message)","，每次调用向 ",[23,172204,172205],{},"app.log"," 追加一行。",[1903,172208,172209],{},"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":62,"searchDepth":80,"depth":80,"links":172211},[172212,172213,172217,172218,172224,172225,172226,172227,172228,172229,172230,172231,172232,172233,172234],{"id":169723,"depth":80,"text":169724},{"id":169764,"depth":80,"text":169765,"children":172214},[172215,172216],{"id":169768,"depth":112,"text":169769},{"id":169802,"depth":112,"text":169803},{"id":169916,"depth":80,"text":169917},{"id":170009,"depth":80,"text":170010,"children":172219},[172220,172221,172222,172223],{"id":170013,"depth":112,"text":170014},{"id":170100,"depth":112,"text":170101},{"id":170170,"depth":112,"text":170171},{"id":170264,"depth":112,"text":170265},{"id":170334,"depth":80,"text":170335},{"id":170397,"depth":80,"text":170398},{"id":170558,"depth":80,"text":170559},{"id":170621,"depth":80,"text":170622},{"id":170737,"depth":80,"text":170738},{"id":170947,"depth":80,"text":170948},{"id":171259,"depth":80,"text":171260},{"id":171670,"depth":80,"text":171671},{"id":171888,"depth":80,"text":171889},{"id":172136,"depth":80,"text":172137},{"id":172174,"depth":80,"text":172175},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":169715,"description":1926},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":172241,"title":172242,"body":172243,"description":1926,"extension":1927,"meta":174429,"navigation":108,"path":174430,"seo":174431,"stem":174432,"__hash__":174433},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":172244,"toc":174396},[172245,172248,172252,172255,172258,172350,172352,172371,172376,172380,172383,172386,172415,172422,172425,172429,172432,172461,172463,172515,172521,172574,172578,172676,172679,172746,172750,172807,172809,172815,172819,172824,172830,172921,172926,172930,172933,173011,173014,173052,173056,173174,173177,173181,173184,173229,173232,173236,173241,173247,173297,173300,173331,173335,173339,173369,173373,173408,173412,173447,173487,173491,173507,173510,173514,173518,173597,173601,173642,173646,173701,173705,173739,173743,173773,173782,173789,173795,173852,173855,173863,173866,173870,173877,173880,173886,173889,173906,173911,173915,173921,173934,173937,173974,173977,173988,173991,174005,174008,174022,174026,174033,174066,174069,174071,174077,174080,174084,174086,174092,174097,174270,174274,174337,174341,174365,174369,174393],[10,172246,172242],{"id":172247},"_9-异常模块与包",[14,172249,172251],{"id":172250},"_91-什么是异常","9.1 什么是异常",[19,172253,172254],{},"异常是程序运行过程中出现的错误。",[19,172256,172257],{},"常见异常：",[2129,172259,172260,172269],{},[2132,172261,172262],{},[2135,172263,172264,172267],{},[2138,172265,172266],{},"异常",[2138,172268,27671],{},[2176,172270,172271,172281,172291,172300,172310,172320,172330,172340],{},[2135,172272,172273,172278],{},[2181,172274,172275],{},[23,172276,172277],{},"NameError",[2181,172279,172280],{},"使用了未定义变量",[2135,172282,172283,172288],{},[2181,172284,172285],{},[23,172286,172287],{},"TypeError",[2181,172289,172290],{},"类型不匹配",[2135,172292,172293,172297],{},[2181,172294,172295],{},[23,172296,156585],{},[2181,172298,172299],{},"值不合法",[2135,172301,172302,172307],{},[2181,172303,172304],{},[23,172305,172306],{},"IndexError",[2181,172308,172309],{},"列表索引越界",[2135,172311,172312,172317],{},[2181,172313,172314],{},[23,172315,172316],{},"KeyError",[2181,172318,172319],{},"字典 key 不存在",[2135,172321,172322,172327],{},[2181,172323,172324],{},[23,172325,172326],{},"FileNotFoundError",[2181,172328,172329],{},"文件不存在",[2135,172331,172332,172337],{},[2181,172333,172334],{},[23,172335,172336],{},"ZeroDivisionError",[2181,172338,172339],{},"除数为 0",[2135,172341,172342,172347],{},[2181,172343,172344],{},[23,172345,172346],{},"ImportError",[2181,172348,172349],{},"导入失败",[19,172351,86],{},[57,172353,172355],{"className":59,"code":172354,"language":61,"meta":62,"style":62},"num = int(\"abc\")\n",[23,172356,172357],{"__ignoreMap":62},[66,172358,172359,172361,172363,172365,172367,172369],{"class":68,"line":69},[66,172360,157537],{"class":76},[66,172362,99],{"class":72},[66,172364,345],{"class":102},[66,172366,348],{"class":76},[66,172368,157630],{"class":356},[66,172370,313],{"class":76},[19,172372,172373,172374,158],{},"会触发 ",[23,172375,156585],{},[14,172377,172379],{"id":172378},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,172381,172382],{},"如果不处理异常，程序会直接终止。",[19,172384,172385],{},"例如用户输入年龄：",[57,172387,172389],{"className":59,"code":172388,"language":61,"meta":62,"style":62},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[23,172390,172391,172409],{"__ignoreMap":62},[66,172392,172393,172395,172397,172399,172401,172403,172405,172407],{"class":68,"line":69},[66,172394,148313],{"class":76},[66,172396,99],{"class":72},[66,172398,345],{"class":102},[66,172400,348],{"class":76},[66,172402,351],{"class":102},[66,172404,348],{"class":76},[66,172406,154154],{"class":356},[66,172408,360],{"class":76},[66,172410,172411,172413],{"class":68,"line":80},[66,172412,244],{"class":102},[66,172414,157511],{"class":76},[19,172416,172417,172418,172421],{},"用户输入 ",[23,172419,172420],{},"abc","，程序就会报错退出。",[19,172423,172424],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,172426,172428],{"id":172427},"_93-try-except","9.3 try except",[19,172430,172431],{},"基础语法：",[57,172433,172435],{"className":59,"code":172434,"language":61,"meta":62,"style":62},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[23,172436,172437,172444,172449,172456],{"__ignoreMap":62},[66,172438,172439,172442],{"class":68,"line":69},[66,172440,172441],{"class":72},"try",[66,172443,126],{"class":76},[66,172445,172446],{"class":68,"line":80},[66,172447,172448],{"class":76},"    可能出错的代码\n",[66,172450,172451,172454],{"class":68,"line":112},[66,172452,172453],{"class":72},"except",[66,172455,126],{"class":76},[66,172457,172458],{"class":68,"line":129},[66,172459,172460],{"class":76},"    出错后的处理代码\n",[19,172462,86],{},[57,172464,172466],{"className":59,"code":172465,"language":61,"meta":62,"style":62},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[23,172467,172468,172474,172492,172498,172504],{"__ignoreMap":62},[66,172469,172470,172472],{"class":68,"line":69},[66,172471,172441],{"class":72},[66,172473,126],{"class":76},[66,172475,172476,172478,172480,172482,172484,172486,172488,172490],{"class":68,"line":80},[66,172477,154146],{"class":76},[66,172479,99],{"class":72},[66,172481,345],{"class":102},[66,172483,348],{"class":76},[66,172485,351],{"class":102},[66,172487,348],{"class":76},[66,172489,154154],{"class":356},[66,172491,360],{"class":76},[66,172493,172494,172496],{"class":68,"line":112},[66,172495,132],{"class":102},[66,172497,157511],{"class":76},[66,172499,172500,172502],{"class":68,"line":129},[66,172501,172453],{"class":72},[66,172503,126],{"class":76},[66,172505,172506,172508,172510,172513],{"class":68,"line":138},[66,172507,132],{"class":102},[66,172509,348],{"class":76},[66,172511,172512],{"class":356},"\"年龄必须是数字\"",[66,172514,313],{"class":76},[19,172516,172517,172518,172520],{},"不建议裸写 ",[23,172519,172453],{},"，最好指定异常类型。",[57,172522,172524],{"className":59,"code":172523,"language":61,"meta":62,"style":62},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[23,172525,172526,172532,172550,172556,172564],{"__ignoreMap":62},[66,172527,172528,172530],{"class":68,"line":69},[66,172529,172441],{"class":72},[66,172531,126],{"class":76},[66,172533,172534,172536,172538,172540,172542,172544,172546,172548],{"class":68,"line":80},[66,172535,154146],{"class":76},[66,172537,99],{"class":72},[66,172539,345],{"class":102},[66,172541,348],{"class":76},[66,172543,351],{"class":102},[66,172545,348],{"class":76},[66,172547,154154],{"class":356},[66,172549,360],{"class":76},[66,172551,172552,172554],{"class":68,"line":112},[66,172553,132],{"class":102},[66,172555,157511],{"class":76},[66,172557,172558,172560,172562],{"class":68,"line":129},[66,172559,172453],{"class":72},[66,172561,153986],{"class":102},[66,172563,126],{"class":76},[66,172565,172566,172568,172570,172572],{"class":68,"line":138},[66,172567,132],{"class":102},[66,172569,348],{"class":76},[66,172571,172512],{"class":356},[66,172573,313],{"class":76},[14,172575,172577],{"id":172576},"_94-捕获多个异常","9.4 捕获多个异常",[57,172579,172581],{"className":59,"code":172580,"language":61,"meta":62,"style":62},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[23,172582,172583,172589,172610,172630,172637,172645,172656,172665],{"__ignoreMap":62},[66,172584,172585,172587],{"class":68,"line":69},[66,172586,172441],{"class":72},[66,172588,126],{"class":76},[66,172590,172591,172594,172596,172598,172600,172602,172604,172606,172608],{"class":68,"line":80},[66,172592,172593],{"class":76},"    nums ",[66,172595,99],{"class":72},[66,172597,688],{"class":76},[66,172599,304],{"class":102},[66,172601,307],{"class":76},[66,172603,795],{"class":102},[66,172605,307],{"class":76},[66,172607,1520],{"class":102},[66,172609,704],{"class":76},[66,172611,172612,172615,172617,172619,172621,172623,172625,172628],{"class":68,"line":112},[66,172613,172614],{"class":76},"    index ",[66,172616,99],{"class":72},[66,172618,345],{"class":102},[66,172620,348],{"class":76},[66,172622,351],{"class":102},[66,172624,348],{"class":76},[66,172626,172627],{"class":356},"\"请输入索引:\"",[66,172629,360],{"class":76},[66,172631,172632,172634],{"class":68,"line":129},[66,172633,132],{"class":102},[66,172635,172636],{"class":76},"(nums[index])\n",[66,172638,172639,172641,172643],{"class":68,"line":138},[66,172640,172453],{"class":72},[66,172642,153986],{"class":102},[66,172644,126],{"class":76},[66,172646,172647,172649,172651,172654],{"class":68,"line":227},[66,172648,132],{"class":102},[66,172650,348],{"class":76},[66,172652,172653],{"class":356},"\"索引必须是整数\"",[66,172655,313],{"class":76},[66,172657,172658,172660,172663],{"class":68,"line":236},[66,172659,172453],{"class":72},[66,172661,172662],{"class":102}," IndexError",[66,172664,126],{"class":76},[66,172666,172667,172669,172671,172674],{"class":68,"line":241},[66,172668,132],{"class":102},[66,172670,348],{"class":76},[66,172672,172673],{"class":356},"\"索引越界\"",[66,172675,313],{"class":76},[19,172677,172678],{},"多个异常使用相同处理逻辑：",[57,172680,172682],{"className":59,"code":172681,"language":61,"meta":62,"style":62},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[23,172683,172684,172690,172708,172721,172735],{"__ignoreMap":62},[66,172685,172686,172688],{"class":68,"line":69},[66,172687,172441],{"class":72},[66,172689,126],{"class":76},[66,172691,172692,172694,172696,172698,172700,172702,172704,172706],{"class":68,"line":80},[66,172693,47379],{"class":76},[66,172695,99],{"class":72},[66,172697,345],{"class":102},[66,172699,348],{"class":76},[66,172701,351],{"class":102},[66,172703,348],{"class":76},[66,172705,157546],{"class":356},[66,172707,360],{"class":76},[66,172709,172710,172712,172714,172716,172718],{"class":68,"line":112},[66,172711,132],{"class":102},[66,172713,348],{"class":76},[66,172715,790],{"class":102},[66,172717,157796],{"class":72},[66,172719,172720],{"class":76}," num)\n",[66,172722,172723,172725,172727,172729,172731,172733],{"class":68,"line":129},[66,172724,172453],{"class":72},[66,172726,3492],{"class":76},[66,172728,156585],{"class":102},[66,172730,307],{"class":76},[66,172732,172336],{"class":102},[66,172734,522],{"class":76},[66,172736,172737,172739,172741,172744],{"class":68,"line":138},[66,172738,132],{"class":102},[66,172740,348],{"class":76},[66,172742,172743],{"class":356},"\"输入不合法\"",[66,172745,313],{"class":76},[14,172747,172749],{"id":172748},"_95-获取异常信息","9.5 获取异常信息",[57,172751,172753],{"className":59,"code":172752,"language":61,"meta":62,"style":62},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[23,172754,172755,172761,172775,172786],{"__ignoreMap":62},[66,172756,172757,172759],{"class":68,"line":69},[66,172758,172441],{"class":72},[66,172760,126],{"class":76},[66,172762,172763,172765,172767,172769,172771,172773],{"class":68,"line":80},[66,172764,47379],{"class":76},[66,172766,99],{"class":72},[66,172768,345],{"class":102},[66,172770,348],{"class":76},[66,172772,157630],{"class":356},[66,172774,313],{"class":76},[66,172776,172777,172779,172781,172783],{"class":68,"line":112},[66,172778,172453],{"class":72},[66,172780,153986],{"class":102},[66,172782,66383],{"class":72},[66,172784,172785],{"class":76}," e:\n",[66,172787,172788,172790,172792,172794,172797,172799,172801,172803,172805],{"class":68,"line":129},[66,172789,132],{"class":102},[66,172791,348],{"class":76},[66,172793,445],{"class":72},[66,172795,172796],{"class":356},"\"出错了:",[66,172798,451],{"class":102},[66,172800,2068],{"class":76},[66,172802,457],{"class":102},[66,172804,1130],{"class":356},[66,172806,313],{"class":76},[19,172808,549],{},[57,172810,172813],{"className":172811,"code":172812,"language":555,"meta":62},[553],"出错了:invalid literal for int() with base 10: 'abc'\n",[23,172814,172812],{"__ignoreMap":62},[14,172816,172818],{"id":172817},"_96-else和finally","9.6 else和finally",[19,172820,172821,172823],{},[23,172822,1292],{},"：没有异常时执行。",[19,172825,172826,172829],{},[23,172827,172828],{},"finally","：无论是否异常都会执行。",[57,172831,172833],{"className":59,"code":172832,"language":61,"meta":62,"style":62},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[23,172834,172835,172841,172859,172867,172877,172883,172904,172910],{"__ignoreMap":62},[66,172836,172837,172839],{"class":68,"line":69},[66,172838,172441],{"class":72},[66,172840,126],{"class":76},[66,172842,172843,172845,172847,172849,172851,172853,172855,172857],{"class":68,"line":80},[66,172844,47379],{"class":76},[66,172846,99],{"class":72},[66,172848,345],{"class":102},[66,172850,348],{"class":76},[66,172852,351],{"class":102},[66,172854,348],{"class":76},[66,172856,157546],{"class":356},[66,172858,360],{"class":76},[66,172860,172861,172863,172865],{"class":68,"line":112},[66,172862,172453],{"class":72},[66,172864,153986],{"class":102},[66,172866,126],{"class":76},[66,172868,172869,172871,172873,172875],{"class":68,"line":129},[66,172870,132],{"class":102},[66,172872,348],{"class":76},[66,172874,1836],{"class":356},[66,172876,313],{"class":76},[66,172878,172879,172881],{"class":68,"line":138},[66,172880,1292],{"class":72},[66,172882,126],{"class":76},[66,172884,172885,172887,172889,172891,172894,172896,172898,172900,172902],{"class":68,"line":227},[66,172886,132],{"class":102},[66,172888,348],{"class":76},[66,172890,445],{"class":72},[66,172892,172893],{"class":356},"\"输入正确:",[66,172895,451],{"class":102},[66,172897,3499],{"class":76},[66,172899,457],{"class":102},[66,172901,1130],{"class":356},[66,172903,313],{"class":76},[66,172905,172906,172908],{"class":68,"line":236},[66,172907,172828],{"class":72},[66,172909,126],{"class":76},[66,172911,172912,172914,172916,172919],{"class":68,"line":241},[66,172913,132],{"class":102},[66,172915,348],{"class":76},[66,172917,172918],{"class":356},"\"程序结束\"",[66,172920,313],{"class":76},[19,172922,172923,172925],{},[23,172924,172828],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,172927,172929],{"id":172928},"_97-抛出异常","9.7 抛出异常",[19,172931,172932],{},"程序可以主动抛出异常。",[57,172934,172936],{"className":59,"code":172935,"language":61,"meta":62,"style":62},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[23,172937,172938,172947,172959,172972,172992,172996,173000],{"__ignoreMap":62},[66,172939,172940,172942,172945],{"class":68,"line":69},[66,172941,33739],{"class":72},[66,172943,172944],{"class":3793}," set_age",[66,172946,162974],{"class":76},[66,172948,172949,172951,172953,172955,172957],{"class":68,"line":80},[66,172950,380],{"class":72},[66,172952,17510],{"class":76},[66,172954,413],{"class":72},[66,172956,962],{"class":102},[66,172958,126],{"class":76},[66,172960,172961,172963,172965,172967,172970],{"class":68,"line":112},[66,172962,105205],{"class":72},[66,172964,153986],{"class":102},[66,172966,348],{"class":76},[66,172968,172969],{"class":356},"\"年龄不能为负数\"",[66,172971,313],{"class":76},[66,172973,172974,172976,172978,172980,172982,172984,172986,172988,172990],{"class":68,"line":129},[66,172975,132],{"class":102},[66,172977,348],{"class":76},[66,172979,445],{"class":72},[66,172981,163542],{"class":356},[66,172983,451],{"class":102},[66,172985,72000],{"class":76},[66,172987,457],{"class":102},[66,172989,1130],{"class":356},[66,172991,313],{"class":76},[66,172993,172994],{"class":68,"line":138},[66,172995,109],{"emptyLinePlaceholder":108},[66,172997,172998],{"class":68,"line":227},[66,172999,109],{"emptyLinePlaceholder":108},[66,173001,173002,173005,173007,173009],{"class":68,"line":236},[66,173003,173004],{"class":76},"set_age(",[66,173006,2511],{"class":72},[66,173008,304],{"class":102},[66,173010,313],{"class":76},[19,173012,173013],{},"调用者可以捕获：",[57,173015,173017],{"className":59,"code":173016,"language":61,"meta":62,"style":62},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[23,173018,173019,173025,173036,173046],{"__ignoreMap":62},[66,173020,173021,173023],{"class":68,"line":69},[66,173022,172441],{"class":72},[66,173024,126],{"class":76},[66,173026,173027,173030,173032,173034],{"class":68,"line":80},[66,173028,173029],{"class":76},"    set_age(",[66,173031,2511],{"class":72},[66,173033,304],{"class":102},[66,173035,313],{"class":76},[66,173037,173038,173040,173042,173044],{"class":68,"line":112},[66,173039,172453],{"class":72},[66,173041,153986],{"class":102},[66,173043,66383],{"class":72},[66,173045,172785],{"class":76},[66,173047,173048,173050],{"class":68,"line":129},[66,173049,132],{"class":102},[66,173051,68778],{"class":76},[14,173053,173055],{"id":173054},"_98-自定义异常","9.8 自定义异常",[57,173057,173059],{"className":59,"code":173058,"language":61,"meta":62,"style":62},"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",[23,173060,173061,173075,173079,173083,173087,173095,173105,173116,173126,173130,173134,173140,173157,173168],{"__ignoreMap":62},[66,173062,173063,173065,173068,173070,173073],{"class":68,"line":69},[66,173064,16499],{"class":72},[66,173066,173067],{"class":3793}," BalanceNotEnoughError",[66,173069,348],{"class":76},[66,173071,173072],{"class":102},"Exception",[66,173074,522],{"class":76},[66,173076,173077],{"class":68,"line":80},[66,173078,151302],{"class":72},[66,173080,173081],{"class":68,"line":112},[66,173082,109],{"emptyLinePlaceholder":108},[66,173084,173085],{"class":68,"line":129},[66,173086,109],{"emptyLinePlaceholder":108},[66,173088,173089,173091,173093],{"class":68,"line":138},[66,173090,33739],{"class":72},[66,173092,151949],{"class":3793},[66,173094,164371],{"class":76},[66,173096,173097,173099,173101,173103],{"class":68,"line":227},[66,173098,380],{"class":72},[66,173100,151905],{"class":76},[66,173102,386],{"class":72},[66,173104,164148],{"class":76},[66,173106,173107,173109,173112,173114],{"class":68,"line":236},[66,173108,105205],{"class":72},[66,173110,173111],{"class":76}," BalanceNotEnoughError(",[66,173113,152000],{"class":356},[66,173115,313],{"class":76},[66,173117,173118,173120,173122,173124],{"class":68,"line":241},[66,173119,5907],{"class":72},[66,173121,164378],{"class":76},[66,173123,2511],{"class":72},[66,173125,151938],{"class":76},[66,173127,173128],{"class":68,"line":372},[66,173129,109],{"emptyLinePlaceholder":108},[66,173131,173132],{"class":68,"line":377},[66,173133,109],{"emptyLinePlaceholder":108},[66,173135,173136,173138],{"class":68,"line":392},[66,173137,172441],{"class":72},[66,173139,126],{"class":76},[66,173141,173142,173144,173146,173149,173151,173153,173155],{"class":68,"line":405},[66,173143,164049],{"class":76},[66,173145,99],{"class":72},[66,173147,173148],{"class":76}," withdraw(",[66,173150,310],{"class":102},[66,173152,307],{"class":76},[66,173154,3552],{"class":102},[66,173156,313],{"class":76},[66,173158,173159,173161,173164,173166],{"class":68,"line":418},[66,173160,172453],{"class":72},[66,173162,173163],{"class":76}," BalanceNotEnoughError ",[66,173165,33176],{"class":72},[66,173167,172785],{"class":76},[66,173169,173170,173172],{"class":68,"line":430},[66,173171,132],{"class":102},[66,173173,68778],{"class":76},[19,173175,173176],{},"入门阶段大多数情况使用内置异常即可。",[14,173178,173180],{"id":173179},"_99-traceback","9.9 traceback",[19,173182,173183],{},"调试时可以输出完整异常堆栈。",[57,173185,173187],{"className":59,"code":173186,"language":61,"meta":62,"style":62},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[23,173188,173189,173196,173200,173206,173216,173224],{"__ignoreMap":62},[66,173190,173191,173193],{"class":68,"line":69},[66,173192,284],{"class":72},[66,173194,173195],{"class":76}," traceback\n",[66,173197,173198],{"class":68,"line":80},[66,173199,109],{"emptyLinePlaceholder":108},[66,173201,173202,173204],{"class":68,"line":112},[66,173203,172441],{"class":72},[66,173205,126],{"class":76},[66,173207,173208,173210,173212,173214],{"class":68,"line":129},[66,173209,3814],{"class":102},[66,173211,348],{"class":76},[66,173213,157630],{"class":356},[66,173215,313],{"class":76},[66,173217,173218,173220,173222],{"class":68,"line":138},[66,173219,172453],{"class":72},[66,173221,153986],{"class":102},[66,173223,126],{"class":76},[66,173225,173226],{"class":68,"line":227},[66,173227,173228],{"class":76},"    traceback.print_exc()\n",[19,173230,173231],{},"日志系统中常把异常堆栈记录到文件。",[14,173233,173235],{"id":173234},"_910-什么是模块","9.10 什么是模块",[19,173237,173238,173239,127753],{},"模块就是一个 ",[23,173240,148122],{},[19,173242,173243,173244,807],{},"例如创建 ",[23,173245,173246],{},"my_math.py",[57,173248,173250],{"className":59,"code":173249,"language":61,"meta":62,"style":62},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[23,173251,173252,173260,173270,173274,173278,173287],{"__ignoreMap":62},[66,173253,173254,173256,173258],{"class":68,"line":69},[66,173255,33739],{"class":72},[66,173257,7022],{"class":3793},[66,173259,152855],{"class":76},[66,173261,173262,173264,173266,173268],{"class":68,"line":80},[66,173263,5907],{"class":72},[66,173265,12675],{"class":76},[66,173267,1184],{"class":72},[66,173269,152866],{"class":76},[66,173271,173272],{"class":68,"line":112},[66,173273,109],{"emptyLinePlaceholder":108},[66,173275,173276],{"class":68,"line":129},[66,173277,109],{"emptyLinePlaceholder":108},[66,173279,173280,173282,173285],{"class":68,"line":138},[66,173281,33739],{"class":72},[66,173283,173284],{"class":3793}," sub",[66,173286,152855],{"class":76},[66,173288,173289,173291,173293,173295],{"class":68,"line":227},[66,173290,5907],{"class":72},[66,173292,12675],{"class":76},[66,173294,2511],{"class":72},[66,173296,152866],{"class":76},[19,173298,173299],{},"在另一个文件中导入：",[57,173301,173303],{"className":59,"code":173302,"language":61,"meta":62,"style":62},"import my_math\n\nprint(my_math.add(1, 2))\n",[23,173304,173305,173312,173316],{"__ignoreMap":62},[66,173306,173307,173309],{"class":68,"line":69},[66,173308,284],{"class":72},[66,173310,173311],{"class":76}," my_math\n",[66,173313,173314],{"class":68,"line":80},[66,173315,109],{"emptyLinePlaceholder":108},[66,173317,173318,173320,173323,173325,173327,173329],{"class":68,"line":112},[66,173319,244],{"class":102},[66,173321,173322],{"class":76},"(my_math.add(",[66,173324,304],{"class":102},[66,173326,307],{"class":76},[66,173328,795],{"class":102},[66,173330,360],{"class":76},[14,173332,173334],{"id":173333},"_911-import导入","9.11 import导入",[484,173336,173338],{"id":173337},"_9111-导入模块","9.11.1 导入模块",[57,173340,173342],{"className":59,"code":173341,"language":61,"meta":62,"style":62},"import random\n\nprint(random.randint(1, 10))\n",[23,173343,173344,173350,173354],{"__ignoreMap":62},[66,173345,173346,173348],{"class":68,"line":69},[66,173347,284],{"class":72},[66,173349,287],{"class":76},[66,173351,173352],{"class":68,"line":80},[66,173353,109],{"emptyLinePlaceholder":108},[66,173355,173356,173358,173361,173363,173365,173367],{"class":68,"line":112},[66,173357,244],{"class":102},[66,173359,173360],{"class":76},"(random.randint(",[66,173362,304],{"class":102},[66,173364,307],{"class":76},[66,173366,790],{"class":102},[66,173368,360],{"class":76},[484,173370,173372],{"id":173371},"_9112-导入指定内容","9.11.2 导入指定内容",[57,173374,173376],{"className":59,"code":173375,"language":61,"meta":62,"style":62},"from random import randint\n\nprint(randint(1, 10))\n",[23,173377,173378,173389,173393],{"__ignoreMap":62},[66,173379,173380,173382,173384,173386],{"class":68,"line":69},[66,173381,32532],{"class":72},[66,173383,59576],{"class":76},[66,173385,284],{"class":72},[66,173387,173388],{"class":76}," randint\n",[66,173390,173391],{"class":68,"line":80},[66,173392,109],{"emptyLinePlaceholder":108},[66,173394,173395,173397,173400,173402,173404,173406],{"class":68,"line":112},[66,173396,244],{"class":102},[66,173398,173399],{"class":76},"(randint(",[66,173401,304],{"class":102},[66,173403,307],{"class":76},[66,173405,790],{"class":102},[66,173407,360],{"class":76},[484,173409,173411],{"id":173410},"_9113-起别名","9.11.3 起别名",[57,173413,173415],{"className":59,"code":173414,"language":61,"meta":62,"style":62},"import random as rd\n\nprint(rd.randint(1, 10))\n",[23,173416,173417,173428,173432],{"__ignoreMap":62},[66,173418,173419,173421,173423,173425],{"class":68,"line":69},[66,173420,284],{"class":72},[66,173422,59576],{"class":76},[66,173424,33176],{"class":72},[66,173426,173427],{"class":76}," rd\n",[66,173429,173430],{"class":68,"line":80},[66,173431,109],{"emptyLinePlaceholder":108},[66,173433,173434,173436,173439,173441,173443,173445],{"class":68,"line":112},[66,173435,244],{"class":102},[66,173437,173438],{"class":76},"(rd.randint(",[66,173440,304],{"class":102},[66,173442,307],{"class":76},[66,173444,790],{"class":102},[66,173446,360],{"class":76},[57,173448,173450],{"className":59,"code":173449,"language":61,"meta":62,"style":62},"from random import randint as rint\n\nprint(rint(1, 10))\n",[23,173451,173452,173468,173472],{"__ignoreMap":62},[66,173453,173454,173456,173458,173460,173463,173465],{"class":68,"line":69},[66,173455,32532],{"class":72},[66,173457,59576],{"class":76},[66,173459,284],{"class":72},[66,173461,173462],{"class":76}," randint ",[66,173464,33176],{"class":72},[66,173466,173467],{"class":76}," rint\n",[66,173469,173470],{"class":68,"line":80},[66,173471,109],{"emptyLinePlaceholder":108},[66,173473,173474,173476,173479,173481,173483,173485],{"class":68,"line":112},[66,173475,244],{"class":102},[66,173477,173478],{"class":76},"(rint(",[66,173480,304],{"class":102},[66,173482,307],{"class":76},[66,173484,790],{"class":102},[66,173486,360],{"class":76},[484,173488,173490],{"id":173489},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[57,173492,173494],{"className":59,"code":173493,"language":61,"meta":62,"style":62},"from random import *\n",[23,173495,173496],{"__ignoreMap":62},[66,173497,173498,173500,173502,173504],{"class":68,"line":69},[66,173499,32532],{"class":72},[66,173501,59576],{"class":76},[66,173503,284],{"class":72},[66,173505,173506],{"class":72}," *\n",[19,173508,173509],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,173511,173513],{"id":173512},"_912-常用内置模块","9.12 常用内置模块",[484,173515,173517],{"id":173516},"_9121-random","9.12.1 random",[57,173519,173521],{"className":59,"code":173520,"language":61,"meta":62,"style":62},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[23,173522,173523,173529,173533,173547,173566],{"__ignoreMap":62},[66,173524,173525,173527],{"class":68,"line":69},[66,173526,284],{"class":72},[66,173528,287],{"class":76},[66,173530,173531],{"class":68,"line":80},[66,173532,109],{"emptyLinePlaceholder":108},[66,173534,173535,173537,173539,173541,173543,173545],{"class":68,"line":112},[66,173536,244],{"class":102},[66,173538,173360],{"class":76},[66,173540,304],{"class":102},[66,173542,307],{"class":76},[66,173544,790],{"class":102},[66,173546,360],{"class":76},[66,173548,173549,173551,173554,173556,173558,173560,173562,173564],{"class":68,"line":129},[66,173550,244],{"class":102},[66,173552,173553],{"class":76},"(random.choice([",[66,173555,691],{"class":356},[66,173557,307],{"class":76},[66,173559,696],{"class":356},[66,173561,307],{"class":76},[66,173563,701],{"class":356},[66,173565,34933],{"class":76},[66,173567,173568,173570,173573,173575,173577,173579,173581,173583,173585,173587,173589,173591,173593,173595],{"class":68,"line":138},[66,173569,244],{"class":102},[66,173571,173572],{"class":76},"(random.sample([",[66,173574,304],{"class":102},[66,173576,307],{"class":76},[66,173578,795],{"class":102},[66,173580,307],{"class":76},[66,173582,1520],{"class":102},[66,173584,307],{"class":76},[66,173586,1076],{"class":102},[66,173588,307],{"class":76},[66,173590,752],{"class":102},[66,173592,113973],{"class":76},[66,173594,795],{"class":102},[66,173596,360],{"class":76},[484,173598,173600],{"id":173599},"_9122-time","9.12.2 time",[57,173602,173604],{"className":59,"code":173603,"language":61,"meta":62,"style":62},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[23,173605,173606,173612,173616,173623,173631],{"__ignoreMap":62},[66,173607,173608,173610],{"class":68,"line":69},[66,173609,284],{"class":72},[66,173611,33621],{"class":76},[66,173613,173614],{"class":68,"line":80},[66,173615,109],{"emptyLinePlaceholder":108},[66,173617,173618,173620],{"class":68,"line":112},[66,173619,244],{"class":102},[66,173621,173622],{"class":76},"(time.time())\n",[66,173624,173625,173627,173629],{"class":68,"line":129},[66,173626,96847],{"class":76},[66,173628,304],{"class":102},[66,173630,313],{"class":76},[66,173632,173633,173635,173637,173640],{"class":68,"line":138},[66,173634,244],{"class":102},[66,173636,348],{"class":76},[66,173638,173639],{"class":356},"\"1秒后执行\"",[66,173641,313],{"class":76},[484,173643,173645],{"id":173644},"_9123-datetime","9.12.3 datetime",[57,173647,173649],{"className":59,"code":173648,"language":61,"meta":62,"style":62},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[23,173650,173651,173663,173667,173677,173684],{"__ignoreMap":62},[66,173652,173653,173655,173658,173660],{"class":68,"line":69},[66,173654,32532],{"class":72},[66,173656,173657],{"class":76}," datetime ",[66,173659,284],{"class":72},[66,173661,173662],{"class":76}," datetime\n",[66,173664,173665],{"class":68,"line":80},[66,173666,109],{"emptyLinePlaceholder":108},[66,173668,173669,173672,173674],{"class":68,"line":112},[66,173670,173671],{"class":76},"now ",[66,173673,99],{"class":72},[66,173675,173676],{"class":76}," datetime.now()\n",[66,173678,173679,173681],{"class":68,"line":129},[66,173680,244],{"class":102},[66,173682,173683],{"class":76},"(now)\n",[66,173685,173686,173688,173691,173694,173696,173699],{"class":68,"line":138},[66,173687,244],{"class":102},[66,173689,173690],{"class":76},"(now.strftime(",[66,173692,173693],{"class":356},"\"%Y-%m-",[66,173695,158441],{"class":102},[66,173697,173698],{"class":356}," %H:%M:%S\"",[66,173700,360],{"class":76},[484,173702,173704],{"id":173703},"_9124-os","9.12.4 os",[57,173706,173708],{"className":59,"code":173707,"language":61,"meta":62,"style":62},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[23,173709,173710,173716,173720,173727],{"__ignoreMap":62},[66,173711,173712,173714],{"class":68,"line":69},[66,173713,284],{"class":72},[66,173715,47092],{"class":76},[66,173717,173718],{"class":68,"line":80},[66,173719,109],{"emptyLinePlaceholder":108},[66,173721,173722,173724],{"class":68,"line":112},[66,173723,244],{"class":102},[66,173725,173726],{"class":76},"(os.getcwd())\n",[66,173728,173729,173731,173734,173737],{"class":68,"line":129},[66,173730,244],{"class":102},[66,173732,173733],{"class":76},"(os.listdir(",[66,173735,173736],{"class":356},"\".\"",[66,173738,360],{"class":76},[484,173740,173742],{"id":173741},"_9125-sys","9.12.5 sys",[57,173744,173746],{"className":59,"code":173745,"language":61,"meta":62,"style":62},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[23,173747,173748,173755,173759,173766],{"__ignoreMap":62},[66,173749,173750,173752],{"class":68,"line":69},[66,173751,284],{"class":72},[66,173753,173754],{"class":76}," sys\n",[66,173756,173757],{"class":68,"line":80},[66,173758,109],{"emptyLinePlaceholder":108},[66,173760,173761,173763],{"class":68,"line":112},[66,173762,244],{"class":102},[66,173764,173765],{"class":76},"(sys.version)\n",[66,173767,173768,173770],{"class":68,"line":129},[66,173769,244],{"class":102},[66,173771,173772],{"class":76},"(sys.path)\n",[14,173774,173776,173777,173779,173780,1130],{"id":173775},"_913-if-name-main","9.13 if ",[2141,173778,81588],{}," == \"",[2141,173781,103831],{},[19,173783,173784,173785,173788],{},"模块被直接运行和被导入时，",[23,173786,173787],{},"__name__"," 的值不同。",[19,173790,173791,173792,807],{},"创建 ",[23,173793,173794],{},"my_module.py",[57,173796,173798],{"className":59,"code":173797,"language":61,"meta":62,"style":62},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[23,173799,173800,173808,173818,173822,173826,173838],{"__ignoreMap":62},[66,173801,173802,173804,173806],{"class":68,"line":69},[66,173803,33739],{"class":72},[66,173805,7022],{"class":3793},[66,173807,152855],{"class":76},[66,173809,173810,173812,173814,173816],{"class":68,"line":80},[66,173811,5907],{"class":72},[66,173813,12675],{"class":76},[66,173815,1184],{"class":72},[66,173817,152866],{"class":76},[66,173819,173820],{"class":68,"line":112},[66,173821,109],{"emptyLinePlaceholder":108},[66,173823,173824],{"class":68,"line":129},[66,173825,109],{"emptyLinePlaceholder":108},[66,173827,173828,173830,173832,173834,173836],{"class":68,"line":138},[66,173829,3373],{"class":72},[66,173831,33014],{"class":102},[66,173833,959],{"class":72},[66,173835,103335],{"class":356},[66,173837,126],{"class":76},[66,173839,173840,173842,173844,173846,173848,173850],{"class":68,"line":227},[66,173841,132],{"class":102},[66,173843,168159],{"class":76},[66,173845,304],{"class":102},[66,173847,307],{"class":76},[66,173849,795],{"class":102},[66,173851,360],{"class":76},[19,173853,173854],{},"作用：",[31,173856,173857,173860],{},[34,173858,173859],{},"直接运行该文件时，执行测试代码。",[34,173861,173862],{},"被其他文件导入时，不执行测试代码。",[19,173864,173865],{},"这是写模块时很常用的习惯。",[14,173867,173869],{"id":173868},"_914-包","9.14 包",[19,173871,173872,173873,173876],{},"包是包含 ",[23,173874,173875],{},"__init__.py"," 的目录，用于组织多个模块。",[19,173878,173879],{},"目录结构：",[57,173881,173884],{"className":173882,"code":173883,"language":555,"meta":62},[553],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[23,173885,173883],{"__ignoreMap":62},[19,173887,173888],{},"导入：",[57,173890,173892],{"className":59,"code":173891,"language":61,"meta":62,"style":62},"from utils.file_utils import read_file\n",[23,173893,173894],{"__ignoreMap":62},[66,173895,173896,173898,173901,173903],{"class":68,"line":69},[66,173897,32532],{"class":72},[66,173899,173900],{"class":76}," utils.file_utils ",[66,173902,284],{"class":72},[66,173904,173905],{"class":76}," read_file\n",[19,173907,173908,173910],{},[23,173909,173875],{}," 可以为空，也可以写包初始化逻辑。",[14,173912,173914],{"id":173913},"_915-第三方包","9.15 第三方包",[19,173916,173917,173918,173920],{},"第三方包通过 ",[23,173919,25634],{}," 安装。",[57,173922,173924],{"className":25625,"code":173923,"language":25627,"meta":62,"style":62},"pip install requests\n",[23,173925,173926],{"__ignoreMap":62},[66,173927,173928,173930,173932],{"class":68,"line":69},[66,173929,25634],{"class":3793},[66,173931,25637],{"class":356},[66,173933,147868],{"class":356},[19,173935,173936],{},"使用：",[57,173938,173940],{"className":59,"code":173939,"language":61,"meta":62,"style":62},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[23,173941,173942,173948,173952,173967],{"__ignoreMap":62},[66,173943,173944,173946],{"class":68,"line":69},[66,173945,284],{"class":72},[66,173947,147868],{"class":76},[66,173949,173950],{"class":68,"line":80},[66,173951,109],{"emptyLinePlaceholder":108},[66,173953,173954,173957,173959,173962,173965],{"class":68,"line":112},[66,173955,173956],{"class":76},"response ",[66,173958,99],{"class":72},[66,173960,173961],{"class":76}," requests.get(",[66,173963,173964],{"class":356},"\"https:\u002F\u002Fwww.example.com\"",[66,173966,313],{"class":76},[66,173968,173969,173971],{"class":68,"line":129},[66,173970,244],{"class":102},[66,173972,173973],{"class":76},"(response.status_code)\n",[19,173975,173976],{},"查看已安装包：",[57,173978,173980],{"className":25625,"code":173979,"language":25627,"meta":62,"style":62},"pip list\n",[23,173981,173982],{"__ignoreMap":62},[66,173983,173984,173986],{"class":68,"line":69},[66,173985,25634],{"class":3793},[66,173987,120726],{"class":356},[19,173989,173990],{},"导出项目依赖：",[57,173992,173993],{"className":25625,"code":148063,"language":25627,"meta":62,"style":62},[23,173994,173995],{"__ignoreMap":62},[66,173996,173997,173999,174001,174003],{"class":68,"line":69},[66,173998,25634],{"class":3793},[66,174000,148072],{"class":356},[66,174002,28023],{"class":72},[66,174004,148077],{"class":356},[19,174006,174007],{},"安装项目依赖：",[57,174009,174010],{"className":25625,"code":148083,"language":25627,"meta":62,"style":62},[23,174011,174012],{"__ignoreMap":62},[66,174013,174014,174016,174018,174020],{"class":68,"line":69},[66,174015,25634],{"class":3793},[66,174017,25637],{"class":356},[66,174019,121410],{"class":102},[66,174021,148077],{"class":356},[14,174023,174025],{"id":174024},"_916-模块搜索路径","9.16 模块搜索路径",[19,174027,174028,174029,174032],{},"Python 导入模块时会在 ",[23,174030,174031],{},"sys.path"," 中查找。",[57,174034,174036],{"className":59,"code":174035,"language":61,"meta":62,"style":62},"import sys\n\nfor path in sys.path:\n    print(path)\n",[23,174037,174038,174044,174048,174060],{"__ignoreMap":62},[66,174039,174040,174042],{"class":68,"line":69},[66,174041,284],{"class":72},[66,174043,173754],{"class":76},[66,174045,174046],{"class":68,"line":80},[66,174047,109],{"emptyLinePlaceholder":108},[66,174049,174050,174052,174055,174057],{"class":68,"line":112},[66,174051,502],{"class":72},[66,174053,174054],{"class":76}," path ",[66,174056,507],{"class":72},[66,174058,174059],{"class":76}," sys.path:\n",[66,174061,174062,174064],{"class":68,"line":129},[66,174063,132],{"class":102},[66,174065,170788],{"class":76},[19,174067,174068],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,174070,159371],{},[57,174072,174075],{"className":174073,"code":174074,"language":555,"meta":62},[553],"random.py\njson.py\ntime.py\n",[23,174076,174074],{"__ignoreMap":62},[19,174078,174079],{},"这些文件名可能导致导入异常。",[14,174081,174083],{"id":174082},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,174085,173879],{},[57,174087,174090],{"className":174088,"code":174089,"language":555,"meta":62},[553],"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",[23,174091,174089],{"__ignoreMap":62},[19,174093,174094,807],{},[23,174095,174096],{},"utils\u002Ffile_utils.py",[57,174098,174100],{"className":59,"code":174099,"language":61,"meta":62,"style":62},"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",[23,174101,174102,174108,174118,174122,174126,174136,174146,174154,174160,174164,174191,174201,174205,174209,174219,174245],{"__ignoreMap":62},[66,174103,174104,174106],{"class":68,"line":69},[66,174105,284],{"class":72},[66,174107,148857],{"class":76},[66,174109,174110,174112,174114,174116],{"class":68,"line":80},[66,174111,32532],{"class":72},[66,174113,110084],{"class":76},[66,174115,284],{"class":72},[66,174117,110089],{"class":76},[66,174119,174120],{"class":68,"line":112},[66,174121,109],{"emptyLinePlaceholder":108},[66,174123,174124],{"class":68,"line":129},[66,174125,109],{"emptyLinePlaceholder":108},[66,174127,174128,174130,174133],{"class":68,"line":138},[66,174129,33739],{"class":72},[66,174131,174132],{"class":3793}," read_json",[66,174134,174135],{"class":76},"(path):\n",[66,174137,174138,174141,174143],{"class":68,"line":227},[66,174139,174140],{"class":76},"    path ",[66,174142,99],{"class":72},[66,174144,174145],{"class":76}," Path(path)\n",[66,174147,174148,174150,174152],{"class":68,"line":236},[66,174149,380],{"class":72},[66,174151,40718],{"class":72},[66,174153,170869],{"class":76},[66,174155,174156,174158],{"class":68,"line":241},[66,174157,16557],{"class":72},[66,174159,53622],{"class":76},[66,174161,174162],{"class":68,"line":372},[66,174163,109],{"emptyLinePlaceholder":108},[66,174165,174166,174168,174170,174173,174175,174177,174179,174181,174183,174185,174187,174189],{"class":68,"line":377},[66,174167,35966],{"class":72},[66,174169,148557],{"class":102},[66,174171,174172],{"class":76},"(path, ",[66,174174,148567],{"class":356},[66,174176,307],{"class":76},[66,174178,148572],{"class":1234},[66,174180,99],{"class":72},[66,174182,148577],{"class":356},[66,174184,15519],{"class":76},[66,174186,33176],{"class":72},[66,174188,149919],{"class":1234},[66,174190,126],{"class":76},[66,174192,174193,174195,174197,174199],{"class":68,"line":392},[66,174194,16557],{"class":72},[66,174196,149930],{"class":76},[66,174198,47140],{"class":1234},[66,174200,313],{"class":76},[66,174202,174203],{"class":68,"line":405},[66,174204,109],{"emptyLinePlaceholder":108},[66,174206,174207],{"class":68,"line":418},[66,174208,109],{"emptyLinePlaceholder":108},[66,174210,174211,174213,174216],{"class":68,"line":430},[66,174212,33739],{"class":72},[66,174214,174215],{"class":3793}," write_json",[66,174217,174218],{"class":76},"(path, data):\n",[66,174220,174221,174223,174225,174227,174229,174231,174233,174235,174237,174239,174241,174243],{"class":68,"line":438},[66,174222,35966],{"class":72},[66,174224,148557],{"class":102},[66,174226,174172],{"class":76},[66,174228,153738],{"class":356},[66,174230,307],{"class":76},[66,174232,148572],{"class":1234},[66,174234,99],{"class":72},[66,174236,148577],{"class":356},[66,174238,15519],{"class":76},[66,174240,33176],{"class":72},[66,174242,149919],{"class":1234},[66,174244,126],{"class":76},[66,174246,174247,174250,174252,174254,174256,174258,174260,174262,174264,174266,174268],{"class":68,"line":465},[66,174248,174249],{"class":76},"        json.dump(data, ",[66,174251,47140],{"class":1234},[66,174253,307],{"class":76},[66,174255,148903],{"class":1234},[66,174257,99],{"class":72},[66,174259,35775],{"class":102},[66,174261,307],{"class":76},[66,174263,153774],{"class":1234},[66,174265,99],{"class":72},[66,174267,795],{"class":102},[66,174269,313],{"class":76},[19,174271,174272,807],{},[23,174273,156359],{},[57,174275,174277],{"className":59,"code":174276,"language":61,"meta":62,"style":62},"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",[23,174278,174279,174290,174294,174307,174327],{"__ignoreMap":62},[66,174280,174281,174283,174285,174287],{"class":68,"line":69},[66,174282,32532],{"class":72},[66,174284,173900],{"class":76},[66,174286,284],{"class":72},[66,174288,174289],{"class":76}," read_json, write_json\n",[66,174291,174292],{"class":68,"line":80},[66,174293,109],{"emptyLinePlaceholder":108},[66,174295,174296,174298,174300,174303,174305],{"class":68,"line":112},[66,174297,683],{"class":76},[66,174299,99],{"class":72},[66,174301,174302],{"class":76}," read_json(",[66,174304,153593],{"class":356},[66,174306,313],{"class":76},[66,174308,174309,174311,174313,174315,174317,174319,174321,174323,174325],{"class":68,"line":129},[66,174310,172093],{"class":76},[66,174312,64458],{"class":356},[66,174314,53221],{"class":76},[66,174316,691],{"class":356},[66,174318,307],{"class":76},[66,174320,153234],{"class":356},[66,174322,53221],{"class":76},[66,174324,2964],{"class":102},[66,174326,166711],{"class":76},[66,174328,174329,174332,174334],{"class":68,"line":138},[66,174330,174331],{"class":76},"write_json(",[66,174333,153593],{"class":356},[66,174335,174336],{"class":76},", students)\n",[14,174338,174340],{"id":174339},"_918-易错点","9.18 易错点",[31,174342,174343,174346,174351,174356,174359,174362],{},[34,174344,174345],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[34,174347,174348,174349,158],{},"能指定异常类型就不要裸写 ",[23,174350,172453],{},[34,174352,174353,174355],{},[23,174354,172828],{}," 无论是否出错都会执行。",[34,174357,174358],{},"模块文件名不要和标准库重名。",[34,174360,174361],{},"导入自己写的模块时，要注意运行目录。",[34,174363,174364],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,174366,174368],{"id":174367},"_919-本章练习","9.19 本章练习",[31,174370,174371,174374,174377,174383,174390],{},[34,174372,174373],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[34,174375,174376],{},"写函数读取文件，如果文件不存在则返回空字符串。",[34,174378,173791,174379,174382],{},[23,174380,174381],{},"math_utils.py","，实现加减乘除函数并导入使用。",[34,174384,174385,174386,174389],{},"创建一个 ",[23,174387,174388],{},"utils"," 包，把 JSON 读写函数放进去。",[34,174391,174392],{},"写一个程序，捕获除零异常和输入格式异常。",[1903,174394,174395],{},"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":62,"searchDepth":80,"depth":80,"links":174397},[174398,174399,174400,174401,174402,174403,174404,174405,174406,174407,174408,174414,174421,174423,174424,174425,174426,174427,174428],{"id":172250,"depth":80,"text":172251},{"id":172378,"depth":80,"text":172379},{"id":172427,"depth":80,"text":172428},{"id":172576,"depth":80,"text":172577},{"id":172748,"depth":80,"text":172749},{"id":172817,"depth":80,"text":172818},{"id":172928,"depth":80,"text":172929},{"id":173054,"depth":80,"text":173055},{"id":173179,"depth":80,"text":173180},{"id":173234,"depth":80,"text":173235},{"id":173333,"depth":80,"text":173334,"children":174409},[174410,174411,174412,174413],{"id":173337,"depth":112,"text":173338},{"id":173371,"depth":112,"text":173372},{"id":173410,"depth":112,"text":173411},{"id":173489,"depth":112,"text":173490},{"id":173512,"depth":80,"text":173513,"children":174415},[174416,174417,174418,174419,174420],{"id":173516,"depth":112,"text":173517},{"id":173599,"depth":112,"text":173600},{"id":173644,"depth":112,"text":173645},{"id":173703,"depth":112,"text":173704},{"id":173741,"depth":112,"text":173742},{"id":173775,"depth":80,"text":174422},"9.13 if name == \"main\"",{"id":173868,"depth":80,"text":173869},{"id":173913,"depth":80,"text":173914},{"id":174024,"depth":80,"text":174025},{"id":174082,"depth":80,"text":174083},{"id":174339,"depth":80,"text":174340},{"id":174367,"depth":80,"text":174368},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":172242,"description":1926},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":174435,"title":174436,"body":174437,"description":174600,"extension":1927,"meta":174601,"navigation":108,"path":174602,"seo":174603,"stem":174604,"__hash__":174605},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":174438,"toc":174595},[174439,174442,174445,174448,174459,174461,174535,174538,174541,174544,174547,174550,174553,174556,174559,174562,174565],[10,174440,174436],{"id":174441},"python教程",[19,174443,174444],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,174446,174447],{},"建议学习环境：",[31,174449,174450,174453,174456],{},[34,174451,174452],{},"Python 版本：Python 3.10 及以上。",[34,174454,174455],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[34,174457,174458],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,174460,118849],{"id":118849},[31,174462,174463,174469,174475,174481,174487,174493,174499,174505,174511,174517,174523,174529],{},[34,174464,174465],{},[2229,174466,174468],{"href":174467},".\u002Fch1-Python","Python环境与第一个程序",[34,174470,174471],{},[2229,174472,174474],{"href":174473},".\u002Fch2","基础语法、变量与字符串",[34,174476,174477],{},[2229,174478,174480],{"href":174479},".\u002Fch3","判断语句",[34,174482,174483],{},[2229,174484,174486],{"href":174485},".\u002Fch4","循环语句",[34,174488,174489],{},[2229,174490,174492],{"href":174491},".\u002Fch5","函数基础",[34,174494,174495],{},[2229,174496,174498],{"href":174497},".\u002Fch6","数据容器",[34,174500,174501],{},[2229,174502,174504],{"href":174503},".\u002Fch7","函数进阶",[34,174506,174507],{},[2229,174508,174510],{"href":174509},".\u002Fch8","文件操作",[34,174512,174513],{},[2229,174514,174516],{"href":174515},".\u002Fch9","异常、模块与包",[34,174518,174519],{},[2229,174520,174522],{"href":174521},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[34,174524,174525],{},[2229,174526,174528],{"href":174527},".\u002Fch11","面向对象基础",[34,174530,174531],{},[2229,174532,174534],{"href":174533},".\u002Fch12","综合案例与复习路线",[14,174536,174537],{"id":174537},"学习路线",[19,174539,174540],{},"第一阶段：能运行程序。",[19,174542,174543],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,174545,174546],{},"第二阶段：能组织数据。",[19,174548,174549],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,174551,174552],{},"第三阶段：能封装逻辑。",[19,174554,174555],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,174557,174558],{},"第四阶段：能做小项目。",[19,174560,174561],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,174563,174564],{"id":174564},"参考资料",[31,174566,174567,174574,174581,174588],{},[34,174568,174569,174570],{},"黑马程序员 Python 入门教程推荐：",[2229,174571,174572],{"href":174572,"rel":174573},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[25668],[34,174575,174576,174577],{},"Python 官方中文教程：",[2229,174578,174579],{"href":174579,"rel":174580},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[25668],[34,174582,174583,174584],{},"Python 标准库文档：",[2229,174585,174586],{"href":174586,"rel":174587},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[25668],[34,174589,174590,174591],{},"pyecharts 文档：",[2229,174592,174593],{"href":174593,"rel":174594},"https:\u002F\u002Fpyecharts.org\u002F",[25668],{"title":62,"searchDepth":80,"depth":80,"links":174596},[174597,174598,174599],{"id":118849,"depth":80,"text":118849},{"id":174537,"depth":80,"text":174537},{"id":174564,"depth":80,"text":174564},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":25181},"\u002Fwiki\u002F2024-10-10-python",{"title":174436,"description":174600},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331478868]